From 86a280a921994bf5eae4f2780fa1864d6dde2649 Mon Sep 17 00:00:00 2001 From: Boyuan Yang Date: Fri, 3 Nov 2023 12:30:20 -0400 Subject: [PATCH 1/1] Import easyeffects_7.1.1.orig.tar.gz [dgit import orig easyeffects_7.1.1.orig.tar.gz] --- .circleci/config.yml | 138 + .circleci/disable_all_plugins.sh | 42 + .circleci/enable_all_plugins.sh | 42 + .circleci/presets/sie_preset_disable_all.json | 424 ++ .circleci/presets/sie_preset_enable_all.json | 502 +++ .circleci/presets/soe_preset_disable_all.json | 875 ++++ .circleci/presets/soe_preset_enable_all.json | 875 ++++ .circleci/test.sh | 124 + .clang-format | 148 + .clang-tidy | 79 + .github/FUNDING.yml | 4 + .github/ISSUE_TEMPLATE/bug_report.yml | 58 + .github/dependabot.yaml | 6 + .github/workflows/CI.yaml | 267 ++ .github/workflows/artifact-pr-comment.yaml | 112 + .github/workflows/deploy-help.yaml | 49 + .github/workflows/flatpak-update.yaml | 31 + .github/workflows/translation-templates.yaml | 70 + .gitignore | 65 + CHANGELOG.md | 498 ++ LICENSE | 674 +++ PKGBUILD | 53 + PKGBUILD_AUR | 39 + README.md | 181 + data/com.github.wwmm.easyeffects-symbolic.svg | 88 + data/com.github.wwmm.easyeffects.Devel.svg | 167 + data/com.github.wwmm.easyeffects.Source.svg | 906 ++++ data/com.github.wwmm.easyeffects.desktop.in | 14 + ...om.github.wwmm.easyeffects.metainfo.xml.in | 494 ++ data/com.github.wwmm.easyeffects.service.in | 3 + data/com.github.wwmm.easyeffects.svg | 22 + data/easyeffects.gresource.xml | 69 + data/icons/scalable/emblems/credits.txt | 13 + .../ee-applications-multimedia-symbolic.svg | 4 + .../emblems/ee-arrow-down-symbolic.svg | 1 + .../emblems/ee-arrows-right-symbolic.svg | 4 + .../scalable/emblems/ee-bypass-symbolic.svg | 7 + .../emblems/ee-drag-handle-symbolic.svg | 1 + .../scalable/emblems/ee-spectrum-symbolic.svg | 54 + data/meson.build | 119 + data/presets/gstreamer_ballad.json | 109 + data/presets/gstreamer_classic.json | 109 + data/presets/gstreamer_club.json | 109 + data/presets/gstreamer_dance.json | 109 + data/presets/gstreamer_more_bass.json | 109 + .../gstreamer_more_bass_and_treble.json | 109 + data/presets/gstreamer_party.json | 109 + data/presets/gstreamer_pop.json | 109 + data/presets/gstreamer_reggae.json | 109 + data/presets/gstreamer_rock.json | 109 + data/presets/gstreamer_ska.json | 109 + data/presets/gstreamer_soft.json | 109 + data/presets/gstreamer_techno.json | 109 + data/presets/ziyad_perfecteq.json | 109 + ...thub.wwmm.easyeffects.autogain.gschema.xml | 43 + ....wwmm.easyeffects.bassenhancer.gschema.xml | 42 + ....wwmm.easyeffects.bassloudness.gschema.xml | 31 + ...ub.wwmm.easyeffects.compressor.gschema.xml | 150 + ...hub.wwmm.easyeffects.convolver.gschema.xml | 26 + ...hub.wwmm.easyeffects.crossfeed.gschema.xml | 24 + ...b.wwmm.easyeffects.crystalizer.gschema.xml | 149 + ...wwmm.easyeffects.deepfilternet.gschema.xml | 41 + ...ithub.wwmm.easyeffects.deesser.gschema.xml | 69 + ....github.wwmm.easyeffects.delay.gschema.xml | 46 + ...wmm.easyeffects.echo_canceller.gschema.xml | 28 + ....easyeffects.equalizer.channel.gschema.xml | 1034 +++++ ...hub.wwmm.easyeffects.equalizer.gschema.xml | 44 + ...ithub.wwmm.easyeffects.exciter.gschema.xml | 42 + ...thub.wwmm.easyeffects.expander.gschema.xml | 140 + ...github.wwmm.easyeffects.filter.gschema.xml | 86 + ...m.github.wwmm.easyeffects.gate.gschema.xml | 139 + .../com.github.wwmm.easyeffects.gschema.xml | 62 + ...ub.wwmm.easyeffects.levelmeter.gschema.xml | 8 + ...hub.wwmm.easyeffects.libportal.gschema.xml | 8 + ...ithub.wwmm.easyeffects.limiter.gschema.xml | 121 + ...thub.wwmm.easyeffects.loudness.gschema.xml | 48 + ...hub.wwmm.easyeffects.maximizer.gschema.xml | 28 + ...asyeffects.multibandcompressor.gschema.xml | 874 ++++ ...wwmm.easyeffects.multibandgate.gschema.xml | 827 ++++ ...b.wwmm.easyeffects.outputlevel.gschema.xml | 8 + ....github.wwmm.easyeffects.pitch.gschema.xml | 46 + ...github.wwmm.easyeffects.reverb.gschema.xml | 59 + ...ithub.wwmm.easyeffects.rnnoise.gschema.xml | 34 + ...thub.wwmm.easyeffects.spectrum.gschema.xml | 53 + ....github.wwmm.easyeffects.speex.gschema.xml | 40 + ...b.wwmm.easyeffects.stereotools.gschema.xml | 91 + ....wwmm.easyeffects.streaminputs.gschema.xml | 24 + ...wwmm.easyeffects.streamoutputs.gschema.xml | 24 + data/ui/app_info.ui | 291 ++ data/ui/application_window.ui | 98 + data/ui/apps_box.ui | 34 + data/ui/autogain.ui | 636 +++ data/ui/autoload_row.ui | 121 + data/ui/bass_enhancer.ui | 503 +++ data/ui/bass_loudness.ui | 319 ++ data/ui/blocklist_menu.ui | 105 + data/ui/chart.ui | 7 + data/ui/compressor.ui | 1367 ++++++ data/ui/convolver.ui | 435 ++ data/ui/convolver_menu_combine.ui | 134 + data/ui/convolver_menu_impulses.ui | 58 + data/ui/crossfeed.ui | 328 ++ data/ui/crystalizer.ui | 229 + data/ui/crystalizer_band.ui | 72 + data/ui/custom.css | 4 + data/ui/deepfilternet.ui | 419 ++ data/ui/deesser.ui | 695 +++ data/ui/delay.ui | 439 ++ data/ui/echo_canceller.ui | 321 ++ data/ui/effects_box.ui | 150 + data/ui/equalizer.ui | 590 +++ data/ui/equalizer_band.ui | 332 ++ data/ui/exciter.ui | 502 +++ data/ui/expander.ui | 1285 ++++++ data/ui/factory_clients_listview.ui | 129 + data/ui/factory_input_device_dropdown.ui | 28 + data/ui/factory_modules_listview.ui | 101 + data/ui/factory_node_dropdown.ui | 32 + data/ui/factory_output_device_dropdown.ui | 28 + data/ui/factory_presets_dropdown.ui | 28 + data/ui/factory_rnnoise_listview.ui | 42 + data/ui/filter.ui | 502 +++ data/ui/gate.ui | 1499 +++++++ data/ui/level_meter.ui | 361 ++ data/ui/limiter.ui | 958 ++++ data/ui/loudness.ui | 358 ++ data/ui/maximizer.ui | 343 ++ data/ui/multiband_compressor.ui | 703 +++ data/ui/multiband_compressor_band.ui | 961 ++++ data/ui/multiband_gate.ui | 703 +++ data/ui/multiband_gate_band.ui | 929 ++++ data/ui/pipe_manager_box.ui | 600 +++ data/ui/pitch.ui | 433 ++ data/ui/plugin_row.ui | 78 + data/ui/plugins_box.ui | 136 + data/ui/plugins_menu.ui | 85 + data/ui/preferences_general.ui | 206 + data/ui/preferences_spectrum.ui | 269 ++ data/ui/preferences_window.ui | 6 + data/ui/preset_row.ui | 106 + data/ui/presets_menu.ui | 151 + data/ui/reverb.ui | 656 +++ data/ui/rnnoise.ui | 474 ++ data/ui/shortcuts.ui | 45 + data/ui/speex.ui | 383 ++ data/ui/stereo_tools.ui | 838 ++++ debian/changelog | 5 + debian/control | 46 + debian/copyright | 46 + debian/rules | 4 + debian/source/format | 1 + debian/watch | 4 + easyeffects.code-workspace | 95 + help/C/advancedinfo.page | 11 + help/C/autogain.page | 115 + help/C/bassenhancer.page | 68 + help/C/bassloudness.page | 44 + help/C/blocklist.page | 11 + help/C/compressor.page | 267 ++ help/C/convolver.page | 56 + help/C/crossfeed.page | 63 + help/C/crystalizer.page | 39 + help/C/deesser.page | 98 + help/C/delay.page | 62 + help/C/echocanceller.page | 38 + help/C/effectsorder.page | 9 + help/C/enableapp.page | 11 + help/C/equalizer.page | 240 + help/C/exciter.page | 68 + help/C/filter.page | 50 + help/C/gate.page | 245 + help/C/general.page | 64 + help/C/guide_1.page | 294 ++ help/C/index.page | 27 + help/C/limiter.page | 132 + help/C/loudness.page | 90 + help/C/maximizer.page | 44 + help/C/multibandcompressor.page | 311 ++ help/C/multibandgate.page | 281 ++ help/C/pipewire.page | 43 + help/C/pitch.page | 136 + help/C/reverb.page | 81 + help/C/rnnoise.page | 31 + help/C/saturated.page | 9 + help/C/settingsmenu.page | 8 + help/C/spectrum.page | 77 + help/C/speex.page | 21 + help/C/stereotools.page | 130 + help/C/testsignals.page | 35 + help/C/userpresets.page | 10 + help/meson.build | 49 + images/appdata-screenshot-01.png | Bin 0 -> 49811 bytes images/appdata-screenshot-02.png | Bin 0 -> 69026 bytes images/appdata-screenshot-03.png | Bin 0 -> 55680 bytes images/appdata-screenshot-04.png | Bin 0 -> 57448 bytes images/appdata-screenshot-05.png | Bin 0 -> 61295 bytes images/convolver.png | Bin 0 -> 104307 bytes images/easyeffects-dark-screenshot-1.png | Bin 0 -> 138536 bytes images/easyeffects-dark-screenshot-2.png | Bin 0 -> 145017 bytes images/easyeffects-dark-screenshot-3.png | Bin 0 -> 173218 bytes images/easyeffects-light-screenshot-1.png | Bin 0 -> 139477 bytes images/easyeffects-light-screenshot-2.png | Bin 0 -> 145917 bytes images/easyeffects-light-screenshot-3.png | Bin 0 -> 173589 bytes images/easyeffects_players.png | Bin 0 -> 83352 bytes images/easyeffects_plugins.png | Bin 0 -> 83345 bytes images/master_screenshot_test.png | Bin 0 -> 2216213 bytes include/app_info.hpp | 48 + include/application.hpp | 67 + include/application_ui.hpp | 41 + include/apps_box.hpp | 46 + include/autogain.hpp | 94 + include/autogain_preset.hpp | 32 + include/autogain_ui.hpp | 41 + include/bass_enhancer.hpp | 50 + include/bass_enhancer_preset.hpp | 32 + include/bass_enhancer_ui.hpp | 41 + include/bass_loudness.hpp | 46 + include/bass_loudness_preset.hpp | 32 + include/bass_loudness_ui.hpp | 41 + include/blocklist_menu.hpp | 42 + include/chart.hpp | 88 + include/client_info_holder.hpp | 45 + include/compressor.hpp | 62 + include/compressor_preset.hpp | 32 + include/compressor_ui.hpp | 45 + include/convolver.hpp | 109 + include/convolver_menu_combine.hpp | 46 + include/convolver_menu_impulses.hpp | 46 + include/convolver_preset.hpp | 32 + include/convolver_ui.hpp | 54 + include/convolver_ui_common.hpp | 31 + include/crossfeed.hpp | 50 + include/crossfeed_preset.hpp | 32 + include/crossfeed_ui.hpp | 41 + include/crystalizer.hpp | 212 + include/crystalizer_preset.hpp | 32 + include/crystalizer_ui.hpp | 41 + include/deepfilternet.hpp | 58 + include/deepfilternet_preset.hpp | 32 + include/deepfilternet_ui.hpp | 42 + include/deesser.hpp | 48 + include/deesser_preset.hpp | 32 + include/deesser_ui.hpp | 41 + include/delay.hpp | 44 + include/delay_preset.hpp | 32 + include/delay_ui.hpp | 41 + include/echo_canceller.hpp | 78 + include/echo_canceller_preset.hpp | 32 + include/echo_canceller_ui.hpp | 41 + include/effects_base.hpp | 131 + include/effects_box.hpp | 47 + include/equalizer.hpp | 102 + include/equalizer_band_box.hpp | 44 + include/equalizer_preset.hpp | 47 + include/equalizer_ui.hpp | 48 + include/exciter.hpp | 47 + include/exciter_preset.hpp | 32 + include/exciter_ui.hpp | 41 + include/expander.hpp | 62 + include/expander_preset.hpp | 32 + include/expander_ui.hpp | 42 + include/filter.hpp | 43 + include/filter_preset.hpp | 32 + include/filter_ui.hpp | 41 + include/fir_filter_bandpass.hpp | 34 + include/fir_filter_base.hpp | 100 + include/fir_filter_highpass.hpp | 34 + include/fir_filter_lowpass.hpp | 34 + include/gate.hpp | 64 + include/gate_preset.hpp | 32 + include/gate_ui.hpp | 42 + include/ladspa_wrapper.hpp | 251 ++ include/level_meter.hpp | 79 + include/level_meter_preset.hpp | 32 + include/level_meter_ui.hpp | 41 + include/libportal.hpp | 31 + include/limiter.hpp | 59 + include/limiter_preset.hpp | 32 + include/limiter_ui.hpp | 42 + include/loudness.hpp | 47 + include/loudness_preset.hpp | 32 + include/loudness_ui.hpp | 41 + include/lv2_wrapper.hpp | 290 ++ include/maximizer.hpp | 51 + include/maximizer_preset.hpp | 32 + include/maximizer_ui.hpp | 41 + include/module_info_holder.hpp | 45 + include/multiband_compressor.hpp | 120 + include/multiband_compressor_band_box.hpp | 54 + include/multiband_compressor_preset.hpp | 35 + include/multiband_compressor_ui.hpp | 46 + include/multiband_gate.hpp | 119 + include/multiband_gate_band_box.hpp | 50 + include/multiband_gate_preset.hpp | 35 + include/multiband_gate_ui.hpp | 46 + include/node_info_holder.hpp | 47 + include/output_level.hpp | 44 + include/pipe_manager.hpp | 319 ++ include/pipe_manager_box.hpp | 46 + include/pipeline_type.hpp | 22 + include/pitch.hpp | 82 + include/pitch_preset.hpp | 32 + include/pitch_ui.hpp | 41 + include/plugin_base.hpp | 181 + include/plugin_preset_base.hpp | 165 + include/plugins_box.hpp | 67 + include/plugins_menu.hpp | 45 + include/preferences_general.hpp | 46 + include/preferences_spectrum.hpp | 40 + include/preferences_window.hpp | 37 + include/preset_type.hpp | 22 + include/presets_autoloading_holder.hpp | 51 + include/presets_manager.hpp | 154 + include/presets_menu.hpp | 42 + include/resampler.hpp | 73 + include/reverb.hpp | 43 + include/reverb_preset.hpp | 32 + include/reverb_ui.hpp | 41 + include/rnnoise.hpp | 188 + include/rnnoise_preset.hpp | 32 + include/rnnoise_ui.hpp | 46 + include/spectrum.hpp | 62 + include/speex.hpp | 60 + include/speex_preset.hpp | 32 + include/speex_ui.hpp | 42 + include/stereo_tools.hpp | 49 + include/stereo_tools_preset.hpp | 32 + include/stereo_tools_ui.hpp | 41 + include/stream_input_effects.hpp | 49 + include/stream_output_effects.hpp | 47 + include/string_literal_wrapper.hpp | 34 + include/tags_app.hpp | 36 + include/tags_equalizer.hpp | 234 + include/tags_multiband_compressor.hpp | 322 ++ include/tags_multiband_gate.hpp | 322 ++ include/tags_pipewire.hpp | 50 + include/tags_plugin_name.hpp | 127 + include/tags_resources.hpp | 134 + include/tags_schema.hpp | 312 ++ include/test_signals.hpp | 100 + include/ui_helpers.hpp | 214 + include/util.hpp | 282 ++ meson.build | 119 + meson_options.txt | 34 + po/LINGUAS | 33 + po/POTFILES.in | 74 + po/af.po | 2440 ++++++++++ po/bg.po | 2438 ++++++++++ po/ca.po | 2407 ++++++++++ po/cs.po | 3397 ++++++++++++++ po/da.po | 3138 +++++++++++++ po/de.po | 3930 ++++++++++++++++ po/easyeffects.pot | 2404 ++++++++++ po/es.po | 3536 +++++++++++++++ po/es_CO.po | 3574 +++++++++++++++ po/es_MX.po | 3319 ++++++++++++++ po/es_VE.po | 3365 ++++++++++++++ po/eu.po | 2483 ++++++++++ po/fr_FR.po | 3842 ++++++++++++++++ po/gl.po | 3572 +++++++++++++++ po/hr.po | 3418 ++++++++++++++ po/id_ID.po | 3416 ++++++++++++++ po/it_IT.po | 3744 +++++++++++++++ po/ja.po | 3677 +++++++++++++++ po/ka.po | 2487 ++++++++++ po/km.po | 2406 ++++++++++ po/ko.po | 2830 ++++++++++++ po/meson.build | 5 + po/nb_NO.po | 2734 +++++++++++ po/news/LINGUAS | 27 + po/news/POTFILES.in | 1 + po/news/af.po | 1097 +++++ po/news/cs.po | 3207 +++++++++++++ po/news/da.po | 2902 ++++++++++++ po/news/de.po | 3474 ++++++++++++++ po/news/easyeffects-news.pot | 1081 +++++ po/news/es.po | 3194 +++++++++++++ po/news/es_CO.po | 3073 +++++++++++++ po/news/es_MX.po | 2958 ++++++++++++ po/news/es_VE.po | 2948 ++++++++++++ po/news/eu.po | 945 ++++ po/news/fi.po | 977 ++++ po/news/fr_FR.po | 3525 +++++++++++++++ po/news/gl.po | 3482 ++++++++++++++ po/news/hr.po | 2943 ++++++++++++ po/news/id_ID.po | 3194 +++++++++++++ po/news/it_IT.po | 3383 ++++++++++++++ po/news/ja.po | 3224 +++++++++++++ po/news/km.po | 1084 +++++ po/news/ko.po | 2013 +++++++++ po/news/meson.build | 3 + po/news/nb_NO.po | 1897 ++++++++ po/news/nl.po | 3297 ++++++++++++++ po/news/nn.po | 960 ++++ po/news/pl.po | 2967 ++++++++++++ po/news/pt.po | 859 ++++ po/news/pt_BR.po | 3353 ++++++++++++++ po/news/ro.po | 3014 +++++++++++++ po/news/ru.po | 3625 +++++++++++++++ po/news/sk.po | 3210 +++++++++++++ po/news/sv.po | 2363 ++++++++++ po/news/th.po | 1084 +++++ po/news/tr.po | 3026 +++++++++++++ po/news/zh_CN.po | 2644 +++++++++++ po/nl.po | 3348 ++++++++++++++ po/nn.po | 2501 +++++++++++ po/pl.po | 3467 ++++++++++++++ po/pt_BR.po | 3673 +++++++++++++++ po/ro.po | 3379 ++++++++++++++ po/ru.po | 3997 +++++++++++++++++ po/sk.po | 3547 +++++++++++++++ po/sv.po | 2980 ++++++++++++ po/th.po | 2406 ++++++++++ po/tr.po | 3353 ++++++++++++++ po/uk.po | 2458 ++++++++++ po/zh_CN.po | 3058 +++++++++++++ src/app_info.cpp | 376 ++ src/application.cpp | 570 +++ src/application_ui.cpp | 349 ++ src/apps_box.cpp | 437 ++ src/autogain.cpp | 382 ++ src/autogain_preset.cpp | 61 + src/autogain_ui.cpp | 261 ++ src/bass_enhancer.cpp | 115 + src/bass_enhancer_preset.cpp | 69 + src/bass_enhancer_ui.cpp | 217 + src/bass_loudness.cpp | 97 + src/bass_loudness_preset.cpp | 57 + src/bass_loudness_ui.cpp | 182 + src/blocklist_menu.cpp | 243 + src/chart.cpp | 692 +++ src/client_info_holder.cpp | 121 + src/compressor.cpp | 241 + src/compressor_preset.cpp | 144 + src/compressor_ui.cpp | 483 ++ src/convolver.cpp | 485 ++ src/convolver_menu_combine.cpp | 283 ++ src/convolver_menu_impulses.cpp | 369 ++ src/convolver_preset.cpp | 57 + src/convolver_ui.cpp | 695 +++ src/convolver_ui_common.cpp | 70 + src/crossfeed.cpp | 116 + src/crossfeed_preset.cpp | 53 + src/crossfeed_ui.cpp | 202 + src/crystalizer.cpp | 309 ++ src/crystalizer_preset.cpp | 65 + src/crystalizer_ui.cpp | 249 + src/deepfilternet.cpp | 197 + src/deepfilternet_preset.cpp | 47 + src/deepfilternet_ui.cpp | 200 + src/deesser.cpp | 123 + src/deesser_preset.cpp | 93 + src/deesser_ui.cpp | 267 ++ src/delay.cpp | 131 + src/delay_preset.cpp | 77 + src/delay_ui.cpp | 230 + src/easyeffects.cpp | 68 + src/echo_canceller.cpp | 275 ++ src/echo_canceller_preset.cpp | 58 + src/echo_canceller_ui.cpp | 186 + src/effects_base.cpp | 267 ++ src/effects_box.cpp | 558 +++ src/equalizer.cpp | 332 ++ src/equalizer_band_box.cpp | 218 + src/equalizer_preset.cpp | 162 + src/equalizer_ui.cpp | 910 ++++ src/exciter.cpp | 115 + src/exciter_preset.cpp | 69 + src/exciter_ui.cpp | 228 + src/expander.cpp | 231 + src/expander_preset.cpp | 136 + src/expander_ui.cpp | 443 ++ src/filter.cpp | 121 + src/filter_preset.cpp | 81 + src/filter_ui.cpp | 231 + src/fir_filter_bandpass.cpp | 54 + src/fir_filter_base.cpp | 210 + src/fir_filter_highpass.cpp | 36 + src/fir_filter_lowpass.cpp | 32 + src/gate.cpp | 239 + src/gate_preset.cpp | 140 + src/gate_ui.cpp | 514 +++ src/ladspa_wrapper.cpp | 790 ++++ src/level_meter.cpp | 184 + src/level_meter_preset.cpp | 37 + src/level_meter_ui.cpp | 212 + src/libportal.cpp | 224 + src/limiter.cpp | 207 + src/limiter_preset.cpp | 105 + src/limiter_ui.cpp | 400 ++ src/loudness.cpp | 125 + src/loudness_preset.cpp | 65 + src/loudness_ui.cpp | 216 + src/lv2_wrapper.cpp | 690 +++ src/maximizer.cpp | 140 + src/maximizer_preset.cpp | 57 + src/maximizer_ui.cpp | 210 + src/meson.build | 203 + src/module_info_holder.cpp | 123 + src/multiband_compressor.cpp | 206 + src/multiband_compressor_band_box.cpp | 322 ++ src/multiband_compressor_preset.cpp | 221 + src/multiband_compressor_ui.cpp | 420 ++ src/multiband_gate.cpp | 206 + src/multiband_gate_band_box.cpp | 284 ++ src/multiband_gate_preset.cpp | 214 + src/multiband_gate_ui.cpp | 419 ++ src/node_info_holder.cpp | 161 + src/output_level.cpp | 59 + src/pipe_manager.cpp | 1855 ++++++++ src/pipe_manager_box.cpp | 972 ++++ src/pitch.cpp | 413 ++ src/pitch_preset.cpp | 77 + src/pitch_ui.cpp | 194 + src/plugin_base.cpp | 525 +++ src/plugin_preset_base.cpp | 44 + src/plugins_box.cpp | 825 ++++ src/plugins_menu.cpp | 296 ++ src/preferences_general.cpp | 153 + src/preferences_spectrum.cpp | 213 + src/preferences_window.cpp | 73 + src/presets_autoloading_holder.cpp | 61 + src/presets_manager.cpp | 943 ++++ src/presets_menu.cpp | 523 +++ src/resampler.cpp | 32 + src/reverb.cpp | 110 + src/reverb_preset.cpp | 81 + src/reverb_ui.cpp | 300 ++ src/rnnoise.cpp | 360 ++ src/rnnoise_preset.cpp | 65 + src/rnnoise_ui.cpp | 479 ++ src/spectrum.cpp | 139 + src/speex.cpp | 284 ++ src/speex_preset.cpp | 75 + src/speex_ui.cpp | 204 + src/stereo_tools.cpp | 157 + src/stereo_tools_preset.cpp | 109 + src/stereo_tools_ui.cpp | 250 ++ src/stream_input_effects.cpp | 359 ++ src/stream_output_effects.cpp | 348 ++ src/tags_plugin_name.cpp | 190 + src/test_signals.cpp | 239 + src/ui_helpers.cpp | 266 ++ src/util.cpp | 464 ++ util/NEWS.yaml | 511 +++ util/autobuild.sh | 148 + util/changes_since_last_release.sh | 11 + util/clang-tidy.sh | 28 + util/crystalizer.py | 65 + util/environmental_variables.sh | 8 + .../com.github.wwmm.easyeffects.Devel.json | 97 + util/flatpak/easyeffects-modules.json | 336 ++ .../bs2b/001-fix-automake-dist-lzma.patch | 13 + .../zita-convolver/0001-Fix-makefile.patch | 33 + .../shared-modules/linux-audio/fftw3f.json | 41 + .../shared-modules/linux-audio/ladspa.json | 17 + .../shared-modules/linux-audio/lilv.json | 80 + .../shared-modules/linux-audio/lv2.json | 22 + util/news-release-template.yaml | 14 + util/run-clang-tidy.py | 398 ++ util/sanitizer.supp | 4 + util/sanitizer.txt | 5 + util/test.wav | Bin 0 -> 709186 bytes util/update-release-files.sh | 393 ++ util/update_translation_templates.sh | 6 + util/valgrind.txt | 1 + 566 files changed, 271785 insertions(+) create mode 100644 .circleci/config.yml create mode 100755 .circleci/disable_all_plugins.sh create mode 100755 .circleci/enable_all_plugins.sh create mode 100644 .circleci/presets/sie_preset_disable_all.json create mode 100644 .circleci/presets/sie_preset_enable_all.json create mode 100644 .circleci/presets/soe_preset_disable_all.json create mode 100644 .circleci/presets/soe_preset_enable_all.json create mode 100755 .circleci/test.sh create mode 100644 .clang-format create mode 100644 .clang-tidy create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/dependabot.yaml create mode 100644 .github/workflows/CI.yaml create mode 100644 .github/workflows/artifact-pr-comment.yaml create mode 100644 .github/workflows/deploy-help.yaml create mode 100644 .github/workflows/flatpak-update.yaml create mode 100644 .github/workflows/translation-templates.yaml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 PKGBUILD create mode 100644 PKGBUILD_AUR create mode 100644 README.md create mode 100644 data/com.github.wwmm.easyeffects-symbolic.svg create mode 100644 data/com.github.wwmm.easyeffects.Devel.svg create mode 100644 data/com.github.wwmm.easyeffects.Source.svg create mode 100644 data/com.github.wwmm.easyeffects.desktop.in create mode 100644 data/com.github.wwmm.easyeffects.metainfo.xml.in create mode 100644 data/com.github.wwmm.easyeffects.service.in create mode 100644 data/com.github.wwmm.easyeffects.svg create mode 100644 data/easyeffects.gresource.xml create mode 100644 data/icons/scalable/emblems/credits.txt create mode 100644 data/icons/scalable/emblems/ee-applications-multimedia-symbolic.svg create mode 100644 data/icons/scalable/emblems/ee-arrow-down-symbolic.svg create mode 100644 data/icons/scalable/emblems/ee-arrows-right-symbolic.svg create mode 100644 data/icons/scalable/emblems/ee-bypass-symbolic.svg create mode 100644 data/icons/scalable/emblems/ee-drag-handle-symbolic.svg create mode 100644 data/icons/scalable/emblems/ee-spectrum-symbolic.svg create mode 100644 data/meson.build create mode 100644 data/presets/gstreamer_ballad.json create mode 100644 data/presets/gstreamer_classic.json create mode 100644 data/presets/gstreamer_club.json create mode 100644 data/presets/gstreamer_dance.json create mode 100644 data/presets/gstreamer_more_bass.json create mode 100644 data/presets/gstreamer_more_bass_and_treble.json create mode 100644 data/presets/gstreamer_party.json create mode 100644 data/presets/gstreamer_pop.json create mode 100644 data/presets/gstreamer_reggae.json create mode 100644 data/presets/gstreamer_rock.json create mode 100644 data/presets/gstreamer_ska.json create mode 100644 data/presets/gstreamer_soft.json create mode 100644 data/presets/gstreamer_techno.json create mode 100644 data/presets/ziyad_perfecteq.json create mode 100644 data/schemas/com.github.wwmm.easyeffects.autogain.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.bassenhancer.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.bassloudness.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.compressor.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.convolver.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.crossfeed.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.crystalizer.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.deepfilternet.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.deesser.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.delay.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.echo_canceller.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.equalizer.channel.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.equalizer.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.exciter.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.expander.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.filter.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.gate.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.levelmeter.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.libportal.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.limiter.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.loudness.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.maximizer.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.multibandcompressor.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.multibandgate.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.outputlevel.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.pitch.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.reverb.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.rnnoise.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.spectrum.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.speex.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.stereotools.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.streaminputs.gschema.xml create mode 100644 data/schemas/com.github.wwmm.easyeffects.streamoutputs.gschema.xml create mode 100644 data/ui/app_info.ui create mode 100644 data/ui/application_window.ui create mode 100644 data/ui/apps_box.ui create mode 100644 data/ui/autogain.ui create mode 100644 data/ui/autoload_row.ui create mode 100644 data/ui/bass_enhancer.ui create mode 100644 data/ui/bass_loudness.ui create mode 100644 data/ui/blocklist_menu.ui create mode 100644 data/ui/chart.ui create mode 100644 data/ui/compressor.ui create mode 100644 data/ui/convolver.ui create mode 100644 data/ui/convolver_menu_combine.ui create mode 100644 data/ui/convolver_menu_impulses.ui create mode 100644 data/ui/crossfeed.ui create mode 100644 data/ui/crystalizer.ui create mode 100644 data/ui/crystalizer_band.ui create mode 100644 data/ui/custom.css create mode 100644 data/ui/deepfilternet.ui create mode 100644 data/ui/deesser.ui create mode 100644 data/ui/delay.ui create mode 100644 data/ui/echo_canceller.ui create mode 100644 data/ui/effects_box.ui create mode 100644 data/ui/equalizer.ui create mode 100644 data/ui/equalizer_band.ui create mode 100644 data/ui/exciter.ui create mode 100644 data/ui/expander.ui create mode 100644 data/ui/factory_clients_listview.ui create mode 100644 data/ui/factory_input_device_dropdown.ui create mode 100644 data/ui/factory_modules_listview.ui create mode 100644 data/ui/factory_node_dropdown.ui create mode 100644 data/ui/factory_output_device_dropdown.ui create mode 100644 data/ui/factory_presets_dropdown.ui create mode 100644 data/ui/factory_rnnoise_listview.ui create mode 100644 data/ui/filter.ui create mode 100644 data/ui/gate.ui create mode 100644 data/ui/level_meter.ui create mode 100644 data/ui/limiter.ui create mode 100644 data/ui/loudness.ui create mode 100644 data/ui/maximizer.ui create mode 100644 data/ui/multiband_compressor.ui create mode 100644 data/ui/multiband_compressor_band.ui create mode 100644 data/ui/multiband_gate.ui create mode 100644 data/ui/multiband_gate_band.ui create mode 100644 data/ui/pipe_manager_box.ui create mode 100644 data/ui/pitch.ui create mode 100644 data/ui/plugin_row.ui create mode 100644 data/ui/plugins_box.ui create mode 100644 data/ui/plugins_menu.ui create mode 100644 data/ui/preferences_general.ui create mode 100644 data/ui/preferences_spectrum.ui create mode 100644 data/ui/preferences_window.ui create mode 100644 data/ui/preset_row.ui create mode 100644 data/ui/presets_menu.ui create mode 100644 data/ui/reverb.ui create mode 100644 data/ui/rnnoise.ui create mode 100644 data/ui/shortcuts.ui create mode 100644 data/ui/speex.ui create mode 100644 data/ui/stereo_tools.ui create mode 100644 debian/changelog create mode 100644 debian/control create mode 100644 debian/copyright create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/watch create mode 100644 easyeffects.code-workspace create mode 100644 help/C/advancedinfo.page create mode 100644 help/C/autogain.page create mode 100644 help/C/bassenhancer.page create mode 100644 help/C/bassloudness.page create mode 100644 help/C/blocklist.page create mode 100644 help/C/compressor.page create mode 100644 help/C/convolver.page create mode 100644 help/C/crossfeed.page create mode 100644 help/C/crystalizer.page create mode 100644 help/C/deesser.page create mode 100644 help/C/delay.page create mode 100644 help/C/echocanceller.page create mode 100644 help/C/effectsorder.page create mode 100644 help/C/enableapp.page create mode 100644 help/C/equalizer.page create mode 100644 help/C/exciter.page create mode 100644 help/C/filter.page create mode 100644 help/C/gate.page create mode 100644 help/C/general.page create mode 100644 help/C/guide_1.page create mode 100644 help/C/index.page create mode 100644 help/C/limiter.page create mode 100644 help/C/loudness.page create mode 100644 help/C/maximizer.page create mode 100644 help/C/multibandcompressor.page create mode 100644 help/C/multibandgate.page create mode 100644 help/C/pipewire.page create mode 100644 help/C/pitch.page create mode 100644 help/C/reverb.page create mode 100644 help/C/rnnoise.page create mode 100644 help/C/saturated.page create mode 100644 help/C/settingsmenu.page create mode 100644 help/C/spectrum.page create mode 100644 help/C/speex.page create mode 100644 help/C/stereotools.page create mode 100644 help/C/testsignals.page create mode 100644 help/C/userpresets.page create mode 100644 help/meson.build create mode 100644 images/appdata-screenshot-01.png create mode 100644 images/appdata-screenshot-02.png create mode 100644 images/appdata-screenshot-03.png create mode 100644 images/appdata-screenshot-04.png create mode 100644 images/appdata-screenshot-05.png create mode 100644 images/convolver.png create mode 100644 images/easyeffects-dark-screenshot-1.png create mode 100644 images/easyeffects-dark-screenshot-2.png create mode 100644 images/easyeffects-dark-screenshot-3.png create mode 100644 images/easyeffects-light-screenshot-1.png create mode 100644 images/easyeffects-light-screenshot-2.png create mode 100644 images/easyeffects-light-screenshot-3.png create mode 100644 images/easyeffects_players.png create mode 100644 images/easyeffects_plugins.png create mode 100644 images/master_screenshot_test.png create mode 100644 include/app_info.hpp create mode 100644 include/application.hpp create mode 100644 include/application_ui.hpp create mode 100644 include/apps_box.hpp create mode 100644 include/autogain.hpp create mode 100644 include/autogain_preset.hpp create mode 100644 include/autogain_ui.hpp create mode 100644 include/bass_enhancer.hpp create mode 100644 include/bass_enhancer_preset.hpp create mode 100644 include/bass_enhancer_ui.hpp create mode 100644 include/bass_loudness.hpp create mode 100644 include/bass_loudness_preset.hpp create mode 100644 include/bass_loudness_ui.hpp create mode 100644 include/blocklist_menu.hpp create mode 100644 include/chart.hpp create mode 100644 include/client_info_holder.hpp create mode 100644 include/compressor.hpp create mode 100644 include/compressor_preset.hpp create mode 100644 include/compressor_ui.hpp create mode 100644 include/convolver.hpp create mode 100644 include/convolver_menu_combine.hpp create mode 100644 include/convolver_menu_impulses.hpp create mode 100644 include/convolver_preset.hpp create mode 100644 include/convolver_ui.hpp create mode 100644 include/convolver_ui_common.hpp create mode 100644 include/crossfeed.hpp create mode 100644 include/crossfeed_preset.hpp create mode 100644 include/crossfeed_ui.hpp create mode 100644 include/crystalizer.hpp create mode 100644 include/crystalizer_preset.hpp create mode 100644 include/crystalizer_ui.hpp create mode 100644 include/deepfilternet.hpp create mode 100644 include/deepfilternet_preset.hpp create mode 100644 include/deepfilternet_ui.hpp create mode 100644 include/deesser.hpp create mode 100644 include/deesser_preset.hpp create mode 100644 include/deesser_ui.hpp create mode 100644 include/delay.hpp create mode 100644 include/delay_preset.hpp create mode 100644 include/delay_ui.hpp create mode 100644 include/echo_canceller.hpp create mode 100644 include/echo_canceller_preset.hpp create mode 100644 include/echo_canceller_ui.hpp create mode 100644 include/effects_base.hpp create mode 100644 include/effects_box.hpp create mode 100644 include/equalizer.hpp create mode 100644 include/equalizer_band_box.hpp create mode 100644 include/equalizer_preset.hpp create mode 100644 include/equalizer_ui.hpp create mode 100644 include/exciter.hpp create mode 100644 include/exciter_preset.hpp create mode 100644 include/exciter_ui.hpp create mode 100644 include/expander.hpp create mode 100644 include/expander_preset.hpp create mode 100644 include/expander_ui.hpp create mode 100644 include/filter.hpp create mode 100644 include/filter_preset.hpp create mode 100644 include/filter_ui.hpp create mode 100644 include/fir_filter_bandpass.hpp create mode 100644 include/fir_filter_base.hpp create mode 100644 include/fir_filter_highpass.hpp create mode 100644 include/fir_filter_lowpass.hpp create mode 100644 include/gate.hpp create mode 100644 include/gate_preset.hpp create mode 100644 include/gate_ui.hpp create mode 100644 include/ladspa_wrapper.hpp create mode 100644 include/level_meter.hpp create mode 100644 include/level_meter_preset.hpp create mode 100644 include/level_meter_ui.hpp create mode 100644 include/libportal.hpp create mode 100644 include/limiter.hpp create mode 100644 include/limiter_preset.hpp create mode 100644 include/limiter_ui.hpp create mode 100644 include/loudness.hpp create mode 100644 include/loudness_preset.hpp create mode 100644 include/loudness_ui.hpp create mode 100644 include/lv2_wrapper.hpp create mode 100644 include/maximizer.hpp create mode 100644 include/maximizer_preset.hpp create mode 100644 include/maximizer_ui.hpp create mode 100644 include/module_info_holder.hpp create mode 100644 include/multiband_compressor.hpp create mode 100644 include/multiband_compressor_band_box.hpp create mode 100644 include/multiband_compressor_preset.hpp create mode 100644 include/multiband_compressor_ui.hpp create mode 100644 include/multiband_gate.hpp create mode 100644 include/multiband_gate_band_box.hpp create mode 100644 include/multiband_gate_preset.hpp create mode 100644 include/multiband_gate_ui.hpp create mode 100644 include/node_info_holder.hpp create mode 100644 include/output_level.hpp create mode 100644 include/pipe_manager.hpp create mode 100644 include/pipe_manager_box.hpp create mode 100644 include/pipeline_type.hpp create mode 100644 include/pitch.hpp create mode 100644 include/pitch_preset.hpp create mode 100644 include/pitch_ui.hpp create mode 100644 include/plugin_base.hpp create mode 100644 include/plugin_preset_base.hpp create mode 100644 include/plugins_box.hpp create mode 100644 include/plugins_menu.hpp create mode 100644 include/preferences_general.hpp create mode 100644 include/preferences_spectrum.hpp create mode 100644 include/preferences_window.hpp create mode 100644 include/preset_type.hpp create mode 100644 include/presets_autoloading_holder.hpp create mode 100644 include/presets_manager.hpp create mode 100644 include/presets_menu.hpp create mode 100644 include/resampler.hpp create mode 100644 include/reverb.hpp create mode 100644 include/reverb_preset.hpp create mode 100644 include/reverb_ui.hpp create mode 100644 include/rnnoise.hpp create mode 100644 include/rnnoise_preset.hpp create mode 100644 include/rnnoise_ui.hpp create mode 100644 include/spectrum.hpp create mode 100644 include/speex.hpp create mode 100644 include/speex_preset.hpp create mode 100644 include/speex_ui.hpp create mode 100644 include/stereo_tools.hpp create mode 100644 include/stereo_tools_preset.hpp create mode 100644 include/stereo_tools_ui.hpp create mode 100644 include/stream_input_effects.hpp create mode 100644 include/stream_output_effects.hpp create mode 100644 include/string_literal_wrapper.hpp create mode 100644 include/tags_app.hpp create mode 100644 include/tags_equalizer.hpp create mode 100644 include/tags_multiband_compressor.hpp create mode 100644 include/tags_multiband_gate.hpp create mode 100644 include/tags_pipewire.hpp create mode 100644 include/tags_plugin_name.hpp create mode 100644 include/tags_resources.hpp create mode 100644 include/tags_schema.hpp create mode 100644 include/test_signals.hpp create mode 100644 include/ui_helpers.hpp create mode 100644 include/util.hpp create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 po/LINGUAS create mode 100644 po/POTFILES.in create mode 100644 po/af.po create mode 100644 po/bg.po create mode 100644 po/ca.po create mode 100644 po/cs.po create mode 100644 po/da.po create mode 100644 po/de.po create mode 100644 po/easyeffects.pot create mode 100644 po/es.po create mode 100644 po/es_CO.po create mode 100644 po/es_MX.po create mode 100644 po/es_VE.po create mode 100644 po/eu.po create mode 100644 po/fr_FR.po create mode 100644 po/gl.po create mode 100644 po/hr.po create mode 100644 po/id_ID.po create mode 100644 po/it_IT.po create mode 100644 po/ja.po create mode 100644 po/ka.po create mode 100644 po/km.po create mode 100644 po/ko.po create mode 100644 po/meson.build create mode 100644 po/nb_NO.po create mode 100644 po/news/LINGUAS create mode 100644 po/news/POTFILES.in create mode 100644 po/news/af.po create mode 100644 po/news/cs.po create mode 100644 po/news/da.po create mode 100644 po/news/de.po create mode 100644 po/news/easyeffects-news.pot create mode 100644 po/news/es.po create mode 100644 po/news/es_CO.po create mode 100644 po/news/es_MX.po create mode 100644 po/news/es_VE.po create mode 100644 po/news/eu.po create mode 100644 po/news/fi.po create mode 100644 po/news/fr_FR.po create mode 100644 po/news/gl.po create mode 100644 po/news/hr.po create mode 100644 po/news/id_ID.po create mode 100644 po/news/it_IT.po create mode 100644 po/news/ja.po create mode 100644 po/news/km.po create mode 100644 po/news/ko.po create mode 100644 po/news/meson.build create mode 100644 po/news/nb_NO.po create mode 100644 po/news/nl.po create mode 100644 po/news/nn.po create mode 100644 po/news/pl.po create mode 100644 po/news/pt.po create mode 100644 po/news/pt_BR.po create mode 100644 po/news/ro.po create mode 100644 po/news/ru.po create mode 100644 po/news/sk.po create mode 100644 po/news/sv.po create mode 100644 po/news/th.po create mode 100644 po/news/tr.po create mode 100644 po/news/zh_CN.po create mode 100644 po/nl.po create mode 100644 po/nn.po create mode 100644 po/pl.po create mode 100644 po/pt_BR.po create mode 100644 po/ro.po create mode 100644 po/ru.po create mode 100644 po/sk.po create mode 100644 po/sv.po create mode 100644 po/th.po create mode 100644 po/tr.po create mode 100644 po/uk.po create mode 100644 po/zh_CN.po create mode 100644 src/app_info.cpp create mode 100644 src/application.cpp create mode 100644 src/application_ui.cpp create mode 100644 src/apps_box.cpp create mode 100644 src/autogain.cpp create mode 100644 src/autogain_preset.cpp create mode 100644 src/autogain_ui.cpp create mode 100644 src/bass_enhancer.cpp create mode 100644 src/bass_enhancer_preset.cpp create mode 100644 src/bass_enhancer_ui.cpp create mode 100644 src/bass_loudness.cpp create mode 100644 src/bass_loudness_preset.cpp create mode 100644 src/bass_loudness_ui.cpp create mode 100644 src/blocklist_menu.cpp create mode 100644 src/chart.cpp create mode 100644 src/client_info_holder.cpp create mode 100644 src/compressor.cpp create mode 100644 src/compressor_preset.cpp create mode 100644 src/compressor_ui.cpp create mode 100644 src/convolver.cpp create mode 100644 src/convolver_menu_combine.cpp create mode 100644 src/convolver_menu_impulses.cpp create mode 100644 src/convolver_preset.cpp create mode 100644 src/convolver_ui.cpp create mode 100644 src/convolver_ui_common.cpp create mode 100644 src/crossfeed.cpp create mode 100644 src/crossfeed_preset.cpp create mode 100644 src/crossfeed_ui.cpp create mode 100644 src/crystalizer.cpp create mode 100644 src/crystalizer_preset.cpp create mode 100644 src/crystalizer_ui.cpp create mode 100644 src/deepfilternet.cpp create mode 100644 src/deepfilternet_preset.cpp create mode 100644 src/deepfilternet_ui.cpp create mode 100644 src/deesser.cpp create mode 100644 src/deesser_preset.cpp create mode 100644 src/deesser_ui.cpp create mode 100644 src/delay.cpp create mode 100644 src/delay_preset.cpp create mode 100644 src/delay_ui.cpp create mode 100644 src/easyeffects.cpp create mode 100644 src/echo_canceller.cpp create mode 100644 src/echo_canceller_preset.cpp create mode 100644 src/echo_canceller_ui.cpp create mode 100644 src/effects_base.cpp create mode 100644 src/effects_box.cpp create mode 100644 src/equalizer.cpp create mode 100644 src/equalizer_band_box.cpp create mode 100644 src/equalizer_preset.cpp create mode 100644 src/equalizer_ui.cpp create mode 100644 src/exciter.cpp create mode 100644 src/exciter_preset.cpp create mode 100644 src/exciter_ui.cpp create mode 100644 src/expander.cpp create mode 100644 src/expander_preset.cpp create mode 100644 src/expander_ui.cpp create mode 100644 src/filter.cpp create mode 100644 src/filter_preset.cpp create mode 100644 src/filter_ui.cpp create mode 100644 src/fir_filter_bandpass.cpp create mode 100644 src/fir_filter_base.cpp create mode 100644 src/fir_filter_highpass.cpp create mode 100644 src/fir_filter_lowpass.cpp create mode 100644 src/gate.cpp create mode 100644 src/gate_preset.cpp create mode 100644 src/gate_ui.cpp create mode 100644 src/ladspa_wrapper.cpp create mode 100644 src/level_meter.cpp create mode 100644 src/level_meter_preset.cpp create mode 100644 src/level_meter_ui.cpp create mode 100644 src/libportal.cpp create mode 100644 src/limiter.cpp create mode 100644 src/limiter_preset.cpp create mode 100644 src/limiter_ui.cpp create mode 100644 src/loudness.cpp create mode 100644 src/loudness_preset.cpp create mode 100644 src/loudness_ui.cpp create mode 100644 src/lv2_wrapper.cpp create mode 100644 src/maximizer.cpp create mode 100644 src/maximizer_preset.cpp create mode 100644 src/maximizer_ui.cpp create mode 100644 src/meson.build create mode 100644 src/module_info_holder.cpp create mode 100644 src/multiband_compressor.cpp create mode 100644 src/multiband_compressor_band_box.cpp create mode 100644 src/multiband_compressor_preset.cpp create mode 100644 src/multiband_compressor_ui.cpp create mode 100644 src/multiband_gate.cpp create mode 100644 src/multiband_gate_band_box.cpp create mode 100644 src/multiband_gate_preset.cpp create mode 100644 src/multiband_gate_ui.cpp create mode 100644 src/node_info_holder.cpp create mode 100644 src/output_level.cpp create mode 100644 src/pipe_manager.cpp create mode 100644 src/pipe_manager_box.cpp create mode 100644 src/pitch.cpp create mode 100644 src/pitch_preset.cpp create mode 100644 src/pitch_ui.cpp create mode 100644 src/plugin_base.cpp create mode 100644 src/plugin_preset_base.cpp create mode 100644 src/plugins_box.cpp create mode 100644 src/plugins_menu.cpp create mode 100644 src/preferences_general.cpp create mode 100644 src/preferences_spectrum.cpp create mode 100644 src/preferences_window.cpp create mode 100644 src/presets_autoloading_holder.cpp create mode 100644 src/presets_manager.cpp create mode 100644 src/presets_menu.cpp create mode 100644 src/resampler.cpp create mode 100644 src/reverb.cpp create mode 100644 src/reverb_preset.cpp create mode 100644 src/reverb_ui.cpp create mode 100644 src/rnnoise.cpp create mode 100644 src/rnnoise_preset.cpp create mode 100644 src/rnnoise_ui.cpp create mode 100644 src/spectrum.cpp create mode 100644 src/speex.cpp create mode 100644 src/speex_preset.cpp create mode 100644 src/speex_ui.cpp create mode 100644 src/stereo_tools.cpp create mode 100644 src/stereo_tools_preset.cpp create mode 100644 src/stereo_tools_ui.cpp create mode 100644 src/stream_input_effects.cpp create mode 100644 src/stream_output_effects.cpp create mode 100644 src/tags_plugin_name.cpp create mode 100644 src/test_signals.cpp create mode 100644 src/ui_helpers.cpp create mode 100644 src/util.cpp create mode 100644 util/NEWS.yaml create mode 100755 util/autobuild.sh create mode 100755 util/changes_since_last_release.sh create mode 100755 util/clang-tidy.sh create mode 100755 util/crystalizer.py create mode 100755 util/environmental_variables.sh create mode 100644 util/flatpak/com.github.wwmm.easyeffects.Devel.json create mode 100644 util/flatpak/easyeffects-modules.json create mode 100644 util/flatpak/patch/bs2b/001-fix-automake-dist-lzma.patch create mode 100644 util/flatpak/patch/zita-convolver/0001-Fix-makefile.patch create mode 100644 util/flatpak/shared-modules/linux-audio/fftw3f.json create mode 100644 util/flatpak/shared-modules/linux-audio/ladspa.json create mode 100644 util/flatpak/shared-modules/linux-audio/lilv.json create mode 100644 util/flatpak/shared-modules/linux-audio/lv2.json create mode 100644 util/news-release-template.yaml create mode 100644 util/run-clang-tidy.py create mode 100644 util/sanitizer.supp create mode 100644 util/sanitizer.txt create mode 100644 util/test.wav create mode 100755 util/update-release-files.sh create mode 100755 util/update_translation_templates.sh create mode 100644 util/valgrind.txt diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..73724d4 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,138 @@ +version: 2.0 + +jobs: + archlinux: + docker: + - image: archlinux:latest + auth: + username: wellingtonwallace + password: $DOCKERHUB_PASSWORD + environment: + LANG: C + DISPLAY: :10 + G_MESSAGES_DEBUG: easyeffects + steps: + - run: date +%F > /tmp/date + - run: | + mkdir -p pacman_cache /root/.ccache + pacman -Sy --noconfirm + # circleci cache needs tar + pacman -S tar --noconfirm + - restore_cache: + keys: + - pacman-cache-{{ checksum "/tmp/date" }} + - run: | + pacman -Su --cachedir pacman_cache --noconfirm + pacman -S --cachedir pacman_cache --noconfirm pkg-config git gcc meson itstool boost appstream-glib gettext gtk4 glib2 pipewire pipewire-pulse libsigc++-3.0 libsndfile libsamplerate zita-convolver libebur128 lilv lv2 calf zam-plugins soundtouch mda.lv2 lsp-plugins rnnoise fftw libbs2b speexdsp nlohmann-json xorg-server-xvfb gawk ccache libadwaita tbb fmt gsl ladspa + pacman -Sc --cachedir pacman_cache --noconfirm + - save_cache: + key: pacman-cache-{{ checksum "/tmp/date" }} + paths: + - pacman_cache + - run: rm -rf pacman_cache + # - run: + # name: Starting Xvfb + # command: Xvfb $DISPLAY -screen 0 1280x1024x24 + # background: true + # - run: + # name: Starting dbus + # command: | + # dbus-uuidgen > /var/lib/dbus/machine-id + # mkdir -p /var/run/dbus + # DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address) && echo $DBUS_SESSION_BUS_ADDRESS + # echo "export DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS" >> $BASH_ENV + # - run: + # name: Starting PipeWire in background + # command: | + # sleep 5 + # DISABLE_RTKIT=1 PIPEWIRE_DEBUG=4 pipewire + # background: true + # - run: + # name: Starting pipewire-pulse in background + # command: | + # sleep 5 + # DISABLE_RTKIT=1 pipewire-pulse + # background: true + # - run: + # name: Starting pipewire-media-session in background + # command: | + # sleep 5 + # DISABLE_RTKIT=1 pipewire-media-session + # background: true + # - run: + # name: loading devices + # command: | + # sleep 5 + # pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=my-sink audio.position=FL,FR + # pactl load-module module-null-sink object.linger=1 media.class=Audio/Source sink_name=my-source audio.position=FL,FR + # pw-cli list-objects Node + # background: true + - restore_cache: + keys: + - ccache-{{ checksum "/tmp/date" }} + - checkout + - run: + name: Compile and install EasyEffects + command: | + meson build && cd build && ninja -j 8 && ninja -j 8 install + - save_cache: + key: ccache-{{ checksum "/tmp/date" }} + paths: + - /root/.ccache + # - run: + # name: Starting PE in background + # command: | + # easyeffects + # background: true + # - run: + # name: Testing play/pause + # command: | + # .circleci/enable_all_plugins.sh + # # stream outputs + # #gst-launch-1.0 audiotestsrc num-buffers=100 ! queue ! pipewiresink + # #gst-launch-1.0 audiotestsrc num-buffers=100 ! queue ! pipewiresink + # # strem inputs + # #gst-launch-1.0 pipewiresrc num-buffers=100 ! queue ! audio/x-raw,format=F32LE ! pipewiresink + # #gst-launch-1.0 pipewiresrc num-buffers=100 ! queue ! audio/x-raw,format=F32LE ! pipewiresink + # - run: + # name: Simulating audio applications + # command: | + # gst-launch-1.0 audiotestsrc ! queue ! pipewiresink & + # gst-launch-1.0 pipewiresrc ! queue ! audio/x-raw,format=F32LE ! pipewiresink + # background: true + # - run: + # name: Testing plugin enable/disable on the fly + # command: | + # sleep 5 + # .circleci/enable_all_plugins.sh + # sleep 1 + # .circleci/disable_all_plugins.sh + # sleep 1 + # .circleci/enable_all_plugins.sh + # - run: + # name: Testing presets + # command: | + # sleep 5 + # cp -v .circleci/presets/soe_preset_disable_all.json /root/.config/easyeffects/input + # cp -v .circleci/presets/soe_preset_enable_all.json /root/.config/easyeffects/input + # cp -v .circleci/presets/sie_preset_disable_all.json /root/.config/easyeffects/output + # cp -v .circleci/presets/sie_preset_enable_all.json /root/.config/easyeffects/output + # easyeffects -l soe_preset_disable_all || true + # sleep 1 + # easyeffects -l soe_preset_enable_all || true + # sleep 1 + # easyeffects -l sie_preset_disable_all || true + # sleep 1 + # easyeffects -l sie_preset_enalbe_all || true + # - run: + # name: Reset Configuration and finish + # command: | + # sleep 5 + # easyeffects -r || true + # easyeffects -q || true + +workflows: + version: 2 + build: + jobs: + - archlinux diff --git a/.circleci/disable_all_plugins.sh b/.circleci/disable_all_plugins.sh new file mode 100755 index 0000000..42872e3 --- /dev/null +++ b/.circleci/disable_all_plugins.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +# general settings + +gsettings set com.github.wwmm.easyeffects enable-all-streaminputs false + +# effects for sink inputs + +gsettings set com.github.wwmm.easyeffects.autogain:/com/github/wwmm/easyeffects/streamoutputs/autogain/ state false +gsettings set com.github.wwmm.easyeffects.bassenhancer:/com/github/wwmm/easyeffects/streamoutputs/bassenhancer/ state false +gsettings set com.github.wwmm.easyeffects.compressor:/com/github/wwmm/easyeffects/streamoutputs/compressor/ state false +gsettings set com.github.wwmm.easyeffects.convolver:/com/github/wwmm/easyeffects/streamoutputs/convolver/ state false +gsettings set com.github.wwmm.easyeffects.crossfeed:/com/github/wwmm/easyeffects/streamoutputs/crossfeed/ state false +gsettings set com.github.wwmm.easyeffects.crystalizer:/com/github/wwmm/easyeffects/streamoutputs/crystalizer/ state false +gsettings set com.github.wwmm.easyeffects.deesser:/com/github/wwmm/easyeffects/streamoutputs/deesser/ state false +gsettings set com.github.wwmm.easyeffects.delay:/com/github/wwmm/easyeffects/streamoutputs/delay/ state false +gsettings set com.github.wwmm.easyeffects.equalizer:/com/github/wwmm/easyeffects/streamoutputs/equalizer/ state false +gsettings set com.github.wwmm.easyeffects.exciter:/com/github/wwmm/easyeffects/streamoutputs/exciter/ state false +gsettings set com.github.wwmm.easyeffects.filter:/com/github/wwmm/easyeffects/streamoutputs/filter/ state false +gsettings set com.github.wwmm.easyeffects.gate:/com/github/wwmm/easyeffects/streamoutputs/gate/ state false +gsettings set com.github.wwmm.easyeffects.limiter:/com/github/wwmm/easyeffects/streamoutputs/limiter/ state false +gsettings set com.github.wwmm.easyeffects.loudness:/com/github/wwmm/easyeffects/streamoutputs/loudness/ state false +gsettings set com.github.wwmm.easyeffects.maximizer:/com/github/wwmm/easyeffects/streamoutputs/maximizer/ state false +gsettings set com.github.wwmm.easyeffects.multibandcompressor:/com/github/wwmm/easyeffects/streamoutputs/multibandcompressor/ state false +gsettings set com.github.wwmm.easyeffects.multibandgate:/com/github/wwmm/easyeffects/streamoutputs/multibandgate/ state false +gsettings set com.github.wwmm.easyeffects.pitch:/com/github/wwmm/easyeffects/streamoutputs/pitch/ state false +gsettings set com.github.wwmm.easyeffects.reverb:/com/github/wwmm/easyeffects/streamoutputs/reverb/ state false +gsettings set com.github.wwmm.easyeffects.stereotools:/com/github/wwmm/easyeffects/streamoutputs/stereotools/ state false + +# effects for source outputs + +gsettings set com.github.wwmm.easyeffects.compressor:/com/github/wwmm/easyeffects/streaminputs/compressor/ state false +gsettings set com.github.wwmm.easyeffects.deesser:/com/github/wwmm/easyeffects/streaminputs/deesser/ state false +gsettings set com.github.wwmm.easyeffects.equalizer:/com/github/wwmm/easyeffects/streaminputs/equalizer/ state false +gsettings set com.github.wwmm.easyeffects.filter:/com/github/wwmm/easyeffects/streaminputs/filter/ state false +gsettings set com.github.wwmm.easyeffects.gate:/com/github/wwmm/easyeffects/streaminputs/gate/ state false +gsettings set com.github.wwmm.easyeffects.limiter:/com/github/wwmm/easyeffects/streaminputs/limiter/ state false +gsettings set com.github.wwmm.easyeffects.multibandcompressor:/com/github/wwmm/easyeffects/streaminputs/multibandcompressor/ state false +gsettings set com.github.wwmm.easyeffects.multibandgate:/com/github/wwmm/easyeffects/streaminputs/multibandgate/ state false +gsettings set com.github.wwmm.easyeffects.pitch:/com/github/wwmm/easyeffects/streaminputs/pitch/ state false +gsettings set com.github.wwmm.easyeffects.reverb:/com/github/wwmm/easyeffects/streaminputs/reverb/ state false +gsettings set com.github.wwmm.easyeffects.echocanceller:/com/github/wwmm/easyeffects/streaminputs/echocanceller/ state false diff --git a/.circleci/enable_all_plugins.sh b/.circleci/enable_all_plugins.sh new file mode 100755 index 0000000..6e34ad8 --- /dev/null +++ b/.circleci/enable_all_plugins.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +# general settings + +gsettings set com.github.wwmm.easyeffects enable-all-streaminputs true + +# effects for sink inputs + +gsettings set com.github.wwmm.easyeffects.autogain:/com/github/wwmm/easyeffects/streamoutputs/autogain/ state true +gsettings set com.github.wwmm.easyeffects.bassenhancer:/com/github/wwmm/easyeffects/streamoutputs/bassenhancer/ state true +gsettings set com.github.wwmm.easyeffects.compressor:/com/github/wwmm/easyeffects/streamoutputs/compressor/ state true +gsettings set com.github.wwmm.easyeffects.convolver:/com/github/wwmm/easyeffects/streamoutputs/convolver/ state true +gsettings set com.github.wwmm.easyeffects.crossfeed:/com/github/wwmm/easyeffects/streamoutputs/crossfeed/ state true +gsettings set com.github.wwmm.easyeffects.crystalizer:/com/github/wwmm/easyeffects/streamoutputs/crystalizer/ state true +gsettings set com.github.wwmm.easyeffects.deesser:/com/github/wwmm/easyeffects/streamoutputs/deesser/ state true +gsettings set com.github.wwmm.easyeffects.delay:/com/github/wwmm/easyeffects/streamoutputs/delay/ state true +gsettings set com.github.wwmm.easyeffects.equalizer:/com/github/wwmm/easyeffects/streamoutputs/equalizer/ state true +gsettings set com.github.wwmm.easyeffects.exciter:/com/github/wwmm/easyeffects/streamoutputs/exciter/ state true +gsettings set com.github.wwmm.easyeffects.filter:/com/github/wwmm/easyeffects/streamoutputs/filter/ state true +gsettings set com.github.wwmm.easyeffects.gate:/com/github/wwmm/easyeffects/streamoutputs/gate/ state true +gsettings set com.github.wwmm.easyeffects.limiter:/com/github/wwmm/easyeffects/streamoutputs/limiter/ state true +gsettings set com.github.wwmm.easyeffects.loudness:/com/github/wwmm/easyeffects/streamoutputs/loudness/ state true +gsettings set com.github.wwmm.easyeffects.maximizer:/com/github/wwmm/easyeffects/streamoutputs/maximizer/ state true +gsettings set com.github.wwmm.easyeffects.multibandcompressor:/com/github/wwmm/easyeffects/streamoutputs/multibandcompressor/ state true +gsettings set com.github.wwmm.easyeffects.multibandgate:/com/github/wwmm/easyeffects/streamoutputs/multibandgate/ state true +gsettings set com.github.wwmm.easyeffects.pitch:/com/github/wwmm/easyeffects/streamoutputs/pitch/ state true +gsettings set com.github.wwmm.easyeffects.reverb:/com/github/wwmm/easyeffects/streamoutputs/reverb/ state true +gsettings set com.github.wwmm.easyeffects.stereotools:/com/github/wwmm/easyeffects/streamoutputs/stereotools/ state true + +# effects for source outputs + +gsettings set com.github.wwmm.easyeffects.compressor:/com/github/wwmm/easyeffects/streaminputs/compressor/ state true +gsettings set com.github.wwmm.easyeffects.deesser:/com/github/wwmm/easyeffects/streaminputs/deesser/ state true +gsettings set com.github.wwmm.easyeffects.equalizer:/com/github/wwmm/easyeffects/streaminputs/equalizer/ state true +gsettings set com.github.wwmm.easyeffects.filter:/com/github/wwmm/easyeffects/streaminputs/filter/ state true +gsettings set com.github.wwmm.easyeffects.gate:/com/github/wwmm/easyeffects/streaminputs/gate/ state true +gsettings set com.github.wwmm.easyeffects.limiter:/com/github/wwmm/easyeffects/streaminputs/limiter/ state true +gsettings set com.github.wwmm.easyeffects.multibandcompressor:/com/github/wwmm/easyeffects/streaminputs/multibandcompressor/ state true +gsettings set com.github.wwmm.easyeffects.multibandgate:/com/github/wwmm/easyeffects/streaminputs/multibandgate/ state true +gsettings set com.github.wwmm.easyeffects.pitch:/com/github/wwmm/easyeffects/streaminputs/pitch/ state true +gsettings set com.github.wwmm.easyeffects.reverb:/com/github/wwmm/easyeffects/streaminputs/reverb/ state true +gsettings set com.github.wwmm.easyeffects.echocanceller:/com/github/wwmm/easyeffects/streaminputs/echocanceller/ state true diff --git a/.circleci/presets/sie_preset_disable_all.json b/.circleci/presets/sie_preset_disable_all.json new file mode 100644 index 0000000..d650397 --- /dev/null +++ b/.circleci/presets/sie_preset_disable_all.json @@ -0,0 +1,424 @@ +{ + "spectrum": { + "show": "true", + "n-points": "100", + "height": "100", + "use-custom-color": "true", + "fill": "true", + "show-bar-border": "true", + "scale": "1", + "exponent": "1", + "sampling-freq": "10", + "line-width": "2", + "type": "Bars", + "color": ["0", "1", "1", "1"], + "gradient-color": ["0", "1", "1", "0.52364864864864868"] + }, + "output": { + "blacklist": "", + "plugins_order": [ + "limiter", + "autogain", + "exciter", + "crystalizer", + "loudness", + "bass_enhancer", + "convolver", + "equalizer", + "filter", + "compressor", + "reverb", + "crossfeed", + "maximizer", + "multiband_compressor", + "gate", + "multiband_gate", + "stereo_tools", + "deesser", + "pitch", + "delay" + ], + "bass_enhancer": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "amount": "-4", + "harmonics": "8.5", + "scope": "250", + "floor": "40", + "blend": "0", + "floor-active": "true", + "listen": "false" + }, + "compressor": { + "state": "false", + "detection": "RMS", + "stereo-link": "Average", + "mix": "0", + "attack": "20", + "release": "250", + "threshold": "-30", + "ratio": "4", + "knee": "-15", + "makeup": "0" + }, + "crossfeed": { + "state": "false", + "fcut": "700", + "feed": "4.5" + }, + "deesser": { + "state": "false", + "detection": "RMS", + "mode": "Split", + "threshold": "-20", + "ratio": "3", + "laxity": "15", + "makeup": "0", + "f1-freq": "10000", + "f2-freq": "11000", + "f1-level": "0", + "f2-level": "12", + "f2-q": "2", + "sc-listen": "false" + }, + "equalizer": { + "state": "false", + "mode": "IIR", + "num-bands": "4", + "input-gain": "0", + "output-gain": "0", + "split-channels": "false", + "left": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-3.5", + "frequency": "500", + "q": "0.49999999999999867" + }, + "band1": { + "type": "Resonance", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-4", + "frequency": "4500", + "q": "9" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "1.5", + "frequency": "1600", + "q": "2" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "-2", + "frequency": "5500", + "q": "2" + } + }, + "right": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-3.5", + "frequency": "500", + "q": "0.49999999999999867" + }, + "band1": { + "type": "Resonance", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-4", + "frequency": "4500", + "q": "9" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "1.5", + "frequency": "1600", + "q": "2" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "-2", + "frequency": "5500", + "q": "2" + } + } + }, + "exciter": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "amount": "-15", + "harmonics": "8.5", + "scope": "2000", + "ceil": "16000", + "blend": "0", + "ceil-active": "false", + "listen": "false" + }, + "filter": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "frequency": "2000", + "resonance": "-3", + "mode": "12dB/oct Lowpass", + "inertia": "20" + }, + "gate": { + "state": "false", + "detection": "RMS", + "stereo-link": "Average", + "range": "-24", + "attack": "20", + "release": "250", + "threshold": "-18", + "ratio": "2", + "knee": "9", + "makeup": "0" + }, + "limiter": { + "state": "false", + "input-gain": "0", + "limit": "-1", + "lookahead": "5", + "release": "1000", + "asc": "true", + "asc-level": "1", + "oversampling": "1" + }, + "maximizer": { + "state": "false", + "release": "3.1600000000000001", + "ceiling": "0", + "threshold": "0" + }, + "pitch": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "cents": "0", + "semitones": "0", + "octaves": "0", + "crispness": "3", + "formant-preserving": "false", + "faster": "false" + }, + "reverb": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "room-size": "Large", + "decay-time": "1.5", + "hf-damp": "5000", + "diffusion": "0.5", + "amount": "-12", + "dry": "0", + "predelay": "0", + "bass-cut": "300", + "treble-cut": "5000" + }, + "multiband_compressor": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "freq0": "120", + "freq1": "1000", + "freq2": "6000", + "mode": "LR8", + "subband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "midband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "highband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + } + }, + "loudness": { + "state": "false", + "loudness": "-2.9999999999999893", + "output": "-7", + "link": "-9.0000000000000018" + }, + "multiband_gate": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "freq0": "120", + "freq1": "1000", + "freq2": "6000", + "mode": "LR8", + "subband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "midband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "highband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + } + }, + "stereo_tools": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "balance-in": "0", + "balance-out": "0", + "softclip": "false", + "mutel": "false", + "muter": "false", + "phasel": "false", + "phaser": "false", + "mode": "LR > LR (Stereo Default)", + "side-level": "0", + "side-balance": "0", + "middle-level": "0", + "middle-panorama": "0", + "stereo-base": "0", + "delay": "0", + "sc-level": "1", + "stereo-phase": "0" + }, + "convolver": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "kernel-path": "/home/wallace/.config/easyeffects/irs/Samsung SoundAlive ((48k Z-Edition)) 10.3D+Clarity.irs", + "ir-width": "100", + "blocksize": "512" + }, + "crystalizer": { + "state": "false", + "input-gain": "0", + "output-gain": "-6", + "intensity-low": "3", + "intensity-mid": "1.5", + "intensity-high": "0.75000000000000022", + "mute-low": "false", + "mute-mid": "false", + "mute-high": "false" + }, + "autogain": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "target": "-23", + "weight-m": "1", + "weight-s": "2", + "weight-i": "3" + }, + "delay": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "time-l": "0", + "time-r": "0" + } + } +} diff --git a/.circleci/presets/sie_preset_enable_all.json b/.circleci/presets/sie_preset_enable_all.json new file mode 100644 index 0000000..c151cce --- /dev/null +++ b/.circleci/presets/sie_preset_enable_all.json @@ -0,0 +1,502 @@ +{ + "spectrum": { + "show": "true", + "n-points": "100", + "height": "100", + "use-custom-color": "true", + "fill": "true", + "show-bar-border": "true", + "scale": "1", + "exponent": "1", + "sampling-freq": "10", + "line-width": "2", + "type": "Bars", + "color": [ + "0", + "1", + "1", + "1" + ], + "gradient-color": [ + "0", + "1", + "1", + "0.52364864864864868" + ] + }, + "output": { + "blacklist": "", + "plugins_order": [ + "limiter", + "autogain", + "multiband_compressor", + "convolver", + "bass_enhancer", + "exciter", + "equalizer", + "delay", + "maximizer", + "stereo_tools", + "compressor", + "reverb", + "filter", + "crossfeed", + "loudness", + "gate", + "multiband_gate", + "deesser", + "crystalizer", + "pitch" + ], + "bass_enhancer": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "amount": "0.40000000000000013", + "harmonics": "8.5", + "scope": "250", + "floor": "20", + "blend": "0", + "floor-active": "true", + "listen": "false" + }, + "compressor": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "mode": "Downward", + "attack": "25", + "release": "100", + "threshold": "-21.072093963623047", + "ratio": "4.2500799999999996", + "knee": "-20", + "makeup": "0", + "sidechain": { + "listen": "false", + "type": "Feed-forward", + "mode": "RMS", + "source": "Middle", + "preamp": "0", + "reactivity": "10", + "lookahead": "0" + } + }, + "crossfeed": { + "state": "true", + "fcut": "700", + "feed": "4.5" + }, + "deesser": { + "state": "true", + "detection": "RMS", + "mode": "Wide", + "threshold": "-18", + "ratio": "3", + "laxity": "15", + "makeup": "0", + "f1-freq": "6000", + "f2-freq": "4500", + "f1-level": "0", + "f2-level": "12", + "f2-q": "1", + "sc-listen": "false" + }, + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "4", + "input-gain": "0", + "output-gain": "0", + "split-channels": "false", + "left": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-3", + "frequency": "500", + "q": "0.49999999999999867" + }, + "band1": { + "type": "Resonance", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-3.5", + "frequency": "4500", + "q": "9" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "1", + "frequency": "1600", + "q": "2" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "-1.5", + "frequency": "5500", + "q": "2" + } + }, + "right": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-3", + "frequency": "500", + "q": "0.49999999999999867" + }, + "band1": { + "type": "Resonance", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "-3.5", + "frequency": "4500", + "q": "9" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "1", + "frequency": "1600", + "q": "2" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x4", + "solo": "false", + "mute": "false", + "gain": "-1.5", + "frequency": "5500", + "q": "2" + } + } + }, + "exciter": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "amount": "-8", + "harmonics": "8.5", + "scope": "2000", + "ceil": "16000", + "blend": "0", + "ceil-active": "false", + "listen": "false" + }, + "filter": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "frequency": "2000", + "resonance": "-3", + "mode": "12dB\/oct Lowpass", + "inertia": "20" + }, + "gate": { + "state": "true", + "detection": "RMS", + "stereo-link": "Average", + "range": "-24", + "attack": "20", + "release": "250", + "threshold": "-18", + "ratio": "2", + "knee": "9", + "makeup": "0" + }, + "limiter": { + "state": "true", + "input-gain": "0", + "limit": "0", + "lookahead": "10", + "release": "100", + "asc": "true", + "asc-level": "1", + "oversampling": "1" + }, + "maximizer": { + "state": "true", + "release": "3.1600000000000001", + "ceiling": "0", + "threshold": "-16" + }, + "pitch": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "cents": "0", + "semitones": "0", + "octaves": "0", + "crispness": "3", + "formant-preserving": "false", + "faster": "false" + }, + "reverb": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "room-size": "Large\/smooth", + "decay-time": "0.44594499999999998", + "hf-damp": "5508.46", + "diffusion": "0.54000000000000004", + "amount": "-9", + "dry": "0", + "predelay": "25", + "bass-cut": "257.64999999999998", + "treble-cut": "20000" + }, + "multiband_compressor": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "freq0": "300", + "freq1": "1000", + "freq2": "4000", + "mode": "LR8", + "subband": { + "threshold": "-30", + "ratio": "4", + "attack": "100", + "release": "500", + "makeup": "0", + "knee": "18", + "detection": "Peak", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "threshold": "-40", + "ratio": "2", + "attack": "100", + "release": "500", + "makeup": "0", + "knee": "9", + "detection": "Peak", + "bypass": "false", + "solo": "false" + }, + "midband": { + "threshold": "-50", + "ratio": "2", + "attack": "50", + "release": "500", + "makeup": "0", + "knee": "9", + "detection": "Peak", + "bypass": "false", + "solo": "false" + }, + "highband": { + "threshold": "-40", + "ratio": "4", + "attack": "100", + "release": "500", + "makeup": "0", + "knee": "18", + "detection": "Peak", + "bypass": "false", + "solo": "false" + } + }, + "loudness": { + "state": "true", + "loudness": "-3.1000000000000001", + "output": "-6", + "link": "-9.0999999999999996" + }, + "multiband_gate": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "freq0": "120", + "freq1": "1000", + "freq2": "6000", + "mode": "LR8", + "subband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "midband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "highband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + } + }, + "stereo_tools": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "balance-in": "0", + "balance-out": "0", + "softclip": "false", + "mutel": "false", + "muter": "false", + "phasel": "false", + "phaser": "false", + "mode": "LR > LR (Stereo Default)", + "side-level": "0", + "side-balance": "0", + "middle-level": "0", + "middle-panorama": "0", + "stereo-base": "0", + "delay": "1.5000000000000011", + "sc-level": "1", + "stereo-phase": "0" + }, + "convolver": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "kernel-path": "\/home\/wallace\/.config\/easyeffects/\/irs\/Samsung SoundAlive Small Room.irs", + "ir-width": "150" + }, + "crystalizer": { + "state": "true", + "aggressive": "false", + "input-gain": "0", + "output-gain": "0", + "band0": { + "intensity": "12", + "mute": "false", + "bypass": "false" + }, + "band1": { + "intensity": "10", + "mute": "false", + "bypass": "false" + }, + "band2": { + "intensity": "8", + "mute": "false", + "bypass": "false" + }, + "band3": { + "intensity": "6", + "mute": "false", + "bypass": "false" + }, + "band4": { + "intensity": "4", + "mute": "false", + "bypass": "false" + }, + "band5": { + "intensity": "2", + "mute": "false", + "bypass": "false" + }, + "band6": { + "intensity": "0", + "mute": "false", + "bypass": "false" + }, + "band7": { + "intensity": "-2", + "mute": "false", + "bypass": "false" + }, + "band8": { + "intensity": "-4", + "mute": "false", + "bypass": "false" + }, + "band9": { + "intensity": "-6", + "mute": "false", + "bypass": "false" + }, + "band10": { + "intensity": "-8", + "mute": "false", + "bypass": "false" + }, + "band11": { + "intensity": "-10", + "mute": "false", + "bypass": "false" + }, + "band12": { + "intensity": "-12", + "mute": "false", + "bypass": "false" + } + }, + "autogain": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "target": "-23", + "weight-m": "3", + "weight-s": "2", + "weight-i": "1" + }, + "delay": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "time-l": "0", + "time-r": "1.5000000000000011" + } + } +} diff --git a/.circleci/presets/soe_preset_disable_all.json b/.circleci/presets/soe_preset_disable_all.json new file mode 100644 index 0000000..0f05af9 --- /dev/null +++ b/.circleci/presets/soe_preset_disable_all.json @@ -0,0 +1,875 @@ +{ + "spectrum": { + "show": "true", + "n-points": "100", + "height": "100", + "use-custom-color": "true", + "fill": "true", + "show-bar-border": "true", + "scale": "1", + "exponent": "1", + "sampling-freq": "10", + "line-width": "2", + "type": "Bars", + "color": [ + "0", + "1", + "1", + "1" + ], + "gradient-color": [ + "0", + "1", + "1", + "0.52364864864864868" + ] + }, + "input": { + "blacklist": "", + "plugins_order": [ + "limiter", + "gate", + "webrtc", + "multiband_gate", + "compressor", + "multiband_compressor", + "filter", + "equalizer", + "deesser", + "reverb", + "pitch" + ], + "compressor": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "mode": "Downward", + "attack": "20", + "release": "250", + "threshold": "-18", + "ratio": "2", + "knee": "-6", + "makeup": "0", + "sidechain": { + "listen": "false", + "type": "Feed-forward", + "mode": "RMS", + "source": "Middle", + "preamp": "0", + "reactivity": "10", + "lookahead": "0" + } + }, + "deesser": { + "state": "false", + "detection": "RMS", + "mode": "Wide", + "threshold": "-18", + "ratio": "3", + "laxity": "15", + "makeup": "0", + "f1-freq": "6000", + "f2-freq": "4500", + "f1-level": "0", + "f2-level": "12", + "f2-q": "1", + "sc-listen": "false" + }, + "equalizer": { + "state": "false", + "mode": "IIR", + "num-bands": "30", + "input-gain": "0", + "output-gain": "0", + "split-channels": "false", + "left": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "22.589254117941671", + "q": "4.3600000000000003" + }, + "band1": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "28.438186042552807", + "q": "4.3600000000000003" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "35.801555074299934", + "q": "4.3600000000000003" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "45.071487464784603", + "q": "4.3600000000000003" + }, + "band4": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "56.741640916779602", + "q": "4.3600000000000003" + }, + "band5": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "71.433493657033537", + "q": "4.3600000000000003" + }, + "band6": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "89.929440418076979", + "q": "4.3600000000000003" + }, + "band7": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "113.21445781074659", + "q": "4.3600000000000003" + }, + "band8": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "142.52855792044753", + "q": "4.3600000000000003" + }, + "band9": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "179.43282347242823", + "q": "4.3600000000000003" + }, + "band10": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "225.89254117941681", + "q": "4.3600000000000003" + }, + "band11": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "284.3818604255282", + "q": "4.3600000000000003" + }, + "band12": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "358.01555074299949", + "q": "4.3600000000000003" + }, + "band13": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "450.71487464784627", + "q": "4.3600000000000003" + }, + "band14": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "567.41640916779625", + "q": "4.3600000000000003" + }, + "band15": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "714.33493657033569", + "q": "4.3600000000000003" + }, + "band16": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "899.29440418077013", + "q": "4.3600000000000003" + }, + "band17": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1132.1445781074663", + "q": "4.3600000000000003" + }, + "band18": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1425.2855792044757", + "q": "4.3600000000000003" + }, + "band19": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1794.328234724283", + "q": "4.3600000000000003" + }, + "band20": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2258.9254117941691", + "q": "4.3600000000000003" + }, + "band21": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2843.8186042552834", + "q": "4.3600000000000003" + }, + "band22": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "3580.1555074299968", + "q": "4.3600000000000003" + }, + "band23": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "4507.1487464784641", + "q": "4.3600000000000003" + }, + "band24": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "5674.1640916779661", + "q": "4.3600000000000003" + }, + "band25": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "7143.3493657033605", + "q": "4.3600000000000003" + }, + "band26": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "8992.9440418077065", + "q": "4.3600000000000003" + }, + "band27": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "11321.445781074672", + "q": "4.3600000000000003" + }, + "band28": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "14252.855792044767", + "q": "4.3600000000000003" + }, + "band29": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "17943.282347242843", + "q": "4.3600000000000003" + } + }, + "right": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "22.589254117941671", + "q": "4.3600000000000003" + }, + "band1": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "28.438186042552807", + "q": "4.3600000000000003" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "35.801555074299934", + "q": "4.3600000000000003" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "45.071487464784603", + "q": "4.3600000000000003" + }, + "band4": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "56.741640916779602", + "q": "4.3600000000000003" + }, + "band5": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "71.433493657033537", + "q": "4.3600000000000003" + }, + "band6": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "89.929440418076979", + "q": "4.3600000000000003" + }, + "band7": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "113.21445781074659", + "q": "4.3600000000000003" + }, + "band8": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "142.52855792044753", + "q": "4.3600000000000003" + }, + "band9": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "179.43282347242823", + "q": "4.3600000000000003" + }, + "band10": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "225.89254117941681", + "q": "4.3600000000000003" + }, + "band11": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "284.3818604255282", + "q": "4.3600000000000003" + }, + "band12": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "358.01555074299949", + "q": "4.3600000000000003" + }, + "band13": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "450.71487464784627", + "q": "4.3600000000000003" + }, + "band14": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "567.41640916779625", + "q": "4.3600000000000003" + }, + "band15": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "714.33493657033569", + "q": "4.3600000000000003" + }, + "band16": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "899.29440418077013", + "q": "4.3600000000000003" + }, + "band17": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1132.1445781074663", + "q": "4.3600000000000003" + }, + "band18": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1425.2855792044757", + "q": "4.3600000000000003" + }, + "band19": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1794.328234724283", + "q": "4.3600000000000003" + }, + "band20": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2258.9254117941691", + "q": "4.3600000000000003" + }, + "band21": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2843.8186042552834", + "q": "4.3600000000000003" + }, + "band22": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "3580.1555074299968", + "q": "4.3600000000000003" + }, + "band23": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "4507.1487464784641", + "q": "4.3600000000000003" + }, + "band24": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "5674.1640916779661", + "q": "4.3600000000000003" + }, + "band25": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "7143.3493657033605", + "q": "4.3600000000000003" + }, + "band26": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "8992.9440418077065", + "q": "4.3600000000000003" + }, + "band27": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "11321.445781074672", + "q": "4.3600000000000003" + }, + "band28": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "14252.855792044767", + "q": "4.3600000000000003" + }, + "band29": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "17943.282347242843", + "q": "4.3600000000000003" + } + } + }, + "filter": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "frequency": "2000", + "resonance": "-3", + "mode": "12dB\/oct Lowpass", + "inertia": "20" + }, + "gate": { + "state": "false", + "detection": "RMS", + "stereo-link": "Average", + "range": "-24", + "attack": "20", + "release": "250", + "threshold": "-18", + "ratio": "2", + "knee": "9", + "makeup": "0" + }, + "limiter": { + "state": "false", + "input-gain": "0", + "limit": "0", + "lookahead": "5", + "release": "1000", + "asc": "true", + "asc-level": "1", + "oversampling": "1" + }, + "pitch": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "cents": "0", + "semitones": "0", + "octaves": "0", + "crispness": "3", + "formant-preserving": "false", + "faster": "false" + }, + "reverb": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "room-size": "Large", + "decay-time": "1.5", + "hf-damp": "5000", + "diffusion": "0.5", + "amount": "-12", + "dry": "0", + "predelay": "0", + "bass-cut": "300", + "treble-cut": "5000" + }, + "webrtc": { + "state": "false", + "high-pass-filter": "true", + "echo-cancel": "true", + "echo-suppression-level": "moderate", + "noise-suppression": "true", + "noise-suppression-level": "moderate", + "gain-control": "true", + "extended-filter": "true", + "delay-agnostic": "false", + "target-level-dbfs": "3", + "compression-gain-db": "9", + "limiter": "true", + "gain-control-mode": "adaptive-digital", + "voice-detection": "false", + "voice-detection-frame-size-ms": "10", + "voice-detection-likelihood": "low" + }, + "multiband_compressor": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "freq0": "120", + "freq1": "1000", + "freq2": "6000", + "mode": "LR8", + "subband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "midband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "highband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + } + }, + "multiband_gate": { + "state": "false", + "input-gain": "0", + "output-gain": "0", + "freq0": "120", + "freq1": "1000", + "freq2": "6000", + "mode": "LR8", + "subband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "midband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "highband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + } + } + } +} diff --git a/.circleci/presets/soe_preset_enable_all.json b/.circleci/presets/soe_preset_enable_all.json new file mode 100644 index 0000000..0312421 --- /dev/null +++ b/.circleci/presets/soe_preset_enable_all.json @@ -0,0 +1,875 @@ +{ + "spectrum": { + "show": "true", + "n-points": "100", + "height": "100", + "use-custom-color": "true", + "fill": "true", + "show-bar-border": "true", + "scale": "1", + "exponent": "1", + "sampling-freq": "10", + "line-width": "2", + "type": "Bars", + "color": [ + "0", + "1", + "1", + "1" + ], + "gradient-color": [ + "0", + "1", + "1", + "0.52364864864864868" + ] + }, + "input": { + "blacklist": "", + "plugins_order": [ + "limiter", + "gate", + "webrtc", + "multiband_gate", + "compressor", + "multiband_compressor", + "filter", + "equalizer", + "deesser", + "reverb", + "pitch" + ], + "compressor": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "mode": "Downward", + "attack": "20", + "release": "250", + "threshold": "-18", + "ratio": "2", + "knee": "-6", + "makeup": "0", + "sidechain": { + "listen": "false", + "type": "Feed-forward", + "mode": "RMS", + "source": "Middle", + "preamp": "0", + "reactivity": "10", + "lookahead": "0" + } + }, + "deesser": { + "state": "true", + "detection": "RMS", + "mode": "Wide", + "threshold": "-18", + "ratio": "3", + "laxity": "15", + "makeup": "0", + "f1-freq": "6000", + "f2-freq": "4500", + "f1-level": "0", + "f2-level": "12", + "f2-q": "1", + "sc-listen": "false" + }, + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "30", + "input-gain": "0", + "output-gain": "0", + "split-channels": "false", + "left": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "22.589254117941671", + "q": "4.3600000000000003" + }, + "band1": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "28.438186042552807", + "q": "4.3600000000000003" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "35.801555074299934", + "q": "4.3600000000000003" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "45.071487464784603", + "q": "4.3600000000000003" + }, + "band4": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "56.741640916779602", + "q": "4.3600000000000003" + }, + "band5": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "71.433493657033537", + "q": "4.3600000000000003" + }, + "band6": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "89.929440418076979", + "q": "4.3600000000000003" + }, + "band7": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "113.21445781074659", + "q": "4.3600000000000003" + }, + "band8": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "142.52855792044753", + "q": "4.3600000000000003" + }, + "band9": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "179.43282347242823", + "q": "4.3600000000000003" + }, + "band10": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "225.89254117941681", + "q": "4.3600000000000003" + }, + "band11": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "284.3818604255282", + "q": "4.3600000000000003" + }, + "band12": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "358.01555074299949", + "q": "4.3600000000000003" + }, + "band13": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "450.71487464784627", + "q": "4.3600000000000003" + }, + "band14": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "567.41640916779625", + "q": "4.3600000000000003" + }, + "band15": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "714.33493657033569", + "q": "4.3600000000000003" + }, + "band16": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "899.29440418077013", + "q": "4.3600000000000003" + }, + "band17": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1132.1445781074663", + "q": "4.3600000000000003" + }, + "band18": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1425.2855792044757", + "q": "4.3600000000000003" + }, + "band19": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1794.328234724283", + "q": "4.3600000000000003" + }, + "band20": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2258.9254117941691", + "q": "4.3600000000000003" + }, + "band21": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2843.8186042552834", + "q": "4.3600000000000003" + }, + "band22": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "3580.1555074299968", + "q": "4.3600000000000003" + }, + "band23": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "4507.1487464784641", + "q": "4.3600000000000003" + }, + "band24": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "5674.1640916779661", + "q": "4.3600000000000003" + }, + "band25": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "7143.3493657033605", + "q": "4.3600000000000003" + }, + "band26": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "8992.9440418077065", + "q": "4.3600000000000003" + }, + "band27": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "11321.445781074672", + "q": "4.3600000000000003" + }, + "band28": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "14252.855792044767", + "q": "4.3600000000000003" + }, + "band29": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "17943.282347242843", + "q": "4.3600000000000003" + } + }, + "right": { + "band0": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "22.589254117941671", + "q": "4.3600000000000003" + }, + "band1": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "28.438186042552807", + "q": "4.3600000000000003" + }, + "band2": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "35.801555074299934", + "q": "4.3600000000000003" + }, + "band3": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "45.071487464784603", + "q": "4.3600000000000003" + }, + "band4": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "56.741640916779602", + "q": "4.3600000000000003" + }, + "band5": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "71.433493657033537", + "q": "4.3600000000000003" + }, + "band6": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "89.929440418076979", + "q": "4.3600000000000003" + }, + "band7": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "113.21445781074659", + "q": "4.3600000000000003" + }, + "band8": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "142.52855792044753", + "q": "4.3600000000000003" + }, + "band9": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "179.43282347242823", + "q": "4.3600000000000003" + }, + "band10": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "225.89254117941681", + "q": "4.3600000000000003" + }, + "band11": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "284.3818604255282", + "q": "4.3600000000000003" + }, + "band12": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "358.01555074299949", + "q": "4.3600000000000003" + }, + "band13": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "450.71487464784627", + "q": "4.3600000000000003" + }, + "band14": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "567.41640916779625", + "q": "4.3600000000000003" + }, + "band15": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "714.33493657033569", + "q": "4.3600000000000003" + }, + "band16": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "899.29440418077013", + "q": "4.3600000000000003" + }, + "band17": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1132.1445781074663", + "q": "4.3600000000000003" + }, + "band18": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1425.2855792044757", + "q": "4.3600000000000003" + }, + "band19": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "1794.328234724283", + "q": "4.3600000000000003" + }, + "band20": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2258.9254117941691", + "q": "4.3600000000000003" + }, + "band21": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "2843.8186042552834", + "q": "4.3600000000000003" + }, + "band22": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "3580.1555074299968", + "q": "4.3600000000000003" + }, + "band23": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "4507.1487464784641", + "q": "4.3600000000000003" + }, + "band24": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "5674.1640916779661", + "q": "4.3600000000000003" + }, + "band25": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "7143.3493657033605", + "q": "4.3600000000000003" + }, + "band26": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "8992.9440418077065", + "q": "4.3600000000000003" + }, + "band27": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "11321.445781074672", + "q": "4.3600000000000003" + }, + "band28": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "14252.855792044767", + "q": "4.3600000000000003" + }, + "band29": { + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false", + "gain": "0", + "frequency": "17943.282347242843", + "q": "4.3600000000000003" + } + } + }, + "filter": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "frequency": "2000", + "resonance": "-3", + "mode": "12dB\/oct Lowpass", + "inertia": "20" + }, + "gate": { + "state": "true", + "detection": "RMS", + "stereo-link": "Average", + "range": "-24", + "attack": "20", + "release": "250", + "threshold": "-18", + "ratio": "2", + "knee": "9", + "makeup": "0" + }, + "limiter": { + "state": "true", + "input-gain": "0", + "limit": "0", + "lookahead": "5", + "release": "1000", + "asc": "true", + "asc-level": "1", + "oversampling": "1" + }, + "pitch": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "cents": "0", + "semitones": "0", + "octaves": "0", + "crispness": "3", + "formant-preserving": "false", + "faster": "false" + }, + "reverb": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "room-size": "Large", + "decay-time": "1.5", + "hf-damp": "5000", + "diffusion": "0.5", + "amount": "-12", + "dry": "0", + "predelay": "0", + "bass-cut": "300", + "treble-cut": "5000" + }, + "webrtc": { + "state": "true", + "high-pass-filter": "true", + "echo-cancel": "true", + "echo-suppression-level": "moderate", + "noise-suppression": "true", + "noise-suppression-level": "moderate", + "gain-control": "true", + "extended-filter": "true", + "delay-agnostic": "false", + "target-level-dbfs": "3", + "compression-gain-db": "9", + "limiter": "true", + "gain-control-mode": "adaptive-digital", + "voice-detection": "false", + "voice-detection-frame-size-ms": "10", + "voice-detection-likelihood": "low" + }, + "multiband_compressor": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "freq0": "120", + "freq1": "1000", + "freq2": "6000", + "mode": "LR8", + "subband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "midband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "highband": { + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + } + }, + "multiband_gate": { + "state": "true", + "input-gain": "0", + "output-gain": "0", + "freq0": "120", + "freq1": "1000", + "freq2": "6000", + "mode": "LR8", + "subband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "lowband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "midband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + }, + "highband": { + "reduction": "-24", + "threshold": "-12", + "ratio": "2", + "attack": "150", + "release": "300", + "makeup": "0", + "knee": "9", + "detection": "RMS", + "bypass": "false", + "solo": "false" + } + } + } +} diff --git a/.circleci/test.sh b/.circleci/test.sh new file mode 100755 index 0000000..f0939ae --- /dev/null +++ b/.circleci/test.sh @@ -0,0 +1,124 @@ +#!/usr/bin/env bash +# Use shellcheck to check this script after making changes +# Try too keep it compatible with both GNU and BSD coreutils + +# This script is for testing EasyEffects. +# Can be ran locally after making changes in code +# or in continious integration systems. +# Requirements for CI containers: bash ImageMagic scrot Xvfb +# Authors: +# - Mikhail Novosyolov + +set -e # fail on any error +#set -f # disable globbing +#export DISPLAY=:0 +# Gurantee consistency of language strings in GUIs and CLI outputs +export LANG=c + +if [ "$(pwd | awk -F '/' '{print $NF}')" = "util" ]; then cd .. ; fi +dir0="$PWD" + +# EasyEffects binary +# In PATH, relative or absolute +PE_BIN="${PE_BIN:-easyeffects}" + +cleanup(){ + ( set +e +f + while read -r line + do + kill "$line" + # TODO: check if has been actually killed + done < <(cat ${tmp_dir}/*.pid) + ) + if [ -z "$NO_CLEANUP" ]; then rm -fr ${tmp_dir:?}/* ; fi +} +export -f cleanup +trap cleanup EXIT + +# This test runs a graphical app and checks that it ran OK +# The idea is described here (in Russian): +# https://lists.altlinux.org/pipermail/sisyphus/2018-April/366621.html +graphical_run_test(){ + # Xephyr is an X server in a seperate graphical window - for local tests on developer PCs + # Xvfb is a headless X server - for automated tests + # Let's automatically use Xephyr on developers PCs + if [ -n "$DISPLAY" ] && [ -z "$X_SERVER" ]; then + X_SERVER=Xephyr + fi + X_SERVER="${X_SERVER:-Xvfb}" + + # Keep GUI consistent to compare screenshots + export GTK_THEME=Adwaita:light + + tmp_dir="$(mktemp -d)" + mkdir -p "${tmp_dir}" + echo "Temp dir: ${tmp_dir}" + rm -fvr ${tmp_dir:?}/* + + virt_display="$(( ( RANDOM % 100 ) + 1 ))" + echo "Random DISPLAY = $virt_display" + + case "$X_SERVER" in + Xephyr|xephyr ) + echo "Using Xephyr X server" + Xephyr -br -ac -noreset -screen 1024x720 ":${virt_display}" & + ;; + Xvfb|xvfb ) + echo "Using Xvfb X server" + Xvfb ":${virt_display}" -screen 0 1024x720x24 & + ;; + esac + echo $! > "${tmp_dir}/X-server.pid" + + # export DISPLAY only after running Xephyr, otherwise Xephyr itself tries to use this $DISPLAY + export DISPLAY=":${virt_display}" + + # now run EasyEffects + "$PE_BIN" & + echo $! > "${tmp_dir}/easyeffects.pid" + + # Check that EasyEffects started + # TODO: improve this check + # EasyEffects start up time is different on different systems, you make set yours + # TODO: writee better code and avois using sleep + SLEEP_TIME="${SLEEP_TIME:-10}" + sleep "$SLEEP_TIME" + if ! ps aux | awk '{print $NF}' | grep -v 'grep ' | grep -q "${PE_BIN}\$"; then + echo "$PE_BIN" did not start in "$SLEEP_TIME" seconds, exiting with error! + return 1 + fi + + # take screenshot of our seperate X server + scrot --quality 100 "${tmp_dir}/current_screenshot_full.png" + + # master screenshot of test result + MASTER_SCREENSHOT="${MASTER_SCREENSHOT:-${dir0}/images/master_screenshot_test.png}" + if [ ! -f "$MASTER_SCREENSHOT" ]; then + echo "Master screenshot ${MASTER_SCREENSHOT} not found!" + return 1 + fi + + # reduce nu,ber of colors in screenshot to remove unneeded artefacts and differences + convert +dither -colors 2 "$MASTER_SCREENSHOT" "${tmp_dir}/master_screenshot_reduced.png" + convert +dither -colors 2 "${tmp_dir}/current_screenshot_full.png" "${tmp_dir}/current_screenshot_cropped.png" + # TODO: what will we do with different default fonts? + + # https://stackoverflow.com/questions/29229535/measure-similarity-of-two-images-in-java-or-imagemagick + screenshots_diff_value="$(compare -metric ae "${tmp_dir}/master_screenshot_reduced.png" "${tmp_dir}/current_screenshot_cropped.png" null: 2>&1)" + echo screenshots_diff_value = "$screenshots_diff_value" + + # 8000 is an experimanental value, probably we can somehow find a more exact value + if [ "$screenshots_diff_value" -le 8000 ] + then + echo "Graphical test: OK" + return 0 + else + echo "Graphical test: FAILED !!!" + return 1 + fi + + # trap cleanup will run if nothing else is planned to be after this function +} + +# TODO: parse command line arguements etc. +graphical_run_test diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..bcb9346 --- /dev/null +++ b/.clang-format @@ -0,0 +1,148 @@ +--- +Language: Cpp +# BasedOnStyle: Chromium +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: Yes +BinPackArguments: true +BinPackParameters: false +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^' + Priority: 2 + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Never +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +RawStringFormats: + - Language: Cpp + Delimiters: + - cc + - CC + - cpp + - Cpp + - CPP + - 'c++' + - 'C++' + CanonicalDelimiter: '' + BasedOnStyle: google + - Language: TextProto + Delimiters: + - pb + - PB + - proto + - PROTO + EnclosingFunctions: + - EqualsProto + - EquivToProto + - PARSE_PARTIAL_TEXT_PROTO + - PARSE_TEST_PROTO + - PARSE_TEXT_PROTO + - ParseTextOrDie + - ParseTextProtoOrDie + CanonicalDelimiter: '' + BasedOnStyle: google +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 8 +UseTab: Never +... + diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..32bde68 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,79 @@ +# the checks with the hyphen prepended are disabled until they are fixed +# some like clang-analyzer-osx* should stay disabled as they are not relevant, to improve performance somewhat +Checks: 'bugprone-*,cert-*,clang-analyzer-*,concurrency-*,cppcoreguidelines-*,hicpp-*,misc-*,modernize-*,performance-*,portability-*,readability-*, + -clang-analyzer-osx*, + -clang-analyzer-optin.osx*, + -cppcoreguidelines-pro-type-cstyle-cast, + -cppcoreguidelines-pro-type-vararg, + -cppcoreguidelines-non-private-member-variables-in-classes, + -cppcoreguidelines-avoid-magic-numbers, + -cppcoreguidelines-owning-memory, + -cppcoreguidelines-avoid-non-const-global-variables, + -cppcoreguidelines-pro-bounds-constant-array-index, + -readability-magic-numbers, + -readability-function-cognitive-complexity, + -readability-identifier-length, + -bugprone-easily-swappable-parameters, + -misc-non-private-member-variables-in-classes, + -hicpp-vararg, + -cppcoreguidelines-special-member-functions, + -hicpp-special-member-functions, + -cppcoreguidelines-pro-type-member-init, + -hicpp-member-init, + -cppcoreguidelines-pro-bounds-pointer-arithmetic, + -misc-const-correctness, + -cppcoreguidelines-pro-type-const-cast, + -hicpp-signed-bitwise, + -cert-err58-cpp, + -hicpp-multiway-paths-covered, + -cert-dcl50-cpp, + -cppcoreguidelines-pro-bounds-array-to-pointer-decay, + -hicpp-no-array-decay, + -bugprone-narrowing-conversions, + -cppcoreguidelines-narrowing-conversions, + -cert-err33-c, + -concurrency-mt-unsafe, + -bugprone-branch-clone, + -cppcoreguidelines-pro-type-reinterpret-cast, + -cppcoreguidelines-avoid-c-arrays, + -hicpp-avoid-c-arrays, + -modernize-avoid-c-arrays, + -cppcoreguidelines-avoid-const-or-ref-data-members, + -misc-use-anonymous-namespace, + -cppcoreguidelines-avoid-do-while, + -hicpp-explicit-conversions, + -misc-unused-parameters, + -modernize-use-trailing-return-type, + -readability-qualified-auto, + -readability-redundant-string-cstr, + -readability-non-const-parameter, + -performance-unnecessary-value-param, + -cppcoreguidelines-prefer-member-initializer, + -readability-implicit-bool-conversion, + -performance-inefficient-vector-operation, + -readability-else-after-return, + -bugprone-exception-escape, + ' +# todo, clang-analyzer-core.NullDereference is also suppressed in the code itself with NOLINT, consider fixing that too + +# todo these can all be fixed automatically but that needs to be done with caution +# hicpp-explicit-conversions, misc-unused-parameter,modernize-use-trailing-return-type,readability-qualified-auto,readability-redundant-string-cstr, +# readability-non-const-parameter,performance-unnecessary-value-param,cppcoreguidelines-prefer-member-initializer,readability-implicit-bool-conversion +# performance-inefficient-vector-operation,readability-else-after-return + +CheckOptions: + # we don't want these to be passed by reference, even if (especially for shared_ptrs) it incurs a much greater cost + # since we either we use c apis like pipewire which clang-tidy/c++ cannot reason about (NodeInfo, LinkInfo, DeviceInfo), + # or we depend on shared_ptrs to work across multiple threads, notably when the caller finishes before the callee + performance-unnecessary-value-param.AllowedTypes: 'NodeInfo; LinkInfo; DeviceInfo; std::shared_ptr' + +# note some checks are disabled in the code itself by adding NOLINT(check-name) or NOLINTNEXTLINE(check-name) + +# treat clang diagnostic warnings (aka compiler warnings) as errors, to ensure CI fails on these warnings +# note we can't completely suppress warnings like can be done for other checks above, they will always be outputted +# these can however be suppressed by disabling the compiler warnings in meson, but that is not really what we want +# we cannot ignore clang-diagnostic-error, which are just compilation errors, which will occur when using clang < 16 (clang-tidy always wants clang for compilation it seems) +WarningsAsErrors: '*' + +# set this to the include directory specifically, not '.*' since we don't want generated files like config.h being scanned +HeaderFilterRegex: './include/' diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..eb11def --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +github: wwmm +liberapay: wwmm +patreon: wellingtonwallace +custom: https://www.paypal.com/donate?hosted_button_id=RK723F4EKH2UE diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..e3e6f78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,58 @@ +name: Bug Report +description: Report an EasyEffects bug +body: +- type: input + attributes: + label: EasyEffects Version + placeholder: EasyEffects Settings > About EasyEffects + validations: + required: true +- type: dropdown + attributes: + label: What package are you using? + options: + - Arch (easyeffects) + - AUR (easyeffects-git) + - Fedora + - Flatpak (Flathub) + - Flatpak Nightly (Flathub-beta) + - Gentoo + - NixOS + - openSUSE + - Other (specify below) + validations: + required: true +- type: input + attributes: + label: Distribution + placeholder: "e.g. Arch Linux, Fedora 35 or Ubuntu 20.04" + validations: + required: true +- type: textarea + attributes: + label: Describe the bug + description: A clear description of the bug you've experienced. + validations: + required: true +- type: textarea + attributes: + label: Expected Behavior + description: A clear and concise description of what you expected to happen. +- type: textarea + attributes: + label: Debug Log + description: If relevant, please add a log by launching with `G_MESSAGES_DEBUG=easyeffects` + value: "
Debug Log
+ + + ``` + + Paste your log here + + ``` + +
" +- type: textarea + attributes: + label: Additional Information + 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. diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..1230149 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml new file mode 100644 index 0000000..eb59c63 --- /dev/null +++ b/.github/workflows/CI.yaml @@ -0,0 +1,267 @@ +on: + push: + branches-ignore: + # dependabot branches will fail on push since they run with fork-level permissions despite being in the main repo. + # said branches are tested anyhow when dependabot makes its PR and the pull_request triggers the run. + - 'dependabot/**' + pull_request: + +name: CI +jobs: + prepare: + name: Prepare + runs-on: ubuntu-22.04 + outputs: + github_commit_desc: ${{ steps.get_commit_desc.outputs.github_commit_desc }} + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 0 + + - name: Get head branch latest commit + run: echo "GITHUB_PR_HEAD_SHA=$(git log --pretty=format:'%h' $GITHUB_SHA^2 -1)" >> $GITHUB_ENV + + - name: Get base branch latest commit + run: echo "GITHUB_PR_BASE_SHA=$(git log --pretty=format:'%h' $GITHUB_SHA^1 -1)" >> $GITHUB_ENV + + - name: Get latest commit + run: echo "GITHUB_HEAD_SHA=$(git log --pretty=format:'%h' -1)" >> $GITHUB_ENV + + # on a pull_request event in github actions, the tests are not run on the head branch of the PR, rather they are run on the merge commit of head merged into the base branch + # this means the latest commit in github actions, which is used for build artifact names is a commit that does not exist in the repository + # so on pull requests we create a user-friendly string to use in place of the merge commit sha, otherwise we just use the normal git HEAD sha. + - id: get_commit_desc + run: | + if [[ ${{ github.event_name }} == 'pull_request' ]]; then + echo "github_commit_desc=merge-${{ env.GITHUB_PR_HEAD_SHA }}-into-${{ env.GITHUB_PR_BASE_SHA }}" >> $GITHUB_OUTPUT + else + echo "github_commit_desc=${{ env.GITHUB_HEAD_SHA }}" >> $GITHUB_OUTPUT + fi + + flatpak: + name: Flatpak + runs-on: ubuntu-22.04 + env: + FLATPAK_BUILD_PATH: flatpak_app/files/share + needs: prepare + container: + image: bilelmoussaoui/flatpak-github-actions:gnome-44 + options: --privileged + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + + - name: Enable errors on warnings + run: | + dnf install -y jq + # jq does not have an option to save edits in place so we should make a temporary file to edit this safely + updated_manifest=$(mktemp) + jq '.modules[0]."config-opts" += ["-Dwerror=true"]' util/flatpak/com.github.wwmm.easyeffects.Devel.json > "$updated_manifest" + mv "$updated_manifest" util/flatpak/com.github.wwmm.easyeffects.Devel.json + + - uses: flatpak/flatpak-github-actions/flatpak-builder@v6.3 + with: + bundle: easyeffects-flatpak-${{ needs.prepare.outputs.github_commit_desc }}.flatpak + manifest-path: util/flatpak/com.github.wwmm.easyeffects.Devel.json + cache-key: flatpak-builder-${{ github.sha }} + run-tests: true + + # we also validate appstream in the appstream-news-validate job, + # but we still should specifically ensure the flatpak outputs it properly + - name: Validate AppStream + shell: bash + working-directory: ${{ env.FLATPAK_BUILD_PATH }} + run: | + appstream-util validate-relax appdata/com.github.wwmm.easyeffects.Devel.appdata.xml + + - name: Verify icon and metadata in app-info + shell: bash + working-directory: ${{ env.FLATPAK_BUILD_PATH }} + run: | + test -f app-info/icons/flatpak/128x128/com.github.wwmm.easyeffects.Devel.png || { echo "Missing 128x128 icon in app-info" ; exit 1; } + test -f app-info/xmls/com.github.wwmm.easyeffects.Devel.xml.gz || { echo "Missing com.github.wwmm.easyeffects.Devel.xml.gz in app-info" ; exit 1; } + + # this just validates, actual update PRs are done in flatpak-update.yaml + - name: Verify flatpak external data checker metadata + uses: docker://ghcr.io/flathub/flatpak-external-data-checker:latest + with: + args: util/flatpak/com.github.wwmm.easyeffects.Devel.json + + arch-linux: + name: Arch Linux + runs-on: ubuntu-22.04 + needs: prepare + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + with: + # needed for getting git describe info for pkgver() in pkgbuild + fetch-depth: 0 + + - name: Save commit description to file + # if this file is present, pkgver() in pkgbuild will use it to show a more user-friendly commit sha + run: echo ${{ needs.prepare.outputs.github_commit_desc }} >> GITHUB_COMMIT_DESC + + - name: Makepkg Build and Check + id: makepkg + uses: edlanglois/pkgbuild-action@v1.1.8 + with: + # namcap doesn't actually exclude this rule, resulting in unnecessary warnings, so just disable namcap since it's not critical + # namcapExcludeRules: unusedsodepends + namcapDisable: true + + - name: Upload Package Archive + uses: actions/upload-artifact@v3.1.3 + with: + name: easyeffects-archlinux-${{ needs.prepare.outputs.github_commit_desc }}-x86_64 + path: ${{ steps.makepkg.outputs.pkgfile0 }} + if-no-files-found: error + + codeql-analyze: + name: CodeQL Analyze + runs-on: ubuntu-22.04 + permissions: + security-events: write + container: + image: archlinux + + steps: + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Install deps + run: | + # install general build deps + pacman -Syu --noconfirm ninja gcc pkgconf python3 python-pip which + # install easyeffects deps + source ./PKGBUILD && pacman -Syu --noconfirm --needed --asdeps "${makedepends[@]}" "${depends[@]}" + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2.22.5 + with: + languages: cpp # we don't use a matrix build (to analyze multiple lanaguages in parallel) as we are only analyzing c++ + + - name: Autobuild + uses: github/codeql-action/autobuild@v2.22.5 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2.22.5 + + clang-tidy: + name: Clang Tidy + runs-on: ubuntu-22.04 + container: + # since arch linux tends to take time to get the latest clang (we need >= 16), use alpine for now + image: alpine + + steps: + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Install deps + run: | + apk update + apk upgrade + + # install general build deps + apk add meson clang clang-extra-tools build-base bash libc++-dev + + # copy pasted from https://git.alpinelinux.org/aports/plain/community/easyeffects/APKBUILD + depends="lv2" + makedepends=" + appstream-glib-dev + desktop-file-utils + fftw-dev + fmt-dev + gsl-dev + gtk4.0-dev + itstool + libadwaita-dev + libbs2b-dev + libebur128-dev + libsamplerate-dev + libsigc++3-dev + libsndfile-dev + libtbb-dev + lilv-dev + lv2-dev + meson + nlohmann-json + pipewire-dev + rnnoise-dev + soundtouch-dev + speexdsp-dev + zita-convolver-dev + ladspa-dev + " + + # install easyeffects deps + apk add $makedepends $depends + + # install libportal since we technically need it for a full check + apk add libportal-dev + + - name: Build with Clang + # build with clang not because we strictly need to (we do need to do some kind of build so config.h shows up) + # but because any clang compiler failures will cause clang-tidy to fail later on, so we might as well fail fast + # also use libc++ as that is not the default, and is good to test as some distros like chimera linux use it over libstdc++ + run: | + CC=clang CXX=clang++ CXXFLAGS=-stdlib=libc++ meson setup build -Dwerror=true -Denable-libportal=true -Dbuildtype=debug -Denable-libcpp-workarounds=true + meson compile -C build + + - name: Install ctcache + run: | + # we need to install the full tar since the cache action needs it, and it can't use alpine linux's default + apk add git tar + git clone https://github.com/matus-chochlik/ctcache + cd ctcache + git checkout bd1620a8609ddaf2f64500820abc8b4d150edeaf # v1.1.0 + ./install-user-client + + - name: Restore Clang Tidy cache + uses: actions/cache/restore@v3.3.2 + with: + # since the ctcache is just a list of checksums that were checked, we want to write to it every ci run to keep it up to date + # otherwise github actions just restores some old cache if the key didn't change + # the ctcache itself is what handles what misses or not + # https://github.com/actions/cache/blob/ea0503788c59256f4da17725d04df850ca027df5/tips-and-workarounds.md#update-a-cache + path: /tmp/ci-ctcache + key: clang-tidy-ctcache-${{ github.run_id }} + # this restores the most recently saved cache from the following 3 categories + # it first checks caches from the current branch/pull request, then the base branch of the pull request (if it exists), and then master (the default branch), as described here: + # https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key + # this also relies on github's fairly restricted isolation for caches: + # https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#restrictions-for-accessing-a-cache + # note the most recently saved cache is not necessarily the one with the greatest run id, as a workflow run could have started before another but taken longer to complete + restore-keys: | + clang-tidy-ctcache- + + - name: Clang Tidy + run: | + cd build + PATH=~/.local/bin:"$PATH" CTCACHE_DIR=/tmp/ci-ctcache ../util/clang-tidy.sh + + - name: Save Clang Tidy cache + uses: actions/cache/save@v3.3.2 + # always run, except if the workflow was cancelled + # this means clang tidy will get cached even if some checks are failing + if: success() || failure() + with: + path: /tmp/ci-ctcache + key: clang-tidy-ctcache-${{ github.run_id }} + + appstream-news-validate: + name: AppStream and News validate + runs-on: ubuntu-22.04 + container: + image: archlinux + steps: + - name: Checkout code + uses: actions/checkout@v4.1.1 + + - name: Install deps + run: pacman -Syu --noconfirm appstream appstream-glib libxslt which + + - name: Validate existing files + run: ./util/update-release-files.sh --no-new-release diff --git a/.github/workflows/artifact-pr-comment.yaml b/.github/workflows/artifact-pr-comment.yaml new file mode 100644 index 0000000..648fbf7 --- /dev/null +++ b/.github/workflows/artifact-pr-comment.yaml @@ -0,0 +1,112 @@ +name: Artifact PR comment + +on: + workflow_run: + workflows: [CI] + types: [completed, requested] + +permissions: + # write comment + pull-requests: write + +jobs: + artifact_pr_comment: + name: Update Artifact PR comment + if: github.event.workflow_run.event == 'pull_request' + runs-on: ubuntu-22.04 + steps: + - name: Check if workflow is running + if: ${{github.event.workflow_run.conclusion == '' }} + run: echo "CONCLUSION=running" >> $GITHUB_ENV + + - name: Check if workflow concluded + if: ${{github.event.workflow_run.conclusion != '' }} + run: echo "CONCLUSION=${{github.event.workflow_run.conclusion }}" >> $GITHUB_ENV + + - name: Get the PR number + run: | + # Query the issue search API to get the PR associated with it + PR_RAW=$(curl 'https://api.github.com/search/issues?q=${{ github.event.workflow_run.head_commit.id }}') + + # Get the event number from the search results, which will be the PR number + # Filter by PRs only in this repository, as a PR with an identical head commit may be made in another repository (e.g. a fork) + # Assume the 0th index in the array of found PRs is the correct one (it seems to usually be the latest one) + PR_NUM=$(echo $PR_RAW | jq '.items | map(select(.repository_url=="https://api.github.com/repos/${{ github.repository }}")) | .[0].number') + echo "PR_NUM=${PR_NUM}" >> ${GITHUB_ENV} + + - name: Comment on PR + uses: actions/github-script@v6.4.1 + with: + # adapted from https://github.com/oprypin/nightly.link/blob/master/.github/workflows/pr-comment.yml + # and https://github.com/oprypin/nightly.link/pull/38 + script: | + async function upsertComment(owner, repo, issue_number, purpose) { + const { data: comments } = await github.rest.issues.listComments( + { owner, repo, issue_number }); + const marker = ``; + + let body = 'no body was set'; + const conclusion = process.env.CONCLUSION; + + if (conclusion === "running") { + body = `Workflow is currently running, latest artifacts not yet available.\n`; + } + else { + const artifacts = await github.paginate( + github.rest.actions.listWorkflowRunArtifacts, { owner, repo, run_id }); + + // in case we have a simple scenario, when no artifacts are available. + if (!artifacts.length) { + if (conclusion === "failure") { + body = `Workflow failed, and no artifacts are available.\n`; + } + else if (conclusion === "cancelled") { + body = `Workflow was cancelled, and no artifacts are available.\n`; + } + else { + return core.error(`No artifacts were found for non successful workflow, but conclusion was not failure or cancelled, instead it was: ${conclusion}`); + } + } + + // if at least some artifacts exist we can still make a comment with them. + else { + if (conclusion === "success") { + body = `Download the latest artifacts for this pull request:\n`; + } + else if (conclusion === "failure") { + body = `Workflow failed, but the following artifacts are still available for this pull request:\n`; + } + else if (conclusion === "cancelled") { + body = `Workflow was cancelled, but the following artifacts are still available for this pull request:\n`; + } + else { + return core.error(`Artifacts were found for this workflow, but conclusion was not success, failure, or cancelled, instead it was: ${conclusion}`); + } + + for (const art of artifacts) { + body += `\n* [${art.name}.zip](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; + } + } + } + + body = marker + "\n" + body; + const existing = comments.filter((c) => c.body.includes(marker)); + if (existing.length > 0) { + const last = existing[existing.length - 1]; + core.info(`Updating comment ${last.id}`); + await github.rest.issues.updateComment({ + owner, repo, + body, + comment_id: last.id, + }); + } else { + core.info(`Creating a comment in issue / PR #${issue_number}`); + await github.rest.issues.createComment({ issue_number, body, owner, repo }); + } + } + const { owner, repo } = context.repo; + const run_id = ${{ github.event.workflow_run.id }}; + + await upsertComment(owner, repo, process.env.PR_NUM, + "ci-artifacts-comment"); + diff --git a/.github/workflows/deploy-help.yaml b/.github/workflows/deploy-help.yaml new file mode 100644 index 0000000..62a87db --- /dev/null +++ b/.github/workflows/deploy-help.yaml @@ -0,0 +1,49 @@ +name: Deploy help + +on: + # Runs on every push to a tag not containing a / + push: + tags: + - "*" + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + deploy-help: + name: Deploy help + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + + - name: Setup Pages + uses: actions/configure-pages@v3.0.6 + + - name: Build html help pages + run: | + sudo apt-get install -y yelp-tools + mkdir help/dist-html + yelp-build html -o help/dist-html help/C + + - name: Upload artifact + uses: actions/upload-pages-artifact@v2.0.0 + with: + path: help/dist-html + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2.0.4 diff --git a/.github/workflows/flatpak-update.yaml b/.github/workflows/flatpak-update.yaml new file mode 100644 index 0000000..938f327 --- /dev/null +++ b/.github/workflows/flatpak-update.yaml @@ -0,0 +1,31 @@ +name: Flatpak dependency updates +on: + schedule: # for scheduling to work this file must be in the default branch + - cron: "0 0 * * *" # run every day + workflow_dispatch: # can be manually dispatched under GitHub's "Actions" tab + +jobs: + flatpak-external-data-checker: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4.1.1 + with: + # we can't push changes to a fork via a shallow update, we need to clone the full repo + fetch-depth: 0 + # 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 + # 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 + persist-credentials: false + + - uses: docker://ghcr.io/flathub/flatpak-external-data-checker:latest + env: + GIT_AUTHOR_NAME: EasyEffects Bot + GIT_COMMITTER_NAME: EasyEffects Bot + # email sets "EasyEffects Bot" user as commit author + GIT_AUTHOR_EMAIL: 110548574+easyeffects-bot@users.noreply.github.com + GIT_COMMITTER_EMAIL: 110548574+easyeffects-bot@users.noreply.github.com + EMAIL: 110548574+easyeffects-bot@users.noreply.github.com + GITHUB_TOKEN: ${{ secrets.EASYEFFECTS_BOT }} + with: + entrypoint: /bin/bash + 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" diff --git a/.github/workflows/translation-templates.yaml b/.github/workflows/translation-templates.yaml new file mode 100644 index 0000000..cb087b7 --- /dev/null +++ b/.github/workflows/translation-templates.yaml @@ -0,0 +1,70 @@ +on: + push: + branches: [ master ] + +name: Update translation templates +jobs: + update-templates: + name: Update translation templates + runs-on: ubuntu-22.04 + container: + image: archlinux + steps: + # install git first otherwise checkout will not give us an actual git repo + - name: Install git + run: pacman -Syu --noconfirm git + + - name: Checkout + uses: actions/checkout@v4.1.1 + + - name: Install deps + run: | + # install general build deps + pacman -Syu --noconfirm ninja gcc pkgconf python3 python-pip which + # install easyeffects deps + source ./PKGBUILD && pacman -Syu --noconfirm --needed --asdeps "${makedepends[@]}" "${depends[@]}" + + # workaround upstream permissions issue github.com/peter-evans/create-pull-request/issues/1170 + - name: Change git permissions + run: git config --global --add safe.directory "$GITHUB_WORKSPACE" + + - name: Run meson targets + run: | + meson build + cd build + ../util/update_translation_templates.sh + cd .. + + - name: Check for non-timestamp diff + run: | + # see https://stackoverflow.com/a/26622262 + DIFF_LINES=$(git diff --unified=0 | grep '^[+-]' | grep -Ev '^(--- a/|\+\+\+ b/)') + + if [[ $(echo "$DIFF_LINES" | grep "POT-Creation-Date:") != "$DIFF_LINES" ]]; then + echo "The calculated diff includes modifications besides just timestamp changes (POT-Creation-Date)." + echo "Letting the PR continue as this is a valid reason to open a PR." + else + echo "The calculated diff just has timestamp changes (POT-Creation-Date)." + echo "Restoring original files since this is not a valid reason to open a PR." + git restore . + fi + + echo "All diff lines count: $(echo "$DIFF_LINES" | wc -l)" + echo "Diff lines count where POT-Creation-Date was changed: $(echo "$DIFF_LINES" | grep "POT-Creation-Date:" | wc -l)" + + # TODO it would be ideal to refresh metainfo fully by copying release notes from the upcoming release in NEWS.yaml to metainfo, and then running the above update template script, + # however this is not possible without putting a dummy release in the metainfo with said upcoming release notes which would later have to be adjusted to the real release. + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5.0.2 + with: + title: Update translation templates + body: Ensure to merge all other Pull Requests before merging this. Conflicts here will automatically be resolved in case of changes in master. + commit-message: Update translation templates + # email sets "EasyEffects Bot" user as commit author + committer: EasyEffects Bot <110548574+easyeffects-bot@users.noreply.github.com> + author: EasyEffects Bot <110548574+easyeffects-bot@users.noreply.github.com> + branch: automatically-update-translation-templates + # the easyeffects_bot secret/token is only valid for a fork + # note the machine user (easyeffects-bot) must have already forked the repository where the action is running for this to work + push-to-fork: easyeffects-bot/easyeffects + token: ${{ secrets.EASYEFFECTS_BOT }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b76a348 --- /dev/null +++ b/.gitignore @@ -0,0 +1,65 @@ +__pycache__ +_build +build +build-dir +locale +gschemas.compiled +obj-*-linux-gnu +.vscode +node_modules +package-lock.json +compile_commands.json +.clangd +.cache + +# Compiled python modules. +*.pyc + +# binary language files +*.mo + +# patches +*.patch + +\.python-version + +# exclude debian building logs and other junk +debian/* +!debian/changelog +!debian/changelog.tpl +!debian/compat +!debian/control +!debian/copyright +!debian/docs +!debian/pycompat +!debian/rules +!debian/source/format +!debian/build-ppa.sh +!debian/*.install +!debian/*lintian-overrides +!debian/watch +!debian/patches +!debian/patches/*.patch +!debian/source + +/build-ppa.sh + +# Dolphin file manager creates the file .directory to save some folder-specific settings +*.directory + +*-build-deps*.deb + +.build-tools.cson + +ppastats +.autobuild + +# exclude flatpak build directories +build-dir +util/flatpak/repo +.flatpak +.flatpak-builder + +# explictly include flatpak patch/shared-modules directory which includes usually ignored patch files +!util/flatpak/patch/**/*.patch +!util/flatpak/shared-modules/linux-audio/**/*.patch diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c984c43 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,498 @@ +# Changelog + +## 7.1.1 +### 2023-10-27 + + +### Features: +- The spectrum has a new option that allows the dynamic vertical scale to be disabled. +- Improved compatibility with the latest LSP releases. + +### Bug fixes: +- Fixed an incorrect drawing of the impulse response file characteristics + +### Other notes: + + +## 7.1.0 +### 2023-09-07 + + +### Features: + +### Bug fixes: +- Fixed a small bug the prevented the noise reduction voice activity threshold from being properly initialized. + +### Other notes: + + +## 7.0.9 +### 2023-09-07 + + +### Features: +- Added a new control to the noise reduction plugin that allows the voice detection to be disabled. + +### Bug fixes: + +### Other notes: + + +## 7.0.8 +### 2023-08-29 + + +### Features: +- The Filter effect has been improved with new parameters since it has been ported from Calf Studio to Linux Studio Plugins. +- Noise reduction by RNNoise has been improved with the addition of Release and VAD Threshold controls. +- Noise reduction by RNNoise can now mix the original and denoised signals to avoid the output to sound too "dry". + +### Bug fixes: + +### Other notes: +- This release is intended to work with versions of Linux Studio Plugins equal or greater than "1.2.10". +- EasyEffects is now buildable also with libc++. + + +## 7.0.7 +### 2023-08-11 + + +### Features: +- The Expander from Linux Studio Plugins can be used in Easy Effects. +- The Equalizer bands now have an additional gain control that allows for more efficient input of values that are hard to set in the scale. More details at https://github.com/wwmm/easyeffects/issues/1383. +- Added the ability to select and load multiple files in the opening dialogs for presets, Convolver impulse responses and RNNoise models. + +### Bug fixes: +- Fixed the Solo button in the Equalizer band settings. + +### Other notes: +- Easy Effects folders under `/etc` have been deprecated and presets located there won't be loaded anymore. At the moment only local presets under `~/.config/easyeffects` are automatically loaded in the Presets Menu. In the future we will implement a new system to install, manage and import Community Presets. + + +## 7.0.6 +### 2023-07-28 + + +### Features: +- An "Experimental Features" section was added to our preferences window. +- The native window of the LSP plugins can be used. This is an experimental feature intended only for advanced users. So expect some bugs. +- Fractional semitone values can now be used in the Pitch Shift effect. + +### Bug fixes: +- The input/output device dropdown in our PipeWire tab is updated when the system default device changes and `Use Default` is enabled. This fixes issue https://github.com/wwmm/easyeffects/issues/1989. + +### Other notes: + + +## 7.0.5 +### 2023-06-11 + + +### Features: +- A new `Level Meter` plugin based on `libebur128` has been added. +- The Pitch plugin now uses the library SoundTouch instead of Rubberband. Hopefully some of the mysterious crashes that were happening with Rubbernand are not going to happen anymore. +- Improved compatibility with recent PipeWire versions. More information at https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3196 + +### Bug fixes: +- Active Equalizer filters are not set to `Bell` type anymore when the number of bands changes. + +### Other notes: +- Rabberband is not a dependency anymore since it has been replaced by SoundTouch. + + +## 7.0.4 +### 2023-05-01 + + +### Features: +- The presets menu now asks for confirmation before saving/deleting a preset file. + +### Bug fixes: +- The plugin reset should not make its controls innefective anymore. + +### Other notes: +- Speex is no longer incorrectly listed as a build dependency (speexdsp is still a build dependency) +- RNNoise is no longer an autodependency. It is now required by default, if not available it must be explicitly disabled with -Denable-rnnoise=false + + +## 7.0.3 +### 2023-04-06 + + +### Features: +- Updated translations. + +### Bug fixes: +- A small mistake was done in the last release. Making a new one to make sure people have the right branch in the package + + +## 7.0.2 +### 2023-04-06 + + +### Features: +- The Equalizer "sort bands" feature is now ordering bands on GSettings, so the result can be saved into presets. +- Improved performance when resetting keys. + +### Bug fixes: +- Fixed the "Large Empty Hall" preset selection in the Reverberation effect. +- Fixed some misuses of PipeWire's API that can potentially fix some random bugs some users are facing. + +### Other notes: +- As we are removing code deprecated by `GTK 4.10` the minimum GTK version has been increased. + + +## 7.0.1 +### 2023-02-26 + + +### Features: +- The spectrum plugin update rate was improved. Different sampling rates should lead to similar update frequencies visually. +- The update interval used by level meters and the spectrum can be customized by the user. +- The equalizer band gain slider value can be updated in larger steps. Fine grain control is still possible through the keyboard up/down keys. +- Small improvements to the echo canceller. + +### Bug fixes: +- The echo canceller probes were not being linked to the soundcard after the move to multiple filters intances. This should be fixed now. + + + +## 7.0.0 +### 2022-11-02 + + +### Features: +- It is now possible to add more than one filter instance to the effects pipeline. +- A new `Speech Processor` plugin based on the Speex library was added. Besides providing noise suppression it also can detect voice activity. It is a decent alternative to the cases whre the rnnoise library does not work well. +- Improved compatibility with Linux Studio Plugins `1.2.3`. +- GraphicEQ presets can be imported into the Equalizer effect. +- The application name has been changed to `Easy Effects` to adhere to the naming conventions of GNOME Human Interface Guidelines. +- The documentation has been updated. +- Improved presets autoloading. +- The Autogain silence threshold can now be configured by the user. +- Dry and wet controls added to the Stereo Tools effect. +- The echo canceller now has a residual noise suppression control also based on the Speex library. + +### Bug fixes: +- When the mouse was hovering over a chart the wrong value for the x axis coordinate was being shown. This regression is fixed. + +### Other notes: +- Because of the new multiple instances feature, the preset format has changed, but the old one is still compatible to be loaded. Anyway take in consideration that saving the current preset will always write it in the new format. + + +## 6.3.0 +### 2022-09-02 + + +### Features: +- Multiband Gate implementation has been migrated from CALF to Linux Studio Plugins. +- The preset autoloading code compatibility with bluez5 devices has been improved. +- Wet/dry controls were added for some plugins +- Effect interface is no longer loaded when the related lv2 plugin is not installed on the system. In its place a status message to the user is shown. +- The documentation has been updated +- Improved debug messages +- Updated translations + +### Bug fixes: + +### Other notes: + + +## 6.2.8 +### 2022-07-25 + + +### Features: +- Improved translations + +### Bug fixes: +- Fixed a bug where EasyEffects could crash when closing its window while effects were being applied. + +### Other notes: + + +## 6.2.7 +### 2022-07-18 + + +### Features: +- The bypass state can be saved to the preset file. The reasons why this was done can be seen at https://github.com/wwmm/easyeffects/issues/1039 +- The preset autoloading code compatibility with usb devices has been improved. +- A dialog is shown to the user when a preset fails to load or a preset/impulse file fails to be imported. +- The SideChain Gate plugin from `Linux Studio Plugins` is now used instead of the one from Calf Studio. + +### Bug fixes: +- EasyEffects should not crash anymore when the user locale is not properly configured. +- A workaround was implemented in our icon to deal with the lack of proper SVG support in QT. + +### Other notes: + + +## 6.2.6 +### 2022-06-22 + + +### Features: +- When effects are disable to an application we now set its target metadata to null. This will allow the media session + manager (wireplumber) to properly move the stream to a new device. +- A new configuration option was added. It allows EasyEffects to ignore streams whose purpose is to monitor sink + devices. This will help to fix some of problems our users were having when using OBS. +- The code that shows the stream sample format has been improved +- The rnnoise library is now optional. This should help package maintainers to build + a Debian package. See https://github.com/wwmm/easyeffects/issues/1000 for more information. +- Our logs now show the source code line where the messages are being printed +### Bug fixes: +- The "enable effects" checkbox in our window was not being updated when third party programs like pavucontrol + moved the stream away from our virtual devices. This should be fixed now. +- Fixed a crash that could happen when the maximum autogain history was changed. +- Avoid crashes when pw-mididump is running + + +## 6.2.5 +### 2022-04-30 + + +### Features: +- The interface of the pitch plugin was improved +- Our application icon is now compatible with desktops that uses QT +- Our blocklist code will use the `application.id` tag if the stream sets it +- In order to avoid problems with the mouse scroll the entries in the applications list shown in our `Players/Recorders` tab do not show a volume scale anymore. More details about the problem and the solution for it can be found on https://github.com/wwmm/easyeffects/issues/1211 and https://github.com/wwmm/easyeffects/issues/1427 +- When no application is available for display in the `Players/Recorders` a message will be shown to the user +- Many translation updates +### Bug fixes: +- Fixed a bug where EasyEffeects crashed when the number of points displayed in the spectrum was changed while our pipeline was active and the spectrum widget was visible +- The pipeline latency value displayed in our window could be wrong in some situations. This was fixed. + + +## 6.2.4 +### 2022-03-07 + + +### Features: +- There is a new setting allowing the user to select an inactivity timeout for the pipeline. When no client is playing to or recording from our devices the filters will be unlinked after the timeout is reached. This is done to make sure we do not waste CPU power processing silence. +- The autogain plugin now allows the user to select which of the three loudness are used to calculate the geometric mean. +- The autogain plugin now allows the maximum history to be set and does not use `libebur128` histogram mode anymore. This should avoid the cases where the `Integrated` loudness gets stuck forever in the same value. +- EasyEffects icon has been updated in a way that should make it visible in QT desktops. +### Bug fixes: +- The command line option that returns the global bypass state is working again. + + +## 6.2.3 +### 2022-01-29 + + +### Features: +- The crossfeed filter should deal better with PipeWire's dynamic latency switches. Jumps in volume level should not happen anymore in these situations. + +### Bug fixes: + +- Fixed a bug that prevented mono microphones from properly working with EasyEffects + + +## 6.2.2 +### 2022-01-27 + + +### Features: +- Support for the next PipeWire release `0.3.44` +- The autogain filter should deal better with PipeWire's dynamic latency switches. Jumps in volume level should not happen anymore in these situations. +- We added an option that allows the volume and mute state of our virtual devices to be reset when EasyEffects starts. It should help with the cases were our devices are muted by the audio server for unknown reasons. +- Better support for computer suspending. +- Updated translations + +### Bug fixes: + +- Fixed a bug where trying to create an autoloading profile without having presets caused the application to crash. + + +## 6.2.1 +### 2022-01-05 + + +### Bug fixes: +- Fixed a bug where setting a equalizer band `quality` to `zero` would lead to an application crash. + + +## 6.2.0 +### 2022-01-04 + + +### Features: +- LibAdwaita is used to create some parts of our window and for handling the switching between dark and light themes. +- The settings menu has been redesigned using LibAdwaita widgets. +- Equalizer APO preset import feature has been improved to apply not only the Bell filter, but also other supported ones (at the moment only the Bandpass filter is not available in LSP plugin). +- The `Reset All Settings` function in our menu should work in Flatpak now. +- We have a new option that allows the user to disable our menus `autohide`. This may help to workaround some bugs Popover menus currently have on gtk4. + +### Bug fixes: + +- More robust parsing to import APO presets saved with comma as thousands separator in central frequency band. + +### Other notes: + +- The fmt library is a new dependency https://github.com/fmtlib/fmt. At least while the c++ compilers do not implement its features. This is expected to happen in the next years. +- GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly. + + +## 6.1.5 +### 2021-11-17 + + +### Features: +- It is now possible to combine impulse responses in the Convolver interface. A new impulse file is generated and it should be visible in the impulse list. +- Improved `x axis` drawings in our plots. Now the number of labels is adjusted dynamically depending on our window width. +- The documentation has been updated reflecting the new EasyEffects features. Old references about PulseEffects have been removed. The documentation button has been added in the menu section. + +### Bug fixes: + +- When a spinbutton is filled with an out of range value, now it is updated with the lowest/highest value rather than resetting to the previous one. +- The application window now remembers the maximized state and restores it on the next opening event. + +### Other notes: + +- The `tbb` library is a new dependency https://www.threadingbuildingblocks.org + + +## 6.1.4 +### 2021-10-16 + + +### Features: +- The Limiter and the Multiband Compressor plugins can now use an optional external sidechain. +- The Autogain plugin now allows the user to select which Loudness is used as reference for the volume correction. +- The APO Profile Import feature of Equalizer plugin now parses the "Pre Amplification" parameter. +- Optional Cubic Volume can be enabled in General Settings. + +### Bug fixes: + +- The Spectrum plugin was supposed to enter passthrough whenever it was not visible, but this was happening only when our window was closed. +- Improved support for Assistive Technology. +- The probes used in some filters like the Compressor and the Limiter were not being relinked after changing the order of the plugins in the pipeline. It should be working now. + + +## 6.1.3 +### 2021-10-03 + + +### Features: +- PipeWire monitor streams are now excluded and removed from the applications list. + +### Bug fixes: + +- Hopefully crashes like the one reported at https://github.com/wwmm/easyeffects/issues/1172 are fixed. +- Prevented a case in which Spectrum was crashing. +- Pavucontrol is not added anymore to input applications list on systems with localization different than English. + + +## 6.1.2 +### 2021-09-20 + + +### Features: +- Improved compatibility with WirePlumber. This is needed to run on systems that decided to use it instead of the built-in PipeWire session manager. More information at https://github.com/wwmm/easyeffects/issues/1144. + + +## 6.1.1 +### 2021-09-17 + + +### Features: +- When trying to add an autoloading profile for a device already in the list its target preset will be updated. This way we can change the profile preset without having to remove and recreating it. +- The preset autoloading support implementation was redesigned again. It should work on more hardware now. For more information see https://github.com/wwmm/easyeffects/issues/1051. +- If the Limiter or the Maximizer are set in the last position of the plugin stack, new plugins are added at the second to last position in order to prevent hardware damage on eventually high output level. +- Removing an application from the blocklist, its previous enabled state is restored. + +### Bug fixes: + +- Sometimes when removing imported models from the noise reduction plugin the current used model was not properly updated. This should be fixed now. +- When editing presets files in an external editor, duplicated entries won't be shown in our presets menu. +- Now the blocklist is correctly set when switching presets. +- Now the status of the global bypass button is correctly updated when changing plugin stack. +- Missing icons on the system should not be shown inside the application info UI (if an application icon could not be shown even if you're sure it's correctly installed, please open an issue). +- Some icons not showing in Plasma DE with Breeze icon theme should appear now. + + +## 6.1.0 +### 2021-08-17 + + +### Features: +- Updated Chinese translation. +- Updated Italian translation. +- Added support for the compressor parameter `Boost Amount` +- The multiband compressor plugin now uses the stereo multiband compressor plugin from Linux Studio Plugins instead of the one from Calf Studio. +- The limiter plugin now uses the stereo limiter plugin from Linux Studio Plugins instead of the one from Calf Studio. +- LV2 filters now are spawned in PipeWire graph only when loaded the first time. Once loaded, they remain connected until EasyEffects shutdown. + +### Bug fixes: + +- The echo canceller sampling rate is now properly set. +- The threshold parameter from the deesser plugin is now saved to the preset file. +- Improved band splitting for crystalizer with new default intensity values. +- Depending on the input gain or output gain values the corresponding level bars could not be aligned. +- When adding more equalizer bands they are set to `Bell` instead of `Off`. +- Equalizer APO presets loading is now working properly on locales different than C. +- Improved linking management between port filter nodes in PipeWire. +- The crystalizer plugin signal amplification was too high before. It should be within more reasonable levels now. + + +## 6.0.3 +### 2021-07-16 + + +### Features: +- Improved the resampler used in the plugins that require one(like the rnnoise plugin) +- Updated translations + +### Bug fixes: + +- Setting multiple autoloading presets should be fine now +- Transient windows are now properly set for some plugins dialogs +- The convolver impulse response menu was improved to workaround an issue where the impulse files was not loaded when only one was available in the menu, see https://github.com/wwmm/easyeffects/issues/1011 +- Fixed a bug that could make the pitch plugin to not be properly initialized +- The saturation warning should not displace its neighbor widgets anymore +- Fixed the locale in a few widgets +- Fixed wrong alignment in a few widgets + + +## 6.0.2 +### 2021-07-11 + + +### Features: +- The Loudness plugin is being used again for the reasons described at https://github.com/wwmm/easyeffects/issues/820. This means that http://drobilla.net/plugins/mda/Loudness is an optional dependency again. + +### Bug fixes: + +- Fixed a segmentation fault that happened when optional dependencies were not installed + + +## 6.0.1 +### 2021-07-09 + + +### Features: +- Improved equalizer interface. +- Now we use a sidechain LSP compressor that allows the user to select and external source as the sidechain input. +- We now support the LSP compressor `Boosting` mode. +- When `split-channels` is enabled in the equalizer the imported APO preset will be applied only to the channel being visualized in the window. This will allow to import different presets for each channel instead of just settings the same values to both. + +### Bug fixes: + +- Fixed some segmentation faults that could happen when creating a preset autoloading profile or removing presets + + +## 6.0.0 +### 2021-07-07 + + +### Features: +- This is one of the biggest releases that I have ever made. The amount of changes is so big that it is hard to talk about everything here. +- The following are just the most import ones. People interested on the journey that got us here can take a look at https://github.com/wwmm/easyeffects/issues/904 and https://github.com/wwmm/easyeffects/issues/874. +- The application and its repository have been renamed from PulseEffects to `EasyEffects` +- gtkmm3 was replaced by gtkmm4 +- Gstreamer was replaced by native PipeWire filters. +- Many features were reimplemented from scratch. The preset autoloading is one example. Another remarkable change will be seen in the plugins selection menu. Now the user can show in the window only the plugins that he/she wants to use. +- Boost is no longer a dependency. The price paid for that was a little change in our presets structures. With some patience it is possible to edit PulseEffects presets in a text editor and make them work in EasyEffects. Hopefully someone will come up with a script for this in the feature. +- New libraries are being used and some of the librarires that were optional before are now required diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9cecc1d --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000..0ad5412 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,53 @@ +# This PKGBUILD is intented for our github workflows. For building your custom packages use the file PKGBUILD_AUR + +# Contributor: Wellington +# Maintainer: Upstream https://github.com/wwmm/easyeffects + +pkgname=easyeffects-git +pkgver=pkgvernotupdated +pkgrel=1 +pkgdesc='Audio Effects for PipeWire Applications' +arch=(x86_64) +url='https://github.com/wwmm/easyeffects' +license=('GPL3') +depends=('libadwaita' 'pipewire-pulse' 'lilv' 'libsigc++-3.0' 'libsamplerate' 'zita-convolver' + 'libebur128' 'rnnoise' 'soundtouch' 'libbs2b' 'nlohmann-json' 'tbb' 'fmt' 'gsl' 'speexdsp') +makedepends=('meson' 'itstool' 'appstream-glib' 'git' 'mold' 'ladspa') +optdepends=('calf: limiter, exciter, bass enhancer and others' + 'lsp-plugins: equalizer, compressor, delay, loudness' + 'zam-plugins: maximizer' + 'mda.lv2: bass loudness' + 'yelp: in-app help' + 'libdeep_filter_ladspa: noise remover') +conflicts=(easyeffects) +provides=(easyeffects) +replaces=('pulseeffects') +sha512sums=() + +pkgver() { + description=$(git describe --long | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g') + # if in github actions environment + if test -f "../GITHUB_COMMIT_DESC"; then + # remove last commit from git describe output (which may sometimes be a merge commit), + # and replace it with a human friendly version + description_short=$(echo "$description" | sed -r 's/(.*)\..*/\1/') + github_commit_desc_no_hyphen=$(sed 's/-/./g' ../GITHUB_COMMIT_DESC) + printf "%s" "${description_short}.${github_commit_desc_no_hyphen}" + else + printf "%s" "$description" + fi +} + +build() { + cd .. + # set werror to true if the CI file exists, otherwise false + # arch-meson sets --buildtype plain by default, so don't set -Dbuildtype=debug + arch-meson . build -Ddevel=true -Dwerror="$( test -f "./GITHUB_COMMIT_DESC" && echo "true" || echo "false")" + + ninja -C build +} + +package() { + cd .. + DESTDIR="${pkgdir}" ninja install -C build +} diff --git a/PKGBUILD_AUR b/PKGBUILD_AUR new file mode 100644 index 0000000..5cbebae --- /dev/null +++ b/PKGBUILD_AUR @@ -0,0 +1,39 @@ +# Maintainer: robertfoster +# Contributor: Bleuzen +# Contributor: Filipe Laíns (FFY00) +# Contributor: Wellington + +pkgname=easyeffects-git +pkgver=7.0.4.r136.gce892ece +pkgrel=1 +pkgdesc='Audio Effects for Pipewire applications' +arch=(x86_64 i686 arm armv6h armv7h aarch64) +url='https://github.com/wwmm/easyeffects' +license=('GPL3') +depends=('fftw' 'fmt' 'gsl' 'gtk4' 'libadwaita' 'libbs2b' 'libebur128' 'libsamplerate' 'libsigc++-3.0' 'libsndfile' + 'lilv' 'lv2' 'nlohmann-json' 'pipewire' 'rnnoise' 'soundtouch' 'speexdsp' 'tbb' 'zita-convolver') +makedepends=('appstream-glib' 'git' 'itstool' 'meson' 'ladspa') +optdepends=('calf: limiter, exciter, bass enhancer and others' + 'lsp-plugins: equalizer, compressor, delay, loudness' + 'zam-plugins: maximizer' + 'mda.lv2: bass loudness' + 'yelp: in-app help' + 'libdeep_filter_ladspa: noise remover') +conflicts=("${pkgname%%-git}") +provides=("${pkgname%%-git}") +source=("${pkgname%%-git}::git+${url}") +sha512sums=('SKIP') + +pkgver() { + cd "${pkgname%%-git}" + printf "%s" "$(git describe --long | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g')" +} + +build() { + arch-meson "${pkgname%%-git}" build + meson compile -C build +} + +package() { + DESTDIR="${pkgdir}" meson install -C build +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..9876461 --- /dev/null +++ b/README.md @@ -0,0 +1,181 @@ +

+ Easy Effects icon +
+ Easy Effects +

+ +

+ Audio effects for PipeWire applications +

+ +

+ + GitHub Sponsors donation button + + + Liberapay donation button + + + Patreon donation button + + + PayPal donation button + +

+ +
+ +

+ + Translation status + + + CI status + + + CircleCI status + +

+ +This application was formerly known as PulseEffects, but it was renamed to Easy Effects after it started to use GTK4 and +GStreamer usage was replaced by native PipeWire filters. + +![GitHub Light](images/easyeffects-light-screenshot-1.png#gh-light-mode-only) +![GitHub Light](images/easyeffects-light-screenshot-2.png#gh-light-mode-only) +![GitHub Light](images/easyeffects-light-screenshot-3.png#gh-light-mode-only) + +![GitHub Dark](images/easyeffects-dark-screenshot-1.png#gh-dark-mode-only) +![GitHub Dark](images/easyeffects-dark-screenshot-2.png#gh-dark-mode-only) +![GitHub Dark](images/easyeffects-dark-screenshot-3.png#gh-dark-mode-only) + +## Effects available + +- Auto gain +- Bass enhancer +- Bass loudness +- Compressor +- Convolver +- Crossfeed +- Crystalizer +- De-esser +- Delay +- Echo Canceller +- Equalizer +- Exciter +- Filter (low-pass, high-pass, band-pass and band-reject modes) +- Gate +- Limiter +- Loudness +- Maximizer +- Multiband compressor +- Multiband gate +- Noise reduction +- Pitch +- Reverberation +- Speech Processor +- Stereo tools + +The user has full control over the effects order. Just use the up/down arrows +next to the effect labels on the left side. + +Some packages do not provide all plugin packages by default. In case some effects are not available, ensure you have the following installed on your system: + +
+Dependencies + +Plugins needed for effects: + +- [Linux Studio plugins](http://lsp-plug.in/?page=home). Version 1.1.24 or higher. +- [Calf Studio plugins](https://calf-studio-gear.org/). Version 0.90.1 or higher. +- [libebur128](https://github.com/jiixyj/libebur128). For Auto Gain. +- [ZamAudio plugins](http://www.zamaudio.com/). For Maximizer. +- [zita-convolver](https://kokkinizita.linuxaudio.org/linuxaudio/). For Convolver. +- [soundtouch](https://www.surina.net/soundtouch/). For Pitch Shift. +- [RNNoise](https://github.com/xiph/rnnoise). For Noise Reduction. + +Other dependencies include: +- [libsamplerate](http://www.mega-nerd.com/SRC/index.html) +- [libsndfile](http://www.mega-nerd.com/libsndfile/) +- [libbs2b](https://sourceforge.net/projects/bs2b/files/libbs2b/) +- [fftw](https://fftw.org/) +- [speexdsp](https://www.speex.org/) +- [nlohmann json](https://github.com/nlohmann/json) +- [tbb](https://www.threadingbuildingblocks.org) + +
+ +## Donate + +You can help me to keep developing Easy Effects through donations. Any amount will be greatly appreciated :-) + +[GitHub Sponsors](https://github.com/sponsors/wwmm) +[Liberapay](https://liberapay.com/wwmm) +[Patreon](https://www.patreon.com/wellingtonwallace?fan_landing=true) +[PayPal](https://www.paypal.com/donate?hosted_button_id=RK723F4EKH2UE) + +## Installation + +### Distribution-specific packages + +Most up-to-date Linux distributions have an `easyeffects` package that can be installed with the distribution package manager. See [the wiki](https://github.com/wwmm/easyeffects/wiki/Package-Repositories) for a full list. + +### Flatpak + +Alternatively, click here to install via Flatpak: + +Download Easy Effects on Flathub + +Flatpak packages support most Linux distributions and are sandboxed. The Easy Effects Flatpak package also includes all available plugins. + +If your distribution does not yet include packages required to build Easy Effects, Flatpak is a convenient option. + +## Warning + +**Don't set** Easy Effects' virtual devices as your default audio input/output. +Easy Effects is designed assuming that your hardware stays as default. + +## Help + +A comprehensive set of help pages are included in the application itself, accessed via the hamburger menu in the top right. If the help pages are inaccessible ensure the [yelp](https://gitlab.gnome.org/GNOME/yelp) package is installed. + +The latest version of the help pages can also be [seen here](https://wwmm.github.io/easyeffects). + +## Changelog + +For information about changes between versions, take a look at our [changelog](https://github.com/wwmm/easyeffects/blob/master/CHANGELOG.md) + +## Frequently asked questions + +Take a look at our [FAQ](https://github.com/wwmm/easyeffects/wiki/FAQ) to see +if you are facing a known issue. + +## Community presets + +See the wiki: [Community presets](https://github.com/wwmm/easyeffects/wiki/Community-presets) + +This page also has instructions for converting PulseEffects presets to Easy Effects presets. + +## Command-line options + +See the wiki: [Command Line Options](https://github.com/wwmm/easyeffects/wiki/Command-Line-Options) + +## Reporting bugs + +See the wiki: [Reporting Bugs](https://github.com/wwmm/easyeffects/wiki/Reporting-bugs) + +## Translating Easy Effects + +See the wiki's [Translating Easy Effects](https://github.com/wwmm/easyeffects/wiki/Translating-EasyEffects) article for detailed instructions. + +## Installing from source + +To install from source, see the wiki's [Installing from Source](https://github.com/wwmm/easyeffects/wiki/Installation-from-Source) article for detailed instructions. + +## CI artifacts + +Flatpak bundles and Arch packages for testing and development purposes are built for PRs and pushes to master. +See the [installation instructions](https://github.com/wwmm/easyeffects/wiki/Package-Repositories#ci-artifacts). + +## License + +Easy Effects is licensed under GNU General Public License version 3 or later. See the [LICENSE file](https://github.com/wwmm/easyeffects/blob/master/LICENSE). diff --git a/data/com.github.wwmm.easyeffects-symbolic.svg b/data/com.github.wwmm.easyeffects-symbolic.svg new file mode 100644 index 0000000..35973b0 --- /dev/null +++ b/data/com.github.wwmm.easyeffects-symbolic.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/com.github.wwmm.easyeffects.Devel.svg b/data/com.github.wwmm.easyeffects.Devel.svg new file mode 100644 index 0000000..21da89f --- /dev/null +++ b/data/com.github.wwmm.easyeffects.Devel.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/com.github.wwmm.easyeffects.Source.svg b/data/com.github.wwmm.easyeffects.Source.svg new file mode 100644 index 0000000..4bb5b56 --- /dev/null +++ b/data/com.github.wwmm.easyeffects.Source.svg @@ -0,0 +1,906 @@ + + + Adwaita Icon Template + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Adwaita Icon Template + + + + + + + + + + + + + + + Hicolor + Symbolic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + diff --git a/data/com.github.wwmm.easyeffects.desktop.in b/data/com.github.wwmm.easyeffects.desktop.in new file mode 100644 index 0000000..6ad0315 --- /dev/null +++ b/data/com.github.wwmm.easyeffects.desktop.in @@ -0,0 +1,14 @@ +[Desktop Entry] +# Translators: This is a variable for the application name, don't translate! +Name=@APP_NAME@ +GenericName=Equalizer, Compressor and Other Audio Effects +Comment=Audio Effects for PipeWire Applications +Keywords=limiter;compressor;reverberation;equalizer;autovolume; +Categories=GTK;AudioVideo;Audio; +Exec=easyeffects +Icon=@APP_ID@ +StartupNotify=true +DBusActivatable=true +X-GNOME-UsesNotifications=true +Terminal=false +Type=Application diff --git a/data/com.github.wwmm.easyeffects.metainfo.xml.in b/data/com.github.wwmm.easyeffects.metainfo.xml.in new file mode 100644 index 0000000..6d8986f --- /dev/null +++ b/data/com.github.wwmm.easyeffects.metainfo.xml.in @@ -0,0 +1,494 @@ + + + @APP_ID@.desktop + Easy Effects + Audio Effects for PipeWire Applications + CC0-1.0 + GPL-3.0-or-later + Wellington Wallace + +

Easy Effects is an advanced audio manipulation tool. It includes an equalizer, limiter, compressor and a reverberation tool, just to mention a few. To complement this there is also a built in spectrum analyzer.

+

Easy Effects is the successor to PulseEffects. Easy Effects only supports PipeWire's audio server. PulseAudio users should instead use PulseEffects.

+

Because Easy Effects uses the default PipeWire sound server it will work with most, if not all, applications you use. All supported applications are presented in the main window, where each can be enabled individually.

+

Besides manipulating sound output, Easy Effects is able to apply effects to an input device, such as a microphone. This is, for example, useful in audio recording, but it also works well during voice conversations.

+

When Easy Effects is launched it will conveniently remember the configuration used in the last session. It is also possible to save all the current settings as profiles.

+
+ + offline-only + + + 900 + + + pointing + keyboard + console + touch + + @APP_ID@.desktop + https://github.com/wwmm/easyeffects + https://github.com/wwmm/easyeffects/issues + https://github.com/wwmm/easyeffects/wiki/FAQ + https://wwmm.github.io/easyeffects + https://github.com/wwmm/easyeffects#donate + https://github.com/wwmm/easyeffects/wiki/Translating-EasyEffects + https://github.com/wwmm/easyeffects + https://github.com/wwmm/easyeffects/wiki/Installation-from-Source + Easy Effects + + + The main page showing two audio output apps + https://raw.githubusercontent.com/wwmm/easyeffects/master/images/easyeffects-light-screenshot-1.png + + + The bass enhancer page showing audio controls + https://raw.githubusercontent.com/wwmm/easyeffects/master/images/easyeffects-light-screenshot-2.png + + + The convolver page showing audio controls + https://raw.githubusercontent.com/wwmm/easyeffects/master/images/easyeffects-light-screenshot-3.png + + + + + +
    +
  • Features:
  • +
  • The spectrum has a new option that allows the dynamic vertical scale to be disabled.
  • +
  • Improved compatibility with the latest LSP releases.
  • +
  • Bug fixes:
  • +
  • Fixed an incorrect drawing of the impulse response file characteristics
  • +
  • Other notes:
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Bug fixes:
  • +
  • Fixed a small bug the prevented the noise reduction voice activity threshold from being properly initialized.
  • +
  • Other notes:
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Added a new control to the noise reduction plugin that allows the voice detection to be disabled.
  • +
  • Bug fixes:
  • +
  • Other notes:
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The Filter effect has been improved with new parameters since it has been ported from Calf Studio to Linux Studio Plugins.
  • +
  • Noise reduction by RNNoise has been improved with the addition of Release and VAD Threshold controls.
  • +
  • Noise reduction by RNNoise can now mix the original and denoised signals to avoid the output to sound too "dry".
  • +
  • Bug fixes:
  • +
  • Other notes:
  • +
  • This release is intended to work with versions of Linux Studio Plugins equal or greater than "1.2.10".
  • +
  • EasyEffects is now buildable also with libc++.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The Expander from Linux Studio Plugins can be used in Easy Effects.
  • +
  • The Equalizer bands now have an additional gain control that allows for more efficient input of values that are hard to set in the scale. More details at issue 1383.
  • +
  • Added the ability to select and load multiple files in the opening dialogs for presets, Convolver impulse responses and RNNoise models.
  • +
  • Bug fixes:
  • +
  • Fixed the Solo button in the Equalizer band settings.
  • +
  • Other notes:
  • +
  • Easy Effects folders under /etc have been deprecated and presets located there won't be loaded anymore. At the moment only local presets under ~/.config/easyeffects are automatically loaded in the Presets Menu. In the future we will implement a new system to install, manage and import Community Presets.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • An "Experimental Features" section was added to our preferences window.
  • +
  • The native window of the LSP plugins can be used. This is an experimental feature intended only for advanced users. So expect some bugs.
  • +
  • Fractional semitone values can now be used in the Pitch Shift effect.
  • +
  • Bug fixes:
  • +
  • The input/output device dropdown in our PipeWire tab is updated when the system default device changes and Use Default is enabled. This fixes issue issue 1989.
  • +
  • Other notes:
  • +
+
+
+ + +
    +
  • Features:
  • +
  • A new Level Meter plugin based on libebur128 has been added.
  • +
  • The Pitch plugin now uses the library SoundTouch instead of Rubberband. Hopefully some of the mysterious crashes that were happening with Rubbernand are not going to happen anymore.
  • +
  • Improved compatibility with recent PipeWire versions. More information at
  • +
  • Bug fixes:
  • +
  • Active Equalizer filters are not set to Bell type anymore when the number of bands changes.
  • +
  • Other notes:
  • +
  • Rabberband is not a dependency anymore since it has been replaced by SoundTouch.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The presets menu now asks for confirmation before saving/deleting a preset file.
  • +
  • Bug fixes:
  • +
  • The plugin reset should not make its controls innefective anymore.
  • +
  • Other notes:
  • +
  • Speex is no longer incorrectly listed as a build dependency (speexdsp is still a build dependency)
  • +
  • RNNoise is no longer an autodependency. It is now required by default, if not available it must be explicitly disabled with -Denable-rnnoise=false
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Updated translations.
  • +
  • Bug fixes:
  • +
  • A small mistake was done in the last release. Making a new one to make sure people have the right branch in the package
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The Equalizer "sort bands" feature is now ordering bands on GSettings, so the result can be saved into presets.
  • +
  • Improved performance when resetting keys.
  • +
  • Bug fixes:
  • +
  • Fixed the "Large Empty Hall" preset selection in the Reverberation effect.
  • +
  • Fixed some misuses of PipeWire's API that can potentially fix some random bugs some users are facing.
  • +
  • Other notes:
  • +
  • As we are removing code deprecated by GTK 4.10 the minimum GTK version has been increased.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The spectrum plugin update rate was improved. Different sampling rates should lead to similar update frequencies visually.
  • +
  • The update interval used by level meters and the spectrum can be customized by the user.
  • +
  • The equalizer band gain slider value can be updated in larger steps. Fine grain control is still possible through the keyboard up/down keys.
  • +
  • Small improvements to the echo canceller.
  • +
  • Bug fixes:
  • +
  • The echo canceller probes were not being linked to the soundcard after the move to multiple filters intances. This should be fixed now.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • It is now possible to add more than one filter instance to the effects pipeline.
  • +
  • A new Speech Processor plugin based on the Speex library was added. Besides providing noise suppression it also can detect voice activity. It is a decent alternative to the cases whre the rnnoise library does not work well.
  • +
  • Improved compatibility with Linux Studio Plugins 1.2.3.
  • +
  • GraphicEQ presets can be imported into the Equalizer effect.
  • +
  • The application name has been changed to Easy Effects to adhere to the naming conventions of GNOME Human Interface Guidelines.
  • +
  • The documentation has been updated.
  • +
  • Improved presets autoloading.
  • +
  • The Autogain silence threshold can now be configured by the user.
  • +
  • Dry and wet controls added to the Stereo Tools effect.
  • +
  • The echo canceller now has a residual noise suppression control also based on the Speex library.
  • +
  • Bug fixes:
  • +
  • When the mouse was hovering over a chart the wrong value for the x axis coordinate was being shown. This regression is fixed.
  • +
  • Other notes:
  • +
  • Because of the new multiple instances feature, the preset format has changed, but the old one is still compatible to be loaded. Anyway take in consideration that saving the current preset will always write it in the new format.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Multiband Gate implementation has been migrated from CALF to Linux Studio Plugins.
  • +
  • The preset autoloading code compatibility with bluez5 devices has been improved.
  • +
  • Wet/dry controls were added for some plugins
  • +
  • Effect interface is no longer loaded when the related lv2 plugin is not installed on the system. In its place a status message to the user is shown.
  • +
  • The documentation has been updated
  • +
  • Improved debug messages
  • +
  • Updated translations
  • +
  • Bug fixes:
  • +
  • Other notes:
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Improved translations
  • +
  • Bug fixes:
  • +
  • Fixed a bug where EasyEffects could crash when closing its window while effects were being applied.
  • +
  • Other notes:
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The bypass state can be saved to the preset file. The reasons why this was done can be seen at issue 1039
  • +
  • The preset autoloading code compatibility with usb devices has been improved.
  • +
  • A dialog is shown to the user when a preset fails to load or a preset/impulse file fails to be imported.
  • +
  • The SideChain Gate plugin from Linux Studio Plugins is now used instead of the one from Calf Studio.
  • +
  • Bug fixes:
  • +
  • EasyEffects should not crash anymore when the user locale is not properly configured.
  • +
  • A workaround was implemented in our icon to deal with the lack of proper SVG support in QT.
  • +
  • Other notes:
  • +
+
+
+ + +
    +
  • Features:
  • +
  • When effects are disable to an application we now set its target metadata to null. This will allow the media session manager (wireplumber) to properly move the stream to a new device.
  • +
  • A new configuration option was added. It allows EasyEffects to ignore streams whose purpose is to monitor sink devices. This will help to fix some of problems our users were having when using OBS.
  • +
  • The code that shows the stream sample format has been improved
  • +
  • The rnnoise library is now optional. This should help package maintainers to build a Debian package. See issue 1000 for more information.
  • +
  • Our logs now show the source code line where the messages are being printed
  • +
  • Bug fixes:
  • +
  • The "enable effects" checkbox in our window was not being updated when third party programs like pavucontrol moved the stream away from our virtual devices. This should be fixed now.
  • +
  • Fixed a crash that could happen when the maximum autogain history was changed.
  • +
  • Avoid crashes when pw-mididump is running
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The interface of the pitch plugin was improved
  • +
  • Our application icon is now compatible with desktops that uses QT
  • +
  • Our blocklist code will use the application.id tag if the stream sets it
  • +
  • In order to avoid problems with the mouse scroll the entries in the applications list shown in our Players/Recorders tab do not show a volume scale anymore. More details about the problem and the solution for it can be found on issue 1211 and issue 1427
  • +
  • When no application is available for display in the Players/Recorders a message will be shown to the user
  • +
  • Many translation updates
  • +
  • Bug fixes:
  • +
  • Fixed a bug where EasyEffeects crashed when the number of points displayed in the spectrum was changed while our pipeline was active and the spectrum widget was visible
  • +
  • The pipeline latency value displayed in our window could be wrong in some situations. This was fixed.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • There is a new setting allowing the user to select an inactivity timeout for the pipeline. When no client is playing to or recording from our devices the filters will be unlinked after the timeout is reached. This is done to make sure we do not waste CPU power processing silence.
  • +
  • The autogain plugin now allows the user to select which of the three loudness are used to calculate the geometric mean.
  • +
  • The autogain plugin now allows the maximum history to be set and does not use libebur128 histogram mode anymore. This should avoid the cases where the Integrated loudness gets stuck forever in the same value.
  • +
  • EasyEffects icon has been updated in a way that should make it visible in QT desktops.
  • +
  • Bug fixes:
  • +
  • The command line option that returns the global bypass state is working again.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The crossfeed filter should deal better with PipeWire's dynamic latency switches. Jumps in volume level should not happen anymore in these situations.
  • +
  • Bug fixes:
  • +
  • Fixed a bug that prevented mono microphones from properly working with EasyEffects
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Support for the next PipeWire release 0.3.44
  • +
  • The autogain filter should deal better with PipeWire's dynamic latency switches. Jumps in volume level should not happen anymore in these situations.
  • +
  • We added an option that allows the volume and mute state of our virtual devices to be reset when EasyEffects starts. It should help with the cases were our devices are muted by the audio server for unknown reasons.
  • +
  • Better support for computer suspending.
  • +
  • Updated translations
  • +
  • Bug fixes:
  • +
  • Fixed a bug where trying to create an autoloading profile without having presets caused the application to crash.
  • +
+
+
+ + +
    +
  • Bug fixes:
  • +
  • Fixed a bug where setting a equalizer band quality to zero would lead to an application crash.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • LibAdwaita is used to create some parts of our window and for handling the switching between dark and light themes.
  • +
  • The settings menu has been redesigned using LibAdwaita widgets.
  • +
  • Equalizer APO preset import feature has been improved to apply not only the Bell filter, but also other supported ones (at the moment only the Bandpass filter is not available in LSP plugin).
  • +
  • The Reset All Settings function in our menu should work in Flatpak now.
  • +
  • We have a new option that allows the user to disable our menus autohide. This may help to workaround some bugs Popover menus currently have on gtk4.
  • +
  • Bug fixes:
  • +
  • More robust parsing to import APO presets saved with comma as thousands separator in central frequency band.
  • +
  • Other notes:
  • +
  • The fmt library is a new dependency At least while the c++ compilers do not implement its features. This is expected to happen in the next years.
  • +
  • GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • It is now possible to combine impulse responses in the Convolver interface. A new impulse file is generated and it should be visible in the impulse list.
  • +
  • Improved x axis drawings in our plots. Now the number of labels is adjusted dynamically depending on our window width.
  • +
  • The documentation has been updated reflecting the new EasyEffects features. Old references about PulseEffects have been removed. The documentation button has been added in the menu section.
  • +
  • Bug fixes:
  • +
  • When a spinbutton is filled with an out of range value, now it is updated with the lowest/highest value rather than resetting to the previous one.
  • +
  • The application window now remembers the maximized state and restores it on the next opening event.
  • +
  • Other notes:
  • +
  • The tbb library is a new dependency
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The Limiter and the Multiband Compressor plugins can now use an optional external sidechain.
  • +
  • The Autogain plugin now allows the user to select which Loudness is used as reference for the volume correction.
  • +
  • The APO Profile Import feature of Equalizer plugin now parses the "Pre Amplification" parameter.
  • +
  • Optional Cubic Volume can be enabled in General Settings.
  • +
  • Bug fixes:
  • +
  • The Spectrum plugin was supposed to enter passthrough whenever it was not visible, but this was happening only when our window was closed.
  • +
  • Improved support for Assistive Technology.
  • +
  • The probes used in some filters like the Compressor and the Limiter were not being relinked after changing the order of the plugins in the pipeline. It should be working now.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • PipeWire monitor streams are now excluded and removed from the applications list.
  • +
  • Bug fixes:
  • +
  • Hopefully crashes like the one reported at issue 1172 are fixed.
  • +
  • Prevented a case in which Spectrum was crashing.
  • +
  • Pavucontrol is not added anymore to input applications list on systems with localization different than English.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Improved compatibility with WirePlumber. This is needed to run on systems that decided to use it instead of the built-in PipeWire session manager. More information at issue 1144.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • When trying to add an autoloading profile for a device already in the list its target preset will be updated. This way we can change the profile preset without having to remove and recreating it.
  • +
  • The preset autoloading support implementation was redesigned again. It should work on more hardware now. For more information see issue 1051.
  • +
  • If the Limiter or the Maximizer are set in the last position of the plugin stack, new plugins are added at the second to last position in order to prevent hardware damage on eventually high output level.
  • +
  • Removing an application from the blocklist, its previous enabled state is restored.
  • +
  • Bug fixes:
  • +
  • Sometimes when removing imported models from the noise reduction plugin the current used model was not properly updated. This should be fixed now.
  • +
  • When editing presets files in an external editor, duplicated entries won't be shown in our presets menu.
  • +
  • Now the blocklist is correctly set when switching presets.
  • +
  • Now the status of the global bypass button is correctly updated when changing plugin stack.
  • +
  • Missing icons on the system should not be shown inside the application info UI (if an application icon could not be shown even if you're sure it's correctly installed, please open an issue).
  • +
  • Some icons not showing in Plasma DE with Breeze icon theme should appear now.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Updated Chinese translation.
  • +
  • Updated Italian translation.
  • +
  • Added support for the compressor parameter Boost Amount
  • +
  • The multiband compressor plugin now uses the stereo multiband compressor plugin from Linux Studio Plugins instead of the one from Calf Studio.
  • +
  • The limiter plugin now uses the stereo limiter plugin from Linux Studio Plugins instead of the one from Calf Studio.
  • +
  • LV2 filters now are spawned in PipeWire graph only when loaded the first time. Once loaded, they remain connected until EasyEffects shutdown.
  • +
  • Bug fixes:
  • +
  • The echo canceller sampling rate is now properly set.
  • +
  • The threshold parameter from the deesser plugin is now saved to the preset file.
  • +
  • Improved band splitting for crystalizer with new default intensity values.
  • +
  • Depending on the input gain or output gain values the corresponding level bars could not be aligned.
  • +
  • When adding more equalizer bands they are set to Bell instead of Off.
  • +
  • Equalizer APO presets loading is now working properly on locales different than C.
  • +
  • Improved linking management between port filter nodes in PipeWire.
  • +
  • The crystalizer plugin signal amplification was too high before. It should be within more reasonable levels now.
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Improved the resampler used in the plugins that require one(like the rnnoise plugin)
  • +
  • Updated translations
  • +
  • Bug fixes:
  • +
  • Setting multiple autoloading presets should be fine now
  • +
  • Transient windows are now properly set for some plugins dialogs
  • +
  • The convolver impulse response menu was improved to workaround an issue where the impulse files was not loaded when only one was available in the menu, see issue 1011
  • +
  • Fixed a bug that could make the pitch plugin to not be properly initialized
  • +
  • The saturation warning should not displace its neighbor widgets anymore
  • +
  • Fixed the locale in a few widgets
  • +
  • Fixed wrong alignment in a few widgets
  • +
+
+
+ + +
    +
  • Features:
  • +
  • The Loudness plugin is being used again for the reasons described at issue 820. This means that is an optional dependency again.
  • +
  • Bug fixes:
  • +
  • Fixed a segmentation fault that happened when optional dependencies were not installed
  • +
+
+
+ + +
    +
  • Features:
  • +
  • Improved equalizer interface.
  • +
  • Now we use a sidechain LSP compressor that allows the user to select and external source as the sidechain input.
  • +
  • We now support the LSP compressor Boosting mode.
  • +
  • When split-channels is enabled in the equalizer the imported APO preset will be applied only to the channel being visualized in the window. This will allow to import different presets for each channel instead of just settings the same values to both.
  • +
  • Bug fixes:
  • +
  • Fixed some segmentation faults that could happen when creating a preset autoloading profile or removing presets
  • +
+
+
+ + +
    +
  • Features:
  • +
  • This is one of the biggest releases that I have ever made. The amount of changes is so big that it is hard to talk about everything here.
  • +
  • The following are just the most import ones. People interested on the journey that got us here can take a look at issue 904 and issue 874.
  • +
  • The application and its repository have been renamed from PulseEffects to EasyEffects
  • +
  • gtkmm3 was replaced by gtkmm4
  • +
  • Gstreamer was replaced by native PipeWire filters.
  • +
  • Many features were reimplemented from scratch. The preset autoloading is one example. Another remarkable change will be seen in the plugins selection menu. Now the user can show in the window only the plugins that he/she wants to use.
  • +
  • Boost is no longer a dependency. The price paid for that was a little change in our presets structures. With some patience it is possible to edit PulseEffects presets in a text editor and make them work in EasyEffects. Hopefully someone will come up with a script for this in the feature.
  • +
  • New libraries are being used and some of the librarires that were optional before are now required
  • +
+
+
+
+ +
diff --git a/data/com.github.wwmm.easyeffects.service.in b/data/com.github.wwmm.easyeffects.service.in new file mode 100644 index 0000000..44b6d82 --- /dev/null +++ b/data/com.github.wwmm.easyeffects.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=@APP_ID@ +Exec=@BIN_DIR@/easyeffects --gapplication-service diff --git a/data/com.github.wwmm.easyeffects.svg b/data/com.github.wwmm.easyeffects.svg new file mode 100644 index 0000000..8a52239 --- /dev/null +++ b/data/com.github.wwmm.easyeffects.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/easyeffects.gresource.xml b/data/easyeffects.gresource.xml new file mode 100644 index 0000000..ef04b5e --- /dev/null +++ b/data/easyeffects.gresource.xml @@ -0,0 +1,69 @@ + + + + ui/custom.css + ui/application_window.ui + ui/app_info.ui + ui/apps_box.ui + ui/autogain.ui + ui/autoload_row.ui + ui/bass_enhancer.ui + ui/bass_loudness.ui + ui/blocklist_menu.ui + ui/chart.ui + ui/compressor.ui + ui/convolver.ui + ui/convolver_menu_impulses.ui + ui/convolver_menu_combine.ui + ui/crossfeed.ui + ui/crystalizer.ui + ui/crystalizer_band.ui + ui/deepfilternet.ui + ui/deesser.ui + ui/delay.ui + ui/echo_canceller.ui + ui/effects_box.ui + ui/equalizer.ui + ui/equalizer_band.ui + ui/exciter.ui + ui/expander.ui + ui/factory_clients_listview.ui + ui/factory_node_dropdown.ui + ui/factory_input_device_dropdown.ui + ui/factory_modules_listview.ui + ui/factory_output_device_dropdown.ui + ui/factory_presets_dropdown.ui + ui/factory_rnnoise_listview.ui + ui/filter.ui + ui/gate.ui + ui/level_meter.ui + ui/limiter.ui + ui/loudness.ui + ui/maximizer.ui + ui/multiband_compressor.ui + ui/multiband_compressor_band.ui + ui/multiband_gate.ui + ui/multiband_gate_band.ui + ui/pipe_manager_box.ui + ui/pitch.ui + ui/plugin_row.ui + ui/plugins_box.ui + ui/plugins_menu.ui + ui/preferences_general.ui + ui/preferences_spectrum.ui + ui/preferences_window.ui + ui/preset_row.ui + ui/presets_menu.ui + ui/reverb.ui + ui/rnnoise.ui + ui/shortcuts.ui + ui/speex.ui + ui/stereo_tools.ui + icons/scalable/emblems/ee-arrow-down-symbolic.svg + icons/scalable/emblems/ee-spectrum-symbolic.svg + icons/scalable/emblems/ee-drag-handle-symbolic.svg + icons/scalable/emblems/ee-arrows-right-symbolic.svg + icons/scalable/emblems/ee-bypass-symbolic.svg + icons/scalable/emblems/ee-applications-multimedia-symbolic.svg + + diff --git a/data/icons/scalable/emblems/credits.txt b/data/icons/scalable/emblems/credits.txt new file mode 100644 index 0000000..6b8854f --- /dev/null +++ b/data/icons/scalable/emblems/credits.txt @@ -0,0 +1,13 @@ +- Icons I have made: + +ee-spectrum-symbolic + +- Icons I did not make: + +ee-arrow-down-symbolic is the icon "folder-download-symbolic" from the Adwaita package +ee-square-symbolic is the icon "media-playback-stop-symbolic" from the Adwaita package +ee-plugins-symbolic is the icon "application-x-addon-symbolic" from the Adwaita package +ee-drag-handle-symbolic is the icon "list-drag-handle-symbolic" from the Adwaita package +ee-arrows-right-symbolic is the icon "media-playlist-consecutive-symbolic" from the Adwaita package +ee-bypass-symbolic is the icon "system-log-out-symbolic" from the Adwaita package +ee-applications-multimedia-symbolic is the icon "applications-multimedia-symbolic" from the Adwaita package diff --git a/data/icons/scalable/emblems/ee-applications-multimedia-symbolic.svg b/data/icons/scalable/emblems/ee-applications-multimedia-symbolic.svg new file mode 100644 index 0000000..3169f6f --- /dev/null +++ b/data/icons/scalable/emblems/ee-applications-multimedia-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/icons/scalable/emblems/ee-arrow-down-symbolic.svg b/data/icons/scalable/emblems/ee-arrow-down-symbolic.svg new file mode 100644 index 0000000..15dea0d --- /dev/null +++ b/data/icons/scalable/emblems/ee-arrow-down-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/icons/scalable/emblems/ee-arrows-right-symbolic.svg b/data/icons/scalable/emblems/ee-arrows-right-symbolic.svg new file mode 100644 index 0000000..5eebc2c --- /dev/null +++ b/data/icons/scalable/emblems/ee-arrows-right-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/icons/scalable/emblems/ee-bypass-symbolic.svg b/data/icons/scalable/emblems/ee-bypass-symbolic.svg new file mode 100644 index 0000000..0323d19 --- /dev/null +++ b/data/icons/scalable/emblems/ee-bypass-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/data/icons/scalable/emblems/ee-drag-handle-symbolic.svg b/data/icons/scalable/emblems/ee-drag-handle-symbolic.svg new file mode 100644 index 0000000..0f59408 --- /dev/null +++ b/data/icons/scalable/emblems/ee-drag-handle-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/icons/scalable/emblems/ee-spectrum-symbolic.svg b/data/icons/scalable/emblems/ee-spectrum-symbolic.svg new file mode 100644 index 0000000..5385dde --- /dev/null +++ b/data/icons/scalable/emblems/ee-spectrum-symbolic.svg @@ -0,0 +1,54 @@ + + + + + + + + diff --git a/data/meson.build b/data/meson.build new file mode 100644 index 0000000..711f08e --- /dev/null +++ b/data/meson.build @@ -0,0 +1,119 @@ +schemadir = join_paths(datadir, 'glib-2.0', 'schemas') + +install_data([ + 'schemas/com.github.wwmm.easyeffects.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.autogain.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.bassenhancer.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.bassloudness.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.compressor.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.convolver.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.crossfeed.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.crystalizer.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.deepfilternet.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.deesser.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.delay.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.echo_canceller.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.equalizer.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.equalizer.channel.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.exciter.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.expander.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.filter.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.gate.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.levelmeter.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.limiter.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.loudness.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.maximizer.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.multibandcompressor.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.multibandgate.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.outputlevel.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.pitch.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.reverb.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.rnnoise.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.spectrum.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.speex.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.streamoutputs.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.stereotools.gschema.xml', + 'schemas/com.github.wwmm.easyeffects.streaminputs.gschema.xml' +], install_dir: schemadir) + +if get_option('enable-libportal') + install_data([ + 'schemas/com.github.wwmm.easyeffects.libportal.gschema.xml' +], install_dir: schemadir) +endif + +data_conf = configuration_data() + +data_conf.set('BIN_DIR', bindir) + +data_conf.set('APP_ID', app_id) +data_conf.set('APP_NAME', 'Easy Effects' + name_suffix) + +metainfo_file = i18n_mod.merge_file( + input: configure_file( + input: files('com.github.wwmm.easyeffects.metainfo.xml.in'), + output: 'com.github.wwmm.easyeffects.metainfo.xml.in', + configuration: data_conf + ), + output: '@0@.metainfo.xml'.format(app_id), + po_dir: '../po/news', + install: true, + install_dir: join_paths(datadir, 'metainfo') +) + +# Validate merged AppStream metainfo file +appstream_util = find_program('appstream-util', required: false) +if appstream_util.found() + test('Validate appstream file', appstream_util, + args: ['validate-relax', '--nonet', metainfo_file] + ) +endif + +desktop_file = i18n_mod.merge_file( + input: configure_file( + input: files('com.github.wwmm.easyeffects.desktop.in'), + output: 'com.github.wwmm.easyeffects.desktop.in', + configuration: data_conf + ), + output: '@0@.desktop'.format(app_id), + type: 'desktop', + po_dir: '../po', + install: true, + install_dir: join_paths(datadir, 'applications') +) + +# Validate merged desktop entry file +desktop_utils = find_program('desktop-file-validate', required: false) +if desktop_utils.found() + test('Validate desktop file', desktop_utils, + args: [desktop_file] + ) +endif + +icondir = join_paths(datadir, 'icons', 'hicolor') +install_data('@0@.svg'.format(app_id), + install_dir: join_paths(icondir, 'scalable', 'apps'), + rename: '@0@.svg'.format(app_id) +) + +install_data('com.github.wwmm.easyeffects-symbolic.svg', + install_dir: join_paths(icondir, 'symbolic', 'apps'), + rename: '@0@-symbolic.svg'.format(app_id) +) + + +gresources = gnome_mod.compile_resources( + 'easyeffects-resources', + 'easyeffects.gresource.xml', + c_name: meson.project_name() +) + + + +configure_file( + input: 'com.github.wwmm.easyeffects.service.in', + output: '@0@.service'.format(app_id), + configuration: data_conf, + install: true, + install_dir: join_paths(get_option('datadir'), 'dbus-1', 'services'), +) diff --git a/data/presets/gstreamer_ballad.json b/data/presets/gstreamer_ballad.json new file mode 100644 index 0000000..236fd04 --- /dev/null +++ b/data/presets/gstreamer_ballad.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "4", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "3.75", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "2.5", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "0", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "-4", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "-6", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "-3", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "0", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "2.5", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "9", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_classic.json b/data/presets/gstreamer_classic.json new file mode 100644 index 0000000..ec91872 --- /dev/null +++ b/data/presets/gstreamer_classic.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "0", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "0", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "0", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "0", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "0", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "0", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "-6", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "-7", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "-7", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "-9.5", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_club.json b/data/presets/gstreamer_club.json new file mode 100644 index 0000000..532cbdd --- /dev/null +++ b/data/presets/gstreamer_club.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "0", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "0", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "8", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "6", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "5.5", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "5", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "3", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "0", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "0", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "0", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_dance.json b/data/presets/gstreamer_dance.json new file mode 100644 index 0000000..4f260f5 --- /dev/null +++ b/data/presets/gstreamer_dance.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "9.6", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "7", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "2.5", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "0", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "0", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "-5.6", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "-7", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "-7", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "0", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "0", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_more_bass.json b/data/presets/gstreamer_more_bass.json new file mode 100644 index 0000000..e191966 --- /dev/null +++ b/data/presets/gstreamer_more_bass.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "-8", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "10", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "10", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "5.5", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "1.5", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "-4", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "-8", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "-10", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "-11", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "-11", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_more_bass_and_treble.json b/data/presets/gstreamer_more_bass_and_treble.json new file mode 100644 index 0000000..7e82eb8 --- /dev/null +++ b/data/presets/gstreamer_more_bass_and_treble.json @@ -0,0 +1,109 @@ + { + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "8", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "5.5", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "0", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "-7", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "-5", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "1.5", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "8", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "11.2", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "12", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "12", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } + } \ No newline at end of file diff --git a/data/presets/gstreamer_party.json b/data/presets/gstreamer_party.json new file mode 100644 index 0000000..c6d2c0f --- /dev/null +++ b/data/presets/gstreamer_party.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "7", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "7", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "0", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "0", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "0", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "0", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "0", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "0", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "7", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "7", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_pop.json b/data/presets/gstreamer_pop.json new file mode 100644 index 0000000..145affb --- /dev/null +++ b/data/presets/gstreamer_pop.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "-1.6", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "4.5", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "7", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "8", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "5.6", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "0", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "-2.5", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "-2", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "-1.6", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "-1.5", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_reggae.json b/data/presets/gstreamer_reggae.json new file mode 100644 index 0000000..f2e655c --- /dev/null +++ b/data/presets/gstreamer_reggae.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "0", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "0", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "0", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "-5.5", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "0", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "6.5", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "6.5", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "0", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "0", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "0", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_rock.json b/data/presets/gstreamer_rock.json new file mode 100644 index 0000000..ec99337 --- /dev/null +++ b/data/presets/gstreamer_rock.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "8", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "5", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "-5.5", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "-8", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "-3", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "4", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "8", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "11", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "11", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "11.5", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_ska.json b/data/presets/gstreamer_ska.json new file mode 100644 index 0000000..1de0f5f --- /dev/null +++ b/data/presets/gstreamer_ska.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "-2.5", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "-5", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "-4", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "0", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "4", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "5.5", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "8", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "9", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "11", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "9", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_soft.json b/data/presets/gstreamer_soft.json new file mode 100644 index 0000000..5830e22 --- /dev/null +++ b/data/presets/gstreamer_soft.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "5", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "1.5", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "0", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "-2.5", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "0", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "4", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "8", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "9", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "11", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "12", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/gstreamer_techno.json b/data/presets/gstreamer_techno.json new file mode 100644 index 0000000..ca3efb6 --- /dev/null +++ b/data/presets/gstreamer_techno.json @@ -0,0 +1,109 @@ +{ + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "8", + "frequency": "29.952623149688797", + "width": "19.905246299377595", + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "5.5", + "frequency": "59.763340205038524", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "0", + "frequency": "119.24354052777788", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "-5.5", + "frequency": "237.92214271853953", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "-5", + "frequency": "474.71708526294935", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "0", + "frequency": "947.18511049703125", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "8", + "frequency": "1889.8827562743609", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "10", + "frequency": "3770.8118433037489", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "10", + "frequency": "7523.7587677823067", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "9", + "frequency": "15011.872336272731", + "width": "9976.2553274545608", + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } +} \ No newline at end of file diff --git a/data/presets/ziyad_perfecteq.json b/data/presets/ziyad_perfecteq.json new file mode 100644 index 0000000..cb489b7 --- /dev/null +++ b/data/presets/ziyad_perfecteq.json @@ -0,0 +1,109 @@ + { + "equalizer": { + "state": "true", + "mode": "IIR", + "num-bands": "10", + "input-gain": "0", + "output-gain": "0", + "band0": { + "gain": "4", + "frequency": "32", + "width": "19.905246299377595", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band1": { + "gain": "2", + "frequency": "64", + "width": "39.716187811321859", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band2": { + "gain": "1", + "frequency": "125", + "width": "79.244212834156855", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band3": { + "gain": "0", + "frequency": "250", + "width": "158.11299154736642", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band4": { + "gain": "-1", + "frequency": "500", + "width": "315.47689354145319", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band5": { + "gain": "-2", + "frequency": "1000", + "width": "629.45915692671076", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band6": { + "gain": "0", + "frequency": "2000", + "width": "1255.9361346279484", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band7": { + "gain": "2", + "frequency": "4000", + "width": "2505.9220394308272", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band8": { + "gain": "3", + "frequency": "8000", + "width": "4999.9718095262879", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + }, + "band9": { + "gain": "3", + "frequency": "16000", + "width": "9976.2553274545608", + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "solo": "false", + "mute": "false" + } + } + } \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.autogain.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.autogain.gschema.xml new file mode 100644 index 0000000..b9f4c05 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.autogain.gschema.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + -23 + + + false + + + "Geometric Mean (MSI)" + + + + 15 + + + + -70 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.bassenhancer.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.bassenhancer.gschema.xml new file mode 100644 index 0000000..061595f --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.bassenhancer.gschema.xml @@ -0,0 +1,42 @@ + + + + + false + + + + 0 + + + + 0 + + + + 0 + + + + 8.5 + + + + 100 + + + + 20 + + + + 0 + + + false + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.bassloudness.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.bassloudness.gschema.xml new file mode 100644 index 0000000..57d4073 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.bassloudness.gschema.xml @@ -0,0 +1,31 @@ + + + + + false + + + + 0 + + + + 0 + + + + -3.1 + + + + -6 + + + + -9.1 + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.compressor.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.compressor.gschema.xml new file mode 100644 index 0000000..adc3d2d --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.compressor.gschema.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + -100 + + + + 0 + + + "Downward" + + + + 20 + + + + 100 + + + + -100 + + + + -12 + + + + 4 + + + + -6 + + + + 0 + + + + 6 + + + + -72 + + + false + + + "Feed-forward" + + + "RMS" + + + false + + + "Middle" + + + "Left/Right" + + + + 0 + + + + 10 + + + + 0 + + + "off" + + + + 10 + + + "off" + + + + 20000 + + + "" + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.convolver.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.convolver.gschema.xml new file mode 100644 index 0000000..0dfbd84 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.convolver.gschema.xml @@ -0,0 +1,26 @@ + + + + + false + + + + 0 + + + + 0 + + + "" + + + + 100 + + + true + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.crossfeed.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.crossfeed.gschema.xml new file mode 100644 index 0000000..8d8078e --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.crossfeed.gschema.xml @@ -0,0 +1,24 @@ + + + + + false + + + + 0 + + + + 0 + + + + 700 + + + + 4.5 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.crystalizer.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.crystalizer.gschema.xml new file mode 100644 index 0000000..fb6ae48 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.crystalizer.gschema.xml @@ -0,0 +1,149 @@ + + + + + false + + + + 0 + + + + 0 + + + + + 0 + + + + -1 + + + + -2 + + + + -3 + + + + -4 + + + + -5 + + + + -6 + + + + -7 + + + + -8 + + + + -9 + + + + -10 + + + + -11 + + + + -12 + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.deepfilternet.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.deepfilternet.gschema.xml new file mode 100644 index 0000000..2023f0f --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.deepfilternet.gschema.xml @@ -0,0 +1,41 @@ + + + + + false + + + + 0 + + + + 0 + + + + + 100 + + + + -10 + + + + 30 + + + + 20 + + + + 0 + + + + 0.02 + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.deesser.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.deesser.gschema.xml new file mode 100644 index 0000000..dd568a1 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.deesser.gschema.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + "RMS" + + + "Wide" + + + + -18 + + + + 3 + + + + 15 + + + + 0 + + + + 6000 + + + + 4500 + + + + 0 + + + + 12 + + + + 1 + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.delay.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.delay.gschema.xml new file mode 100644 index 0000000..3998958 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.delay.gschema.xml @@ -0,0 +1,46 @@ + + + + + false + + + + 0 + + + + 0 + + + + -100 + + + + -100 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + false + + + false + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.echo_canceller.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.echo_canceller.gschema.xml new file mode 100644 index 0000000..5cfa5ef --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.echo_canceller.gschema.xml @@ -0,0 +1,28 @@ + + + + + false + + + + 0 + + + + 0 + + + + 100 + + + + -70 + + + + -70 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.equalizer.channel.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.equalizer.channel.gschema.xml new file mode 100644 index 0000000..9f00287 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.equalizer.channel.gschema.xml @@ -0,0 +1,1034 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + + 22.40 + + + + 27.80 + + + + 34.51 + + + + 42.82 + + + + 53.14 + + + + 65.95 + + + + 81.83 + + + + 101.55 + + + + 126 + + + + 156.38 + + + + 194.06 + + + + 240.81 + + + + 298.834 + + + + 370.834 + + + + 460.182 + + + + 571.057 + + + + 708.647 + + + + 879.387 + + + + 1091.26 + + + + 1354.19 + + + + 1680.47 + + + + 2085.35 + + + + 2587.79 + + + + 3211.29 + + + + 3985.01 + + + + 4945.15 + + + + 6136.63 + + + + 7615.17 + + + + 9449.96 + + + + 11726.8 + + + + 14552.2 + + + + 18058.4 + + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + 4.36 + + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + 4 + + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + "Bell" + + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + "RLC (BT)" + + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + "x1" + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.equalizer.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.equalizer.gschema.xml new file mode 100644 index 0000000..0eda6a6 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.equalizer.gschema.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + false + + + + 32 + + + "IIR" + + + + 0 + + + + 0 + + + false + + + + 0 + + + + 0 + + + + 0 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.exciter.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.exciter.gschema.xml new file mode 100644 index 0000000..bc82d35 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.exciter.gschema.xml @@ -0,0 +1,42 @@ + + + + + false + + + + 0 + + + + 0 + + + + 0 + + + + 8.5 + + + + 7500 + + + + 16000 + + + + 0 + + + false + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.expander.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.expander.gschema.xml new file mode 100644 index 0000000..f4ff54b --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.expander.gschema.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + -100 + + + + 0 + + + "Upward" + + + + 20 + + + + 100 + + + + -100 + + + + -12 + + + + 4 + + + + -6 + + + + 0 + + + false + + + "Internal" + + + "RMS" + + + false + + + "Middle" + + + "Left/Right" + + + + 0 + + + + 10 + + + + 0 + + + "off" + + + + 10 + + + "off" + + + + 20000 + + + "" + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.filter.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.filter.gschema.xml new file mode 100644 index 0000000..018420d --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.filter.gschema.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + 2000 + + + + 4.0 + + + + 0.0 + + + + 0 + + + + 0 + + + "Low-pass" + + + "RLC (BT)" + + + "IIR" + + + "x1" + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.gate.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.gate.gschema.xml new file mode 100644 index 0000000..35acbf8 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.gate.gschema.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + -100 + + + + 0 + + + + 20 + + + + 100 + + + + -24 + + + + -6 + + + false + + + + -12 + + + + -6 + + + + -24 + + + + 0 + + + false + + + "Internal" + + + "RMS" + + + false + + + "Middle" + + + "Left/Right" + + + + 0 + + + + 10 + + + + 0 + + + "off" + + + + 10 + + + "off" + + + + 20000 + + + "" + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.gschema.xml new file mode 100644 index 0000000..25c9681 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.gschema.xml @@ -0,0 +1,62 @@ + + + + + true + + + false + + + false + + + "Presets" + + + "Presets" + + + false + + + false + + + 0 + + + 0 + + + false + + + false + + + false + + + true + + + true + + + + 10 + + + + 50 + + + + 30 + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.levelmeter.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.levelmeter.gschema.xml new file mode 100644 index 0000000..2cd9e93 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.levelmeter.gschema.xml @@ -0,0 +1,8 @@ + + + + + false + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.libportal.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.libportal.gschema.xml new file mode 100644 index 0000000..8325531 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.libportal.gschema.xml @@ -0,0 +1,8 @@ + + + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.limiter.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.limiter.gschema.xml new file mode 100644 index 0000000..4741262 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.limiter.gschema.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + "Herm Thin" + + + "None" + + + "None" + + + + 5 + + + + 5 + + + + 5 + + + + 0 + + + true + + + + 0 + + + + 100 + + + false + + + + 5 + + + + 50 + + + + 0 + + + false + + + "" + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.loudness.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.loudness.gschema.xml new file mode 100644 index 0000000..f2157e5 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.loudness.gschema.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + "4096" + + + "ISO226-2003" + + + + 0 + + + false + + + + 6 + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.maximizer.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.maximizer.gschema.xml new file mode 100644 index 0000000..9f92fa1 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.maximizer.gschema.xml @@ -0,0 +1,28 @@ + + + + + false + + + + 0 + + + + 0 + + + + 25 + + + + 0 + + + + 0 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.multibandcompressor.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.multibandcompressor.gschema.xml new file mode 100644 index 0000000..45f1f38 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.multibandcompressor.gschema.xml @@ -0,0 +1,874 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + -100 + + + + 0 + + + + false + + + "Modern" + + + "None" + + + + true + + + true + + + true + + + false + + + false + + + false + + + false + + + + + 500 + + + + 1000 + + + + 2000 + + + + 4000 + + + + 8000 + + + + 12000 + + + + 16000 + + + + "" + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + 10 + + + + 500 + + + + 1000 + + + + 2000 + + + + 4000 + + + + 8000 + + + + 12000 + + + + 16000 + + + + + 500 + + + + 1000 + + + + 2000 + + + + 4000 + + + + 8000 + + + + 12000 + + + + 16000 + + + + 20000 + + + + "Downward" + + + "Downward" + + + "Downward" + + + "Downward" + + + "Downward" + + + "Downward" + + + "Downward" + + + "Downward" + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + + -100 + + + + -100 + + + + -100 + + + + -100 + + + + -100 + + + + -100 + + + + -100 + + + + -100 + + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + + -72 + + + + -72 + + + + -72 + + + + -72 + + + + -72 + + + + -72 + + + + -72 + + + + -72 + + + + + 6 + + + + 6 + + + + 6 + + + + 6 + + + + 6 + + + + 6 + + + + 6 + + + + 6 + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.multibandgate.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.multibandgate.gschema.xml new file mode 100644 index 0000000..aae5065 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.multibandgate.gschema.xml @@ -0,0 +1,827 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + -100 + + + + 0 + + + + false + + + "Modern" + + + "None" + + + + true + + + true + + + true + + + false + + + false + + + false + + + false + + + + + 500 + + + + 1000 + + + + 2000 + + + + 4000 + + + + 8000 + + + + 12000 + + + + 16000 + + + + "" + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + "RMS" + + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + "Middle" + + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + "Left/Right" + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + 10 + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + 10 + + + + 500 + + + + 1000 + + + + 2000 + + + + 4000 + + + + 8000 + + + + 12000 + + + + 16000 + + + + + 500 + + + + 1000 + + + + 2000 + + + + 4000 + + + + 8000 + + + + 12000 + + + + 16000 + + + + 20000 + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + 20 + + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + 100 + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + -12 + + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + -6 + + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + -24 + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + diff --git a/data/schemas/com.github.wwmm.easyeffects.outputlevel.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.outputlevel.gschema.xml new file mode 100644 index 0000000..adf02ce --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.outputlevel.gschema.xml @@ -0,0 +1,8 @@ + + + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.pitch.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.pitch.gschema.xml new file mode 100644 index 0000000..3dfcef9 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.pitch.gschema.xml @@ -0,0 +1,46 @@ + + + + + false + + + + 0 + + + + 0 + + + + 0.0 + + + false + + + false + + + + 40 + + + + 15 + + + + 8 + + + + 0 + + + + 0 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.reverb.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.reverb.gschema.xml new file mode 100644 index 0000000..f3b1843 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.reverb.gschema.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + "Large" + + + + 1.5 + + + + 5000 + + + + 0.5 + + + + -12 + + + + 0 + + + + 0 + + + + 300 + + + + 5000 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.rnnoise.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.rnnoise.gschema.xml new file mode 100644 index 0000000..e387531 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.rnnoise.gschema.xml @@ -0,0 +1,34 @@ + + + + + false + + + + 0 + + + + 0 + + + "" + + + false + + + + 50 + + + + 0.0 + + + + 20.0 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.spectrum.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.spectrum.gschema.xml new file mode 100644 index 0000000..1260810 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.spectrum.gschema.xml @@ -0,0 +1,53 @@ + + + + + + + + + + true + + + true + + + true + + + false + + + true + + + + 100 + + + + 2 + + + (1.0,1.0,1.0,1.0) + + + (1.0,1.0,1.0,1.0) + + + 120 + + + "Bars" + + + + 20 + + + + 20000 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.speex.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.speex.gschema.xml new file mode 100644 index 0000000..0511a26 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.speex.gschema.xml @@ -0,0 +1,40 @@ + + + + + false + + + + 0 + + + + 0 + + + true + + + + -70 + + + false + + + false + + + + 95 + + + + 90 + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.stereotools.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.stereotools.gschema.xml new file mode 100644 index 0000000..7707d08 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.stereotools.gschema.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + false + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + false + + + false + + + false + + + false + + + false + + + "LR > LR (Stereo Default)" + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + 1 + + + + 0 + + + + -100 + + + + 0 + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.streaminputs.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.streaminputs.gschema.xml new file mode 100644 index 0000000..b9d9372 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.streaminputs.gschema.xml @@ -0,0 +1,24 @@ + + + + + [] + + + true + + + "" + + + + 50 + + + [] + + + false + + + \ No newline at end of file diff --git a/data/schemas/com.github.wwmm.easyeffects.streamoutputs.gschema.xml b/data/schemas/com.github.wwmm.easyeffects.streamoutputs.gschema.xml new file mode 100644 index 0000000..397ba43 --- /dev/null +++ b/data/schemas/com.github.wwmm.easyeffects.streamoutputs.gschema.xml @@ -0,0 +1,24 @@ + + + + + [] + + + true + + + "" + + + + 50 + + + [] + + + false + + + \ No newline at end of file diff --git a/data/ui/app_info.ui b/data/ui/app_info.ui new file mode 100644 index 0000000..d3887fc --- /dev/null +++ b/data/ui/app_info.ui @@ -0,0 +1,291 @@ + + + + + + horizontal + + + + + + diff --git a/data/ui/application_window.ui b/data/ui/application_window.ui new file mode 100644 index 0000000..bdc7e3d --- /dev/null +++ b/data/ui/application_window.ui @@ -0,0 +1,98 @@ + + + +
+ + _Help + app.help + +
+
+ + _Reset Settings + app.reset + +
+
+ + _Preferences + app.preferences + + + _Shortcuts + app.shortcuts + + + _About Easy Effects + app.about + +
+
+ + +
\ No newline at end of file diff --git a/data/ui/apps_box.ui b/data/ui/apps_box.ui new file mode 100644 index 0000000..9de1304 --- /dev/null +++ b/data/ui/apps_box.ui @@ -0,0 +1,34 @@ + + + + \ No newline at end of file diff --git a/data/ui/autogain.ui b/data/ui/autogain.ui new file mode 100644 index 0000000..3e167b5 --- /dev/null +++ b/data/ui/autogain.ui @@ -0,0 +1,636 @@ + + + + + + horizontal + + + + + + + + + + + + + horizontal + + + + + + \ No newline at end of file diff --git a/data/ui/autoload_row.ui b/data/ui/autoload_row.ui new file mode 100644 index 0000000..ac35907 --- /dev/null +++ b/data/ui/autoload_row.ui @@ -0,0 +1,121 @@ + + + + 6 + 6 + 6 + + + center + 1 + 6 + 6 + + + end + Device + + 0 + 0 + + + + + + start + end + + + 1 + 0 + + + + + + + end + Name + + 0 + 1 + + + + + + start + end + + + 1 + 1 + + + + + + + end + Profile + + 0 + 2 + + + + + + start + end + + + 1 + 2 + + + + + + + + end + Preset + + 0 + 3 + + + + + + start + end + + + 1 + 3 + + + + + + + + + Remove this autoload preset + end + center + user-trash-symbolic + + + + diff --git a/data/ui/bass_enhancer.ui b/data/ui/bass_enhancer.ui new file mode 100644 index 0000000..26bee9a --- /dev/null +++ b/data/ui/bass_enhancer.ui @@ -0,0 +1,503 @@ + + + + + + horizontal + + + + + + + + + horizontal + + + + + + diff --git a/data/ui/bass_loudness.ui b/data/ui/bass_loudness.ui new file mode 100644 index 0000000..bc9d76c --- /dev/null +++ b/data/ui/bass_loudness.ui @@ -0,0 +1,319 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/blocklist_menu.ui b/data/ui/blocklist_menu.ui new file mode 100644 index 0000000..3f8e328 --- /dev/null +++ b/data/ui/blocklist_menu.ui @@ -0,0 +1,105 @@ + + + + diff --git a/data/ui/chart.ui b/data/ui/chart.ui new file mode 100644 index 0000000..decb14c --- /dev/null +++ b/data/ui/chart.ui @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/data/ui/compressor.ui b/data/ui/compressor.ui new file mode 100644 index 0000000..6923885 --- /dev/null +++ b/data/ui/compressor.ui @@ -0,0 +1,1367 @@ + + + + + + horizontal + + + + + + + + + + + + horizontal + + + + + + diff --git a/data/ui/convolver.ui b/data/ui/convolver.ui new file mode 100644 index 0000000..e4c4cdb --- /dev/null +++ b/data/ui/convolver.ui @@ -0,0 +1,435 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/convolver_menu_combine.ui b/data/ui/convolver_menu_combine.ui new file mode 100644 index 0000000..b1e417e --- /dev/null +++ b/data/ui/convolver_menu_combine.ui @@ -0,0 +1,134 @@ + + + + diff --git a/data/ui/convolver_menu_impulses.ui b/data/ui/convolver_menu_impulses.ui new file mode 100644 index 0000000..7485898 --- /dev/null +++ b/data/ui/convolver_menu_impulses.ui @@ -0,0 +1,58 @@ + + + + diff --git a/data/ui/crossfeed.ui b/data/ui/crossfeed.ui new file mode 100644 index 0000000..05c3f95 --- /dev/null +++ b/data/ui/crossfeed.ui @@ -0,0 +1,328 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/crystalizer.ui b/data/ui/crystalizer.ui new file mode 100644 index 0000000..6b72dea --- /dev/null +++ b/data/ui/crystalizer.ui @@ -0,0 +1,229 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/crystalizer_band.ui b/data/ui/crystalizer_band.ui new file mode 100644 index 0000000..78c12be --- /dev/null +++ b/data/ui/crystalizer_band.ui @@ -0,0 +1,72 @@ + + + + 1 + + + center + 12 + + + Bypass + + + + + + Mute + + + + + + + + 6 + 6 + 6 + 6 + 6 + vertical + + + center + popover_menu + emblem-system-symbolic + + + + + + band + + + + + + + 1 + center + vertical + 1 + 1 + 0 + bottom + + + + -40 + 32 + 1 + 1 + + + + band_label + + + + + diff --git a/data/ui/custom.css b/data/ui/custom.css new file mode 100644 index 0000000..159b4ba --- /dev/null +++ b/data/ui/custom.css @@ -0,0 +1,4 @@ +.drag-listboxrow-icon { + background: white; + border: 1px solid black; +} diff --git a/data/ui/deepfilternet.ui b/data/ui/deepfilternet.ui new file mode 100644 index 0000000..1cb2cd4 --- /dev/null +++ b/data/ui/deepfilternet.ui @@ -0,0 +1,419 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + \ No newline at end of file diff --git a/data/ui/deesser.ui b/data/ui/deesser.ui new file mode 100644 index 0000000..ddab3af --- /dev/null +++ b/data/ui/deesser.ui @@ -0,0 +1,695 @@ + + + + + + horizontal + + + + + + + + + + horizontal + + + + + + diff --git a/data/ui/delay.ui b/data/ui/delay.ui new file mode 100644 index 0000000..fbc6017 --- /dev/null +++ b/data/ui/delay.ui @@ -0,0 +1,439 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/echo_canceller.ui b/data/ui/echo_canceller.ui new file mode 100644 index 0000000..c57d0a4 --- /dev/null +++ b/data/ui/echo_canceller.ui @@ -0,0 +1,321 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/effects_box.ui b/data/ui/effects_box.ui new file mode 100644 index 0000000..fe4470f --- /dev/null +++ b/data/ui/effects_box.ui @@ -0,0 +1,150 @@ + + + + \ No newline at end of file diff --git a/data/ui/equalizer.ui b/data/ui/equalizer.ui new file mode 100644 index 0000000..666641e --- /dev/null +++ b/data/ui/equalizer.ui @@ -0,0 +1,590 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/equalizer_band.ui b/data/ui/equalizer_band.ui new file mode 100644 index 0000000..02c8502 --- /dev/null +++ b/data/ui/equalizer_band.ui @@ -0,0 +1,332 @@ + + + + + + + + 12 + 1 + + + + + + + Type + 2 + + + + + Off + Bell + High-Pass + High-Shelf + Low-Pass + Low-Shelf + Notch + Resonance + All-Pass + Band-Pass + Ladder-Pass + Ladder-Rejection + + + + + + + + + Mode + 2 + + + + + RLC (BT) + RLC (MT) + BWC (BT) + BWC (MT) + LRX (BT) + LRX (MT) + APO (DR) + + + + + + + + + Slope + 2 + + + + + x1 + x2 + x3 + x4 + + + + + + + + + Solo + 2 + + + + center + + + + + + + + Mute + 2 + + + + center + + + + + + + + + + + + + Frequency + 2 + + + + center + 0 + if-valid + 10 + + + 10 + 24000 + 1 + 100 + + + + + + + + center + edit-undo-symbolic + + + + + + + + + Gain + 2 + + + + center + 2 + if-valid + 10 + + + + + + + -36 + 36 + 0.01 + 1.0 + + + + + + + + center + edit-undo-symbolic + + + + + + + + + Quality + 2 + + + + center + 2 + if-valid + 10 + + + 100 + 0.01 + 0.1 + + + + + + + + center + edit-undo-symbolic + + + + + + + + + Width + 2 + + + + center + 2 + if-valid + 10 + + + + band_type + + + + + + 12 + 0.01 + 0.1 + + + + + + + + center + edit-undo-symbolic + + + + + + + + + + + + diff --git a/data/ui/exciter.ui b/data/ui/exciter.ui new file mode 100644 index 0000000..de45e6e --- /dev/null +++ b/data/ui/exciter.ui @@ -0,0 +1,502 @@ + + + + + + horizontal + + + + + + + + + horizontal + + + + + + diff --git a/data/ui/expander.ui b/data/ui/expander.ui new file mode 100644 index 0000000..6e5531e --- /dev/null +++ b/data/ui/expander.ui @@ -0,0 +1,1285 @@ + + + + + + horizontal + + + + + + + + + + + + horizontal + + + + + + diff --git a/data/ui/factory_clients_listview.ui b/data/ui/factory_clients_listview.ui new file mode 100644 index 0000000..4f6f719 --- /dev/null +++ b/data/ui/factory_clients_listview.ui @@ -0,0 +1,129 @@ + + + + diff --git a/data/ui/factory_input_device_dropdown.ui b/data/ui/factory_input_device_dropdown.ui new file mode 100644 index 0000000..ab179bf --- /dev/null +++ b/data/ui/factory_input_device_dropdown.ui @@ -0,0 +1,28 @@ + + + + diff --git a/data/ui/factory_modules_listview.ui b/data/ui/factory_modules_listview.ui new file mode 100644 index 0000000..dd2b8ed --- /dev/null +++ b/data/ui/factory_modules_listview.ui @@ -0,0 +1,101 @@ + + + + diff --git a/data/ui/factory_node_dropdown.ui b/data/ui/factory_node_dropdown.ui new file mode 100644 index 0000000..4855b99 --- /dev/null +++ b/data/ui/factory_node_dropdown.ui @@ -0,0 +1,32 @@ + + + + diff --git a/data/ui/factory_output_device_dropdown.ui b/data/ui/factory_output_device_dropdown.ui new file mode 100644 index 0000000..347996b --- /dev/null +++ b/data/ui/factory_output_device_dropdown.ui @@ -0,0 +1,28 @@ + + + + diff --git a/data/ui/factory_presets_dropdown.ui b/data/ui/factory_presets_dropdown.ui new file mode 100644 index 0000000..3bbbdec --- /dev/null +++ b/data/ui/factory_presets_dropdown.ui @@ -0,0 +1,28 @@ + + + + diff --git a/data/ui/factory_rnnoise_listview.ui b/data/ui/factory_rnnoise_listview.ui new file mode 100644 index 0000000..df36c98 --- /dev/null +++ b/data/ui/factory_rnnoise_listview.ui @@ -0,0 +1,42 @@ + + + + diff --git a/data/ui/filter.ui b/data/ui/filter.ui new file mode 100644 index 0000000..436be83 --- /dev/null +++ b/data/ui/filter.ui @@ -0,0 +1,502 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/gate.ui b/data/ui/gate.ui new file mode 100644 index 0000000..b192512 --- /dev/null +++ b/data/ui/gate.ui @@ -0,0 +1,1499 @@ + + + + + + horizontal + + + + + + + + + + + + horizontal + + + + + + diff --git a/data/ui/level_meter.ui b/data/ui/level_meter.ui new file mode 100644 index 0000000..25d36bf --- /dev/null +++ b/data/ui/level_meter.ui @@ -0,0 +1,361 @@ + + + + + + horizontal + + + + + + + + + + diff --git a/data/ui/limiter.ui b/data/ui/limiter.ui new file mode 100644 index 0000000..f2778d0 --- /dev/null +++ b/data/ui/limiter.ui @@ -0,0 +1,958 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + \ No newline at end of file diff --git a/data/ui/loudness.ui b/data/ui/loudness.ui new file mode 100644 index 0000000..673731d --- /dev/null +++ b/data/ui/loudness.ui @@ -0,0 +1,358 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + \ No newline at end of file diff --git a/data/ui/maximizer.ui b/data/ui/maximizer.ui new file mode 100644 index 0000000..7292fa4 --- /dev/null +++ b/data/ui/maximizer.ui @@ -0,0 +1,343 @@ + + + + + + horizontal + + + + + + + diff --git a/data/ui/multiband_compressor.ui b/data/ui/multiband_compressor.ui new file mode 100644 index 0000000..514127c --- /dev/null +++ b/data/ui/multiband_compressor.ui @@ -0,0 +1,703 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/multiband_compressor_band.ui b/data/ui/multiband_compressor_band.ui new file mode 100644 index 0000000..9a9cce1 --- /dev/null +++ b/data/ui/multiband_compressor_band.ui @@ -0,0 +1,961 @@ + + + + + + horizontal + + + + + + + diff --git a/data/ui/multiband_gate.ui b/data/ui/multiband_gate.ui new file mode 100644 index 0000000..1cf13a5 --- /dev/null +++ b/data/ui/multiband_gate.ui @@ -0,0 +1,703 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/multiband_gate_band.ui b/data/ui/multiband_gate_band.ui new file mode 100644 index 0000000..076e67f --- /dev/null +++ b/data/ui/multiband_gate_band.ui @@ -0,0 +1,929 @@ + + + + + + horizontal + + + + + + + diff --git a/data/ui/pipe_manager_box.ui b/data/ui/pipe_manager_box.ui new file mode 100644 index 0000000..bac22a2 --- /dev/null +++ b/data/ui/pipe_manager_box.ui @@ -0,0 +1,600 @@ + + + + + + horizontal + + + + + + diff --git a/data/ui/pitch.ui b/data/ui/pitch.ui new file mode 100644 index 0000000..1adf8d3 --- /dev/null +++ b/data/ui/pitch.ui @@ -0,0 +1,433 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + \ No newline at end of file diff --git a/data/ui/plugin_row.ui b/data/ui/plugin_row.ui new file mode 100644 index 0000000..ffd3016 --- /dev/null +++ b/data/ui/plugin_row.ui @@ -0,0 +1,78 @@ + + + + 6 + 6 + + + + pointer + + + + + + start + center + ee-arrow-down-symbolic + + + + + + start + center + 1 + Name + + + + + + + + + + + Remove this effect + center + 0 + user-trash-symbolic + + + + + + + Enable/disable this effect + center + 0 + system-shutdown-symbolic + + + + + + + Change the position of this effect + center + 8 + 0 + ee-drag-handle-symbolic + + + grab + + + + + + + + diff --git a/data/ui/plugins_box.ui b/data/ui/plugins_box.ui new file mode 100644 index 0000000..5f60ee5 --- /dev/null +++ b/data/ui/plugins_box.ui @@ -0,0 +1,136 @@ + + + + diff --git a/data/ui/plugins_menu.ui b/data/ui/plugins_menu.ui new file mode 100644 index 0000000..f407c47 --- /dev/null +++ b/data/ui/plugins_menu.ui @@ -0,0 +1,85 @@ + + + + diff --git a/data/ui/preferences_general.ui b/data/ui/preferences_general.ui new file mode 100644 index 0000000..c014406 --- /dev/null +++ b/data/ui/preferences_general.ui @@ -0,0 +1,206 @@ + + + + \ No newline at end of file diff --git a/data/ui/preferences_spectrum.ui b/data/ui/preferences_spectrum.ui new file mode 100644 index 0000000..68dc717 --- /dev/null +++ b/data/ui/preferences_spectrum.ui @@ -0,0 +1,269 @@ + + + + + + horizontal + + + + + + + + + \ No newline at end of file diff --git a/data/ui/preferences_window.ui b/data/ui/preferences_window.ui new file mode 100644 index 0000000..4fc57d7 --- /dev/null +++ b/data/ui/preferences_window.ui @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/data/ui/preset_row.ui b/data/ui/preset_row.ui new file mode 100644 index 0000000..e767bc2 --- /dev/null +++ b/data/ui/preset_row.ui @@ -0,0 +1,106 @@ + + + + 6 + 6 + + + 1 + + + + + + + 6 + + + + + + start + center + 1 + Name + + + + + + end + + + + + Load + Discard the current settings and load this preset + + name + + + + + + + Save current settings to this preset file + document-save-symbolic + + name + + + + + + + Remove this preset file + user-trash-symbolic + + name + + + + + + + + + + + 6 + 0 + + + + start + center + 1 + Name + + + + + + 6 + end + + + + object-select-symbolic + + + + + + process-stop-symbolic + + + + + + + + + + \ No newline at end of file diff --git a/data/ui/presets_menu.ui b/data/ui/presets_menu.ui new file mode 100644 index 0000000..3ca6bfd --- /dev/null +++ b/data/ui/presets_menu.ui @@ -0,0 +1,151 @@ + + + + \ No newline at end of file diff --git a/data/ui/reverb.ui b/data/ui/reverb.ui new file mode 100644 index 0000000..8e74e3a --- /dev/null +++ b/data/ui/reverb.ui @@ -0,0 +1,656 @@ + + + + + + 1 + + + 6 + 6 + 6 + 6 + 6 + vertical + + + 1 + 6 + + + Ambience + + + + + + + Empty Walls + + + + + + + + + 6 + 1 + + + Room + + + + + + + Large Empty Hall + + + + + + + + + 6 + 1 + + + Disco + + + + + + + Large Occupied Hall + + + + + + + + + + + horizontal + + + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/data/ui/rnnoise.ui b/data/ui/rnnoise.ui new file mode 100644 index 0000000..8b74fa1 --- /dev/null +++ b/data/ui/rnnoise.ui @@ -0,0 +1,474 @@ + + + + + + horizontal + + + + + + diff --git a/data/ui/shortcuts.ui b/data/ui/shortcuts.ui new file mode 100644 index 0000000..401164e --- /dev/null +++ b/data/ui/shortcuts.ui @@ -0,0 +1,45 @@ + + + + 1 + + + shortcuts + 12 + + + Overview + overview + + + F1 + Show help + + + + + + F11 + Fullscreen/Restore from fullscreen + + + + + + <Ctrl>w + Close the Window + + + + + + <Ctrl>q + Quit Easy Effects + + + + + + + + diff --git a/data/ui/speex.ui b/data/ui/speex.ui new file mode 100644 index 0000000..c62cc1c --- /dev/null +++ b/data/ui/speex.ui @@ -0,0 +1,383 @@ + + + + diff --git a/data/ui/stereo_tools.ui b/data/ui/stereo_tools.ui new file mode 100644 index 0000000..c8ab47d --- /dev/null +++ b/data/ui/stereo_tools.ui @@ -0,0 +1,838 @@ + + + + + + horizontal + + + + + + + + horizontal + + + + + + diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..54c7957 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +easyeffects (6.2.5-1) unstable; urgency=medium + + * Version 6.2.5 upstream. + + -- Boyuan Yang Sat, 18 Jun 2022 19:16:31 -0400 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..4d89d9b --- /dev/null +++ b/debian/control @@ -0,0 +1,46 @@ +Source: easyeffects +Section: sound +Priority: optional +Maintainer: Boyuan Yang +Build-Depends: + appstream-util, + debhelper-compat (= 13), + gettext, + itstool, + libadwaita-1-dev, + libbs2b-dev, + libebur128-dev, + libfftw3-dev, + libfmt-dev, + libglib2.0-dev, + libgtk-4-dev, + liblilv-dev, + libpipewire-0.3-dev, + libsoundtouch-dev, + libsamplerate0-dev, + libsigc++-3.0-dev, + libsndfile-dev, + libspeexdsp-dev, + libtbb-dev, + libzita-convolver-dev, + lv2-dev, + meson, + nlohmann-json3-dev, + pkg-config, + ladspa-sdk, +Standards-Version: 4.6.1 +Homepage: https://github.com/wwmm/easyeffects + +Package: easyeffects +Architecture: any +Depends: + calf-plugins, + lsp-plugins-lv2 | lsp-plugins, + ${misc:Depends}, + ${shlibs:Depends}, +Recommends: + mda-lv2, + zam-plugins, + libdeep_filter_ladspa, +Description: Audio effects for PipeWire applications + Many sound effects for PipeWire input and output. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..b1090ce --- /dev/null +++ b/debian/copyright @@ -0,0 +1,46 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: easyeffects +Upstream-Contact: Wellington Wallace +Source: https://github.com/wwmm/easyeffects + +Files: * +Copyright: 2017-2022 Wellington Wallace +License: GPL-3.0+ + +Files: debian/* +Copyright: Mikhail Novosyolov + 2019-2022 Boyuan Yang +License: GPL-3.0+ + +Files: util/autobuild.sh +Copyright: Mikhail Novosyolov +License: GPL-3.0+ + +Files: PKGBUILD +Copyright: Wellington +License: GPL-3.0+ + +Files: data/com.github.wwmm.easyeffects.metainfo.xml.in +Copyright: 2017 Patrik Nilsson +License: CC0-1.0 + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". + +License: CC0-1.0 + On Debian systems, the complete text of the Creative Commons Zero v1.0 + Universal License can be found in "/usr/share/common-licenses/CC0-1.0". diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..2d33f6a --- /dev/null +++ b/debian/rules @@ -0,0 +1,4 @@ +#!/usr/bin/make -f + +%: + dh $@ diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..0330f70 --- /dev/null +++ b/debian/watch @@ -0,0 +1,4 @@ +version=4 +opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*@ARCHIVE_EXT@)%@PACKAGE@-$1%" \ + https://github.com/wwmm/easyeffects/tags \ + (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@ diff --git a/easyeffects.code-workspace b/easyeffects.code-workspace new file mode 100644 index 0000000..350b2dc --- /dev/null +++ b/easyeffects.code-workspace @@ -0,0 +1,95 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "mesonbuild.buildFolder": "_build", + "mesonbuild.configureOnOpen": true, + "mesonbuild.configureOptions": [ + "--buildtype=debugoptimized", + "--cpp_std=c++17" + ], + "editor.formatOnSave": true, + "editor.rulers": [120], + "files.associations": { + "*.page": "xml", + "*.tcc": "cpp", + "iostream": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "csignal": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "atomic": "cpp", + "strstream": "cpp", + "bit": "cpp", + "bitset": "cpp", + "chrono": "cpp", + "codecvt": "cpp", + "complex": "cpp", + "condition_variable": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "string_view": "cpp", + "fstream": "cpp", + "functional": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "memory": "cpp", + "mutex": "cpp", + "new": "cpp", + "numeric": "cpp", + "optional": "cpp", + "ostream": "cpp", + "ratio": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "system_error": "cpp", + "thread": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "typeindex": "cpp", + "typeinfo": "cpp", + "utility": "cpp", + "valarray": "cpp", + "variant": "cpp", + "algorithm": "cpp", + "hash_map": "cpp", + "iterator": "cpp", + "memory_resource": "cpp", + "random": "cpp", + "cfenv": "cpp", + "cinttypes": "cpp" + }, + "xml.format.joinContentLines": true, + "clangd.arguments": [ + "--header-insertion=never" + ], + "prettier.enable": false, + "xml.format.preservedNewlines": 1, + "xml.format.enabled": true, + "xml.format.maxLineWidth": 0 + } +} diff --git a/help/C/advancedinfo.page b/help/C/advancedinfo.page new file mode 100644 index 0000000..e076774 --- /dev/null +++ b/help/C/advancedinfo.page @@ -0,0 +1,11 @@ + + + + + + Advanced Information +

Easy Effects audio processing is composed by three main stages. Each of them needs a specific audio format and sampling rate.

+

In the bottom bar is reported the pipeline output sampling rate (in kHz) and the latency (in ms) introduced by the audio processing stage.

+

Every stream in applications list also reports its own latency and sampling rate, along with status and format.

+
diff --git a/help/C/autogain.page b/help/C/autogain.page new file mode 100644 index 0000000..54339a9 --- /dev/null +++ b/help/C/autogain.page @@ -0,0 +1,115 @@ + + + + + + Auto Gain +

Easy Effects Autogain is based on the library libebur128 which implements the EBU R 128 standard for loudness normalization. It changes the audio volume to a perceived loudness target that can be customized by the user.

+ + + + <em style="strong" its:withinText="nested">Target</em> + +

Loudness level.

+
+ + + <em style="strong" its:withinText="nested">Silence</em> + +

Silence threshold. While the momentary loudness is below this value the autogain won't make any changes to the current gain being applied to the signal level.

+
+ + + <em style="strong" its:withinText="nested">Maximum History</em> + +

Range of time taken into account for the calculation of loudness level and output gain.

+
+ + + <em style="strong" its:withinText="nested">Reference</em> + +

The parameter used as reference to evaluate the output gain.

+ + +

+ Momentary + - Measures the loudness of the past 400 milliseconds. +

+
+ +

+ Short-Term + - Measures the loudness of the past 3 seconds. +

+
+ +

+ Integrated + - Ideally it indicates how loud the content is on average. It measures the loudness on a long range of time, depending on the value set as Maximum History. +

+
+ +

+ Geometric Mean + - Uses the geometric mean of all the above mentioned parameters, or two of them at user choosing. +

+
+
+
+ + + <em style="strong" its:withinText="nested">Reset History</em> + +

Resets the Autogain history related to chosen Reference.

+
+ + + <em style="strong" its:withinText="nested">Monitor Parameters</em> + +

Autogain values shown as stats.

+ + +

+ Relative + - Used to detect silence. Whenever the Momentary term is below a predetermined threshold, modifications to the output gain will be disabled. +

+
+ +

+ Loudness + - The difference between its value and the target loudness determines the output gain. +

+
+ +

+ Range + - Indicates how large is the dynamic range of the content played. +

+
+ +

+ Output Gain + - The input signal is adjusted by this correction gain to bring its loudness to the target value. +

+
+
+
+
+
+ References + + +

+ Wikipedia EBU R 128 +

+
+
+ + +

+ EBU - Loudness Normalisation and Permitted Maximum Level of Audio Signals +

+
+
+
+
\ No newline at end of file diff --git a/help/C/bassenhancer.page b/help/C/bassenhancer.page new file mode 100644 index 0000000..1bfdeff --- /dev/null +++ b/help/C/bassenhancer.page @@ -0,0 +1,68 @@ + + + + + + Bass Enhancer +

A Bass Enhancer is used to produce very low sound that is not present in the original signal. This is done by creating harmonic distortions of the signal which are restricted in range and added to the original signal. It raises the lower end of an audio signal without simply raising the lower frequencies like an Equalizer would do to create a more "fat" or "boomy" sound.

+ + + + <em style="strong" its:withinText="nested">Amount</em> + +

Amount of harmonics added to the original signal.

+
+ + + <em style="strong" its:withinText="nested">Harmonics</em> + +

Amount of newly created harmonics.

+
+ + + <em style="strong" its:withinText="nested">Scope</em> + +

The frequency above which harmonics are produced.

+
+ + + <em style="strong" its:withinText="nested">Floor (button)</em> + +

Constrain the enhancement on the lower end.

+
+ + + <em style="strong" its:withinText="nested">Floor (value)</em> + +

The frequency below which no harmonics are produced.

+
+ + + <em style="strong" its:withinText="nested">Blend Harmonics</em> + +

The "colour" (or octave) of the harmonics.

+
+ + + <em style="strong" its:withinText="nested">Listen</em> + +

Mute the original signal and listen to the harmonics exclusively.

+
+
+
+ References + + +

+ Calf Bass Enhancer +

+
+ +

+ Wikipedia Missing Fundamental +

+
+
+
+
diff --git a/help/C/bassloudness.page b/help/C/bassloudness.page new file mode 100644 index 0000000..53a5999 --- /dev/null +++ b/help/C/bassloudness.page @@ -0,0 +1,44 @@ + + + + + + Bass Loudness +

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".

+ + + + <em style="strong" its:withinText="nested">Loudness</em> + +

Source level relative to listening level (based on a 100 dB SPL maximum level).

+
+ + + <em style="strong" its:withinText="nested">Output</em> + +

Change output level.

+
+ + + <em style="strong" its:withinText="nested">Link</em> + +

Automatically adjusts Output to maintain a consistent tonal balance at all levels.

+
+
+
+ References + + +

+ Wikipedia Equal-Loudness Contour +

+
+ +

+ MDA Loudness +

+
+
+
+
diff --git a/help/C/blocklist.page b/help/C/blocklist.page new file mode 100644 index 0000000..a05ec44 --- /dev/null +++ b/help/C/blocklist.page @@ -0,0 +1,11 @@ + + + + + + Applications Excluded +

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.

+

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.

+

A specific application in the Players/Recorders list can be quickly added to the Excluded Apps just clicking the "Exclude" checkbutton.

+
diff --git a/help/C/compressor.page b/help/C/compressor.page new file mode 100644 index 0000000..3ab539d --- /dev/null +++ b/help/C/compressor.page @@ -0,0 +1,267 @@ + + + + + + Compressor +

A Compressor is used to reduce the dynamic range or, in other words, the difference in level between the quietest and the loudest parts of an audio signal. It achieves this purpose altering the gain when the signal overtakes a predetermined Threshold. Easy Effects uses the Stereo Sidechain Compressor from Linux Studio Plugins.

+
+ Compressor Options + + + + <em style="strong" its:withinText="nested">Attack Time</em> + +

The length of time it takes to apply roughly two-thirds of the targeted amount of compression ratio to the uncompressed signal.

+
+ + + <em style="strong" its:withinText="nested">Release Time</em> + +

The length of time it takes to restore roughly two-thirds of the reduced gain (in Downward mode) or increased gain (in Upward/Boosting mode) to the compressed signal.

+
+ + + <em style="strong" its:withinText="nested">Attack Threshold</em> + +

The target level around which the compression is applied (the range depends by the Knee).

+
+ + + <em style="strong" its:withinText="nested">Release Threshold</em> + +

Sets up the Threshold of the Release Time, calculated by summing the Release Threshold to the Attack Threshold.

+

If the Sidechain level is above that Threshold, the compressor uses the Release Time for the releasing stage. Otherwise the Attack Time is used in place of Release Time.

+

For example, with -10 dB Attack Threshold and -60 dB Release Threshold, if the Sidechain is above -10 + (-60) = -70 dB, the Release Time is used for the gain restoration. If the Sidechain is below -70 dB, the Attack Time is used for the gain restoration.

+
+ + + <em style="strong" its:withinText="nested">Ratio</em> + +

The amount of attenuation (in Downward mode) or amplification (in Upward/Boosting mode) that will be applied to the signal.

+

For example, when the Ratio is 2 in Downward mode and the Sidechain rises above the Threshold by 10 dB, the signal would be ideally reduced by 5 dB (10/2 dB). In practice this behavior mostly depends on how the Compressor is designed and configured.

+
+ + + <em style="strong" its:withinText="nested">Knee</em> + +

The range over which the Compressor switches from no compression to almost the full ratio compression (the Threshold usually sits at the center of this transition zone).

+
+ + + <em style="strong" its:withinText="nested">Makeup</em> + +

The gain to apply after the compression stage.

+
+ + + <em style="strong" its:withinText="nested">Dry Level</em> + +

Amount of unprocessed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Wet Level</em> + +

Amount of processed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Mode</em> + + + +

+ Downward - It's aimed to decrease the gain of the signal above the Threshold.

+
+ +

+ Upward - It's aimed to increase the gain of the signal below the Threshold.

+
+ +

+ Boosting - It's aimed to increase the gain of the signal below the Threshold by a specific amount.

+
+
+
+ + + <em style="strong" its:withinText="nested">Boost Threshold</em> + +

The Threshold below which a constant amplification will be applied to the input signal in Upward Mode (it prevents from applying infinite amplification to very quiet signals).

+
+ + + <em style="strong" its:withinText="nested">Boost Amount</em> + +

Maximum gain amplification to apply in Boosting Mode.

+
+
+
+
+ Sidechain + + + + <em style="strong" its:withinText="nested">Listen</em> + +

Allows to listen the processed Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">Input Type</em> + +

Determines which signal is the Sidechain or, in other words, the signal that controls the compression stage.

+ + +

+ Feed-forward - The Sidechain is the Compressor input signal (taken after applying the plugin input gain). More aggressive compression.

+
+ +

+ Feed-back - The Sidechain is the Compressor output signal (taken before applying the Makeup and the plugin output gain). Vintage-style compression.

+
+ +

+ External - The Sidechain is an external source took by a specific input device (typically a microphone).

+
+
+
+ + + <em style="strong" its:withinText="nested">Input Device</em> + +

Select the device for the External Sidechain.

+
+ + + <em style="strong" its:withinText="nested">Mode</em> + +

Determines how the Sidechain is evaluated for the compression stage.

+ + +

+ Peak - The Compressor reacts according to the peaks.

+
+ +

+ RMS - The Compressor reacts according to the average loudness measured by the root mean square.

+
+ +

+ Low-Pass - The Compressor reacts according to the signal processed by a Low-Pass filter.

+
+ +

+ Uniform - The Compressor reacts according to the loudness measured by the average of the absolute amplitude.

+
+
+
+ + + <em style="strong" its:withinText="nested">Source</em> + +

Determines which part of the Sidechain is taken into account for the compression stage.

+ + +

+ Middle - The sum of left and right channels.

+
+ +

+ Side - The difference between left and right channels.

+
+ +

+ Left - Only left channel is used.

+
+ +

+ Right - Only right channel is used.

+
+ +

+ Min - The absolute minimum value is taken from stereo input.

+
+ +

+ Max - The absolute maximum value is taken from stereo input.

+
+
+
+ + + <em style="strong" its:withinText="nested">PreAmplification</em> + +

Gain applied to the Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">Reactivity</em> + +

The time that defines the number of samples used to process the Sidechain in RMS, Uniform and Low-Pass modes. Higher the value, more smooth the compression.

+
+ + + <em style="strong" its:withinText="nested">Lookahead</em> + +

The signal to compress is delayed by this amount of time, so that the compression will be applied earlier than it would be otherwise. The corresponding delay is reproduced on the output signal.

+
+
+
+
+ Sidechain Filters + + + + <em style="strong" its:withinText="nested">High-Pass Filter Mode</em> + +

Sets the type of the High-Pass filter applied to Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">High-Pass Frequency</em> + +

Sets the cut-off frequency of the High-Pass filter.

+
+ + + <em style="strong" its:withinText="nested">Low-Pass Filter Mode</em> + +

Sets the type of the Low-Pass filter applied to Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">Low-Pass Frequency</em> + +

Sets the cut-off frequency of the Low-Pass filter.

+
+
+
+
+ References + + +

+ Wikipedia Dynamic Range Compression +

+
+ +

+ LSP Sidechain Compressor Stereo +

+
+ +

+ Black Ghost Audio - The Ultimate Guide to Compression +

+
+ +

+ Attack Magazine - Demolishing The Myths of Compression +

+
+
+
+
\ No newline at end of file diff --git a/help/C/convolver.page b/help/C/convolver.page new file mode 100644 index 0000000..6c4d254 --- /dev/null +++ b/help/C/convolver.page @@ -0,0 +1,56 @@ + + + + + + Convolver +

The Convolver creates a simulation of an audio environment using a pre-recorded audio sample of the impulse response of the space being modeled. This feature is based on the "convolution": a process through which the sonic characteristics of one signal are used to alter the character of another.

+

Easy Effects Convolver offers the opportunity to apply multiple impulse responses by combining them in one file.

+ + + + <em style="strong" its:withinText="nested">Impulses</em> + +

Manage impulse response files. This menu allows to load a specific impulse or add/remove files from the Easy Effects configuration directory.

+
+ + + <em style="strong" its:withinText="nested">Combine</em> + +

Select two impulse responses to combine into a single file to be saved under the Easy Effects configuration directory.

+
+ + + <em style="strong" its:withinText="nested">Stereo Width</em> + +

Modify the impulse response stereo image width.

+
+ + + <em style="strong" its:withinText="nested">Spectrum</em> + +

Visualize the frequency spectrum of the selected channel.

+
+
+
+ References + + +

+ Wikipedia Reverb Effect +

+
+ +

+ Indiana University - Convolution: A Form of Cross-Synthesis +

+
+ +

+ Designing Sound - Recording Impulse Responses +

+
+
+
+
diff --git a/help/C/crossfeed.page b/help/C/crossfeed.page new file mode 100644 index 0000000..d2a0c09 --- /dev/null +++ b/help/C/crossfeed.page @@ -0,0 +1,63 @@ + + + + + + Crossfeed +

Easy Effects uses the Crossfeed by bs2b. This plugin is used to improve headphone listening of stereo audio records. It does so by mixing the left and right channel in a way that simulates a stereo speaker setup while using headphones.

+ + + + <em style="strong" its:withinText="nested">Cutoff</em> + +

Low-Pass filter cutoff frequency.

+
+ + + <em style="strong" its:withinText="nested">Feed</em> + +

Amount of signal from a channel that is sent to the other.

+
+ + + <em style="strong" its:withinText="nested">Presets</em> + + + +

+ Default + - Closest to virtual speaker placement (30°, 3 meters). +

+
+ +

+ Cmoy + - Close to Chu Moy's Crossfeed (popular). +

+
+ +

+ Jmeier + - Close to Jan Meier's CORDA amplifiers (little change). +

+
+
+
+
+
+ References + + +

+ Wikipedia Crossfeed +

+
+ +

+ Bauer Stereophonic-to-Binaural DSP. +

+
+
+
+
diff --git a/help/C/crystalizer.page b/help/C/crystalizer.page new file mode 100644 index 0000000..30ce47d --- /dev/null +++ b/help/C/crystalizer.page @@ -0,0 +1,39 @@ + + + + + + Crystalizer +

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.

+ + + + <em style="strong" its:withinText="nested">Intensities</em> + +

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.

+
+ + + <em style="strong" its:withinText="nested">Bypass</em> + +

When active the audio signal passing through the selected band is not modified.

+
+ + + <em style="strong" its:withinText="nested">Mute</em> + +

Mutes the selected band.

+
+
+
+ References + + +

+ Wikipedia Dynamic Range +

+
+
+
+
diff --git a/help/C/deesser.page b/help/C/deesser.page new file mode 100644 index 0000000..380f0f3 --- /dev/null +++ b/help/C/deesser.page @@ -0,0 +1,98 @@ + + + + + + Deesser +

A Deesser is used to dynamically reduce high frequencies. The standard field of use of this plugin is the reduction of "sssss" and "shhhh" in vocal tracks. Easy Effects uses the Deesser developed by Calf Studio Gear.

+ + + + <em style="strong" its:withinText="nested">Detection</em> + +

Select the detection of the Sidechain signal between Peak (stronger) and RMS (smoother).

+
+ + + <em style="strong" its:withinText="nested">Mode</em> + +

Select the operation mode between Wideband and Split. In Split mode not the full range signal will be affected by the gain reduction, but only frequencies above the split frequency will be manipulated in gain.

+
+ + + <em style="strong" its:withinText="nested">F1 Split</em> + +

The split frequency. All signals above this frequency will affect the gain reduction (and are affected in Split mode too).

+
+ + + <em style="strong" its:withinText="nested">F1 Gain</em> + +

It shifts the volume of the higher band. In Wideband mode it affects the Sidechain. In Split mode it also affects the processed high frequencies.

+
+ + + <em style="strong" its:withinText="nested">F2 Peak</em> + +

Center frequency of the bell filter. It allows a more precise selection of the Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">F2 Level</em> + +

Increases or decreases the level of the chosen F2 frequency.

+
+ + + <em style="strong" its:withinText="nested">F2 Peak Q</em> + +

Set the quality of the bell filter. Higher values will affect a narrower frequency range. Lower values will affect a wider band.

+
+ + + <em style="strong" its:withinText="nested">Laxity</em> + +

The reaction of the Deesser. Higher values won't affect really short peaks.

+
+ + + <em style="strong" its:withinText="nested">Threshold</em> + +

The level above which the gain reduction is applied.

+
+ + + <em style="strong" its:withinText="nested">Ratio</em> + +

The amount of attenuation applied to the signal.

+

For example, a Ratio of 2 means that if the level rises 4 dB above the Threshold, it will be only 2 dB above after the reduction.

+
+ + + <em style="strong" its:withinText="nested">Makeup</em> + +

The gain to apply after the processing stage. In Split mode only the high band will be made up.

+
+
+
+ References + + +

+ Wikipedia De-essing +

+
+ +

+ Calf Deesser +

+
+ +

+ LedgerNote - De-esser: The Guide for Sibilant-Free Vocal Recordings +

+
+
+
+
diff --git a/help/C/delay.page b/help/C/delay.page new file mode 100644 index 0000000..f717be1 --- /dev/null +++ b/help/C/delay.page @@ -0,0 +1,62 @@ + + + + + + Delay +

This plugin allows the user to add a short Delay of time to each individual channel of the stereo stream. Easy Effects Delay uses the Delay Compensator Stereo by Linux Studio Plugins set in time mode.

+ + + + <em style="strong" its:withinText="nested">Left Delay</em> + +

Left channel delay in milliseconds.

+
+ + + <em style="strong" its:withinText="nested">Right Delay</em> + +

Right channel delay in milliseconds.

+
+ + + <em style="strong" its:withinText="nested">Left Dry Level</em> + +

Amount of right unprocessed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Right Dry Level</em> + +

Amount of right unprocessed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Left Wet Level</em> + +

Amount of left processed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Right Wet Level</em> + +

Amount of right processed signal mixed in the output.

+
+
+
+ References + + +

+ Wikipedia Delay (audio effect) +

+
+ +

+ LSP Delay Compensator Stereo +

+
+
+
+
diff --git a/help/C/echocanceller.page b/help/C/echocanceller.page new file mode 100644 index 0000000..d631de2 --- /dev/null +++ b/help/C/echocanceller.page @@ -0,0 +1,38 @@ + + + + + + Echo Canceller +

The Echo is a reflected sound wave with sufficient magnitude and delay to be detectable as a signal distinct from the source one. An Echo Canceller is used to improve voice quality by preventing Echo from being created or removing it after it has been added to the source signal. Easy Effects uses the Echo Canceller from SpeexDSP library.

+ + + + <em style="strong" its:withinText="nested">Frame Size</em> + +

The amount of time in milliseconds to process at once. It is recommended to use a frame size in the order of 20 ms.

+
+ + + <em style="strong" its:withinText="nested">Filter Length</em> + +

The amount of time of the Echo cancelling filter to use (also known as tail length). The recommended tail length is approximately the third of the room reverberation time. For example, in a small room, reverberation time is in the order of 300 ms, so a tail length of 100 ms is a good choice.

+
+
+
+ References + + +

+ Wikipedia Echo Suppression and Cancellation +

+
+ +

+ Speex Acoustic Echo Canceller +

+
+
+
+
diff --git a/help/C/effectsorder.page b/help/C/effectsorder.page new file mode 100644 index 0000000..4159e79 --- /dev/null +++ b/help/C/effectsorder.page @@ -0,0 +1,9 @@ + + + + + + Changing Effects Order +

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.

+
diff --git a/help/C/enableapp.page b/help/C/enableapp.page new file mode 100644 index 0000000..72545b1 --- /dev/null +++ b/help/C/enableapp.page @@ -0,0 +1,11 @@ + + + + + + Enable or Disable an Application +

The user can choose which applications have effects applied through the Enable checkbutton. "Process All Inputs/Outputs" option in General Settings can be activated to always apply effects to whichever application. +

+

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 Excluded Apps). 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.

+
diff --git a/help/C/equalizer.page b/help/C/equalizer.page new file mode 100644 index 0000000..70456b6 --- /dev/null +++ b/help/C/equalizer.page @@ -0,0 +1,240 @@ + + + + + + Equalizer +

The Equalization in sound recording and reproduction is the process of adjusting the volume of different frequency bands within an audio signal. Easy Effects uses the Parametric Equalizer from Linux Studio Plugins. The user can choose from 1 to 32 bands. Width and center frequency of each band can be customized as needed.

+
+ Global Options + + + + <em style="strong" its:withinText="nested">Bands</em> + +

The number of bands.

+
+ + + <em style="strong" its:withinText="nested">Mode</em> + + + +

+ IIR + - Infinite Impulse Response filters, nonlinear minimal phase. In most cases does not add noticeable latency to output signal. +

+
+ +

+ FIR + - Finite Impulse Response filters with linear phase, finite approximation of Equalizer's impulse response. Adds noticeable latency to output signal. +

+
+ +

+ FFT + - Fast Fourier Transform approximation of the frequency chart, linear phase. Adds noticeable latency to output signal. +

+
+
+
+ + + <em style="strong" its:withinText="nested">Balance</em> + +

Balance between left and right output channels.

+
+ + + <em style="strong" its:withinText="nested">Pitch Left</em> + +

The frequency shift for all filters of the left channel, in semitones.

+
+ + + <em style="strong" its:withinText="nested">Pitch Right</em> + +

The frequency shift for all filters of the right channel, in semitones.

+
+ + + <em style="strong" its:withinText="nested">Split Channels</em> + +

When enabled it is possible to apply different configurations to left and right channels.

+
+ + + <em style="strong" its:withinText="nested">Flat Response</em> + +

This function sets each band gain to 0.

+
+ + + <em style="strong" its:withinText="nested">Calculate Frequencies</em> + +

This function calculates the center frequency and the width of each band using the current number of bands. Useful when the user wants fewer than 32 bands but has no idea about which frequencies should be chosen.

+
+
+
+
+ Band Options + + + + <em style="strong" its:withinText="nested">Type</em> + + + +

+ Off + - The filter is not working (turned off). +

+
+ +

+ Bell + - Bell filter with smooth peak/recess. +

+
+ +

+ High Pass + - High Pass filter with rejection of low frequencies. +

+
+ +

+ High Shelf + - Shelving filter with adjustment of high frequency range. +

+
+ +

+ Low Pass + - Low Pass filter with rejection of high frequencies. +

+
+ +

+ Low Shelf + - Shelving filter with adjustment of low frequency range. +

+
+ +

+ Notch + - Notch filter with full rejection of selected frequency. +

+
+ +

+ Resonance + - Resonance filter with sharp peak/recess. +

+
+ +

+ All Pass + - All Pass filter. +

+
+
+
+ + + <em style="strong" its:withinText="nested">Mode</em> + + + +

+ RLC + - Very smooth filters based on similar cascades of RLC contours. Bilinear Z-transform (BT) or Matched Z-transform (MT) is used for pole/zero mapping. +

+
+ +

+ BWC + - Butterworth-Chebyshev-type-1 based filters. Does not affect Resonance and Notch filters. Bilinear Z-transform (BT) or Matched Z-transform (MT) is used for pole/zero mapping. +

+
+ +

+ LRX + - Linkwitz-Riley based filters. Does not affect Resonance and Notch filters. Bilinear Z-transform (BT) or Matched Z-transform (MT) is used for pole/zero mapping. +

+
+ +

+ APO + - Digital biquad filters derived from canonic analog biquad prototypes digitalized through Bilinear transform. These are textbook filters which are implemented as in the Equalizer APO software. Direct design (DR) is used to serve the digital filter coefficients directly in the digital domain, without performing transforms. +

+
+
+
+ + + <em style="strong" its:withinText="nested">Slope</em> + +

The slope of the filter characteristics.

+
+ + + <em style="strong" its:withinText="nested">Solo</em> + +

Makes the selected band the only one active.

+
+ + + <em style="strong" its:withinText="nested">Mute</em> + +

Mutes the selected band.

+
+ + + <em style="strong" its:withinText="nested">Frequency</em> + +

Center frequency of the selected band.

+
+ + + <em style="strong" its:withinText="nested">Width</em> + +

Bandwidth calculated as width = frequency / quality. +

+
+ + + <em style="strong" its:withinText="nested">Quality</em> + +

The quality factor of the filter used.

+
+
+
+
+ References + + +

+ Wikipedia Equalization (audio) +

+
+ +

+ LSP Parametric Equalizer x32 LeftRight +

+
+ +

+ Wikipedia Q Factor +

+
+ +

+ How to EQ - Q Factor and Bandwidth in EQ: What They Mean +

+
+
+
+
diff --git a/help/C/exciter.page b/help/C/exciter.page new file mode 100644 index 0000000..7d3ded0 --- /dev/null +++ b/help/C/exciter.page @@ -0,0 +1,68 @@ + + + + + + Exciter +

An Exciter is used to produce high sound that is not present in the original signal. This is done by creating harmonic distortions of the signal which are restricted in range and added to the original signal. It raises the upper end of an audio signal without simply raising the higher frequencies like an Equalizer would do to create a more "crisp" or "brilliant" sound.

+ + + + <em style="strong" its:withinText="nested">Amount</em> + +

Amount of harmonics added to the original signal.

+
+ + + <em style="strong" its:withinText="nested">Harmonics</em> + +

Amount of newly created harmonics.

+
+ + + <em style="strong" its:withinText="nested">Scope</em> + +

The frequency above which harmonics are produced.

+
+ + + <em style="strong" its:withinText="nested">Ceiling (button)</em> + +

Constrain the excitement on the upper end.

+
+ + + <em style="strong" its:withinText="nested">Ceiling (value)</em> + +

The frequency above which no harmonics are produced.

+
+ + + <em style="strong" its:withinText="nested">Blend Harmonics</em> + +

The "colour" (or octave) of the harmonics.

+
+ + + <em style="strong" its:withinText="nested">Listen</em> + +

Mute the original signal and listen to the harmonics exclusively.

+
+
+
+ References + + +

+ Calf Exciter +

+
+ +

+ Wikipedia Exciter (effect) +

+
+
+
+
diff --git a/help/C/filter.page b/help/C/filter.page new file mode 100644 index 0000000..e797097 --- /dev/null +++ b/help/C/filter.page @@ -0,0 +1,50 @@ + + + + + + Filter +

A Filter is used to amplify (boost), pass or attenuate (cut) defined parts of a frequency spectrum. Easy Effects uses the Filter from Calf Studio Gear.

+ + + + <em style="strong" its:withinText="nested">Mode</em> + +

The type of the filter.

+
+ + + <em style="strong" its:withinText="nested">Frequency</em> + +

The center or cut-off frequency of the filter.

+
+ + + <em style="strong" its:withinText="nested">Resonance</em> + +

Add an accentuation to the center frequency. When used on a bandpass the surrounding frequencies are decreased in level and the band gets more narrow. A bandreject is narrowed down to a thin needle.

+
+ + + <em style="strong" its:withinText="nested">Inertia</em> + +

Smooths the jumps between frequencies.

+
+
+
+ References + + +

+ Wikipedia Audio Filter +

+
+ +

+ Calf Filter +

+
+
+
+
diff --git a/help/C/gate.page b/help/C/gate.page new file mode 100644 index 0000000..1d631f7 --- /dev/null +++ b/help/C/gate.page @@ -0,0 +1,245 @@ + + + + + + Gate +

The Gate attenuates signals that register below a Threshold. This kind of signal processing is used to reduce disturbing noise between useful signals. Easy Effects uses the Stereo Sidechain Gate from Linux Studio Plugins.

+
+ Gate Workflow +

The Gate begins to open when the Sidechain level becomes above the Attack Zone Start level.

+

The Gate fully opens when the Sidechain level becomes above the Attack Threshold level.

+

The Gate begins to close when the Sidechain level becomes below the Release Zone Start level.

+

The Gate fully closes when the Sidechain level becomes below the Release Threshold level.

+
+
+ Gate Options + + + + <em style="strong" its:withinText="nested">Attack Time</em> + +

The length of time it takes to restore roughly two-thirds of the gain reduction.

+
+ + + <em style="strong" its:withinText="nested">Release Time</em> + +

The length of time it takes to apply roughly two-thirds of the gain reduction.

+
+ + + <em style="strong" its:withinText="nested">Curve Threshold</em> + +

The Gate fully opens upon the Sidechain level becoming above Curve Threshold (displayed as Attack Threshold level).

+

If Hysteresis is not enabled, the Gate begins to close upon the Sidechain level becoming below Curve Threshold (displayed as Release Zone Start level).

+
+ + + <em style="strong" its:withinText="nested">Curve Zone Size</em> + +

The Gate begins to open upon the Sidechain level becoming above the Curve Threshold + Curve Zone (displayed as Attack Zone Start level).

+

If Hysteresis is not enabled, the Gate fully closes upon the Sidechain level becoming below the Curve Threshold + Curve Zone (displayed as Release Threshold level).

+
+ + + <em style="strong" its:withinText="nested">Hysteresis</em> + +

When enabled, Curve Threshold and Curve Zone apply only to the opening Gate, and separate parameters can be configured for closing Gate.

+
+ + + <em style="strong" its:withinText="nested">Hysteresis Threshold</em> + +

If Hysteresis is enabled, the Gate begins to close upon the Sidechain level becoming below Curve Threshold + Hysteresis Threshold (displayed as Release Zone Start level).

+
+ + + <em style="strong" its:withinText="nested">Hysteresis Zone Size</em> + +

If Hysteresis is enabled, the Gate fully closes upon the Sidechain level becoming below the Curve Threshold + Hysteresis Threshold + Hysteresis Zone (displayed as Release Threshold level).

+
+ + + <em style="strong" its:withinText="nested">Dry Level</em> + +

Amount of unprocessed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Wet Level</em> + +

Amount of processed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Reduction</em> + +

If the value is negative, it acts as the amount of gain reduction to apply to the input signal when the Gate is fully closed. If the value is positive, the Gate operates in "Reverse Mode": It reduces the amplitude when the signal is above the threshold.

+
+ + + <em style="strong" its:withinText="nested">Makeup</em> + +

The gain to apply after the gating stage.

+
+
+
+
+ Sidechain + + + + <em style="strong" its:withinText="nested">Listen</em> + +

Allows to listen the processed Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">Input Type</em> + +

Determines which signal is the Sidechain or, in other words, the signal that controls the gating stage.

+ + +

+ Internal - The Sidechain is the Gate input signal (taken after applying the plugin input gain).

+
+ +

+ External - The Sidechain is an external source took by a specific input device (typically a microphone).

+
+
+
+ + + <em style="strong" its:withinText="nested">Input Device</em> + +

Select the device for the External Sidechain.

+
+ + + <em style="strong" its:withinText="nested">Mode</em> + +

Determines how the Sidechain is evaluated for the gating stage.

+ + +

+ Peak - The Gate reacts according to the peaks.

+
+ +

+ RMS - The Gate reacts according to the average loudness measured by the root mean square.

+
+ +

+ Low-Pass Filter - The Gate reacts according to the signal processed by a recursive 1-pole Low-Pass filter.

+
+ +

+ Simple Moving Average - The Gate reacts according to the signal processed by the Simple Moving Average filter.

+
+
+
+ + + <em style="strong" its:withinText="nested">Source</em> + +

Determines which part of the Sidechain is taken into account for the gating stage.

+ + +

+ Middle - The sum of left and right channels.

+
+ +

+ Side - The difference between left and right channels.

+
+ +

+ Left - Only left channel is used.

+
+ +

+ Right - Only right channel is used.

+
+ +

+ Min - The absolute minimum value is taken from stereo input.

+
+ +

+ Max - The absolute maximum value is taken from stereo input.

+
+
+
+ + + <em style="strong" its:withinText="nested">PreAmplification</em> + +

Gain applied to the Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">Reactivity</em> + +

The time that defines the number of samples used to process the Sidechain in RMS, Uniform and Low-Pass modes. Higher the value, more smooth the gating.

+
+ + + <em style="strong" its:withinText="nested">Lookahead</em> + +

The signal to gate is delayed by this amount of time, so that the gating will be applied earlier than it would be otherwise. The corresponding delay is reproduced on the output signal.

+
+
+
+
+ Sidechain Filters + + + + <em style="strong" its:withinText="nested">High-Pass Filter Mode</em> + +

Sets the type of the High-Pass filter applied to Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">High-Pass Frequency</em> + +

Sets the cut-off frequency of the High-Pass filter.

+
+ + + <em style="strong" its:withinText="nested">Low-Pass Filter Mode</em> + +

Sets the type of the Low-Pass filter applied to Sidechain signal.

+
+ + + <em style="strong" its:withinText="nested">Low-Pass Frequency</em> + +

Sets the cut-off frequency of the Low-Pass filter.

+
+
+
+
+ References + + +

+ Wikipedia Dynamic Range Compression +

+
+ +

+ LSP Sidechain Gate Stereo +

+
+ +

+ Wikipedia Noise Gate +

+
+
+
+
\ No newline at end of file diff --git a/help/C/general.page b/help/C/general.page new file mode 100644 index 0000000..f91154d --- /dev/null +++ b/help/C/general.page @@ -0,0 +1,64 @@ + + + + + + General + + + + <em style="strong" its:withinText="nested">Launch Service at System Startup</em> + +

Start Easy Effects as a service in the next login.

+
+ + + <em style="strong" its:withinText="nested">Shutdown on Window Closing</em> + +

Terminates Easy Effects process on window close rather than keep it running in background.

+
+ + + <em style="strong" its:withinText="nested">Process All Output Streams</em> + +

Apply effects to the output of all audio applications (except those into the Excluded Apps). This will automatically activate the enable checkbutton that can be seen in the app list entries.

+
+ + + <em style="strong" its:withinText="nested">Process All Input Streams</em> + +

Apply effects to the input (microphone) of all audio applications (except those into the Excluded Apps). This will automatically activate the enable checkbutton that can be seen in the app list entries.

+
+ + + <em style="strong" its:withinText="nested">Ignore Streams from Monitor of Devices</em> + +

Do not process streams which are a duplication of the stream of existing devices. They, also known as Monitor Streams, are usually generated by applications like OBS to capture audio and redirect it to somewhere else, but may not be of any use in Easy Effects.

+
+ + + <em style="strong" its:withinText="nested">Use Cubic Volume</em> + +

Use cubic scale for app volume rather than linear one. Low percentages give lower volume.

+
+ + + <em style="strong" its:withinText="nested">Inactivity Timeout</em> + +

After this amount of time, Easy Effects stops audio processing and the internal filters are unlinked. This helps not wasting CPU resources while processing silence, but also makes sure the filters and not unlinked and relinked for small pauses of the stream.

+
+ + + <em style="strong" its:withinText="nested">Use Dark Theme</em> + +

Prefer the dark version of the Adwaita theme for Easy Effects window.

+
+ + + <em style="strong" its:withinText="nested">Hide Menus on Outside Clicks</em> + +

When a popover menu is shown, return to the main window when a click is made outside the widget.

+
+
+
diff --git a/help/C/guide_1.page b/help/C/guide_1.page new file mode 100644 index 0000000..7ec593a --- /dev/null +++ b/help/C/guide_1.page @@ -0,0 +1,294 @@ + + + + + + Enhancing your internal notebook speakers without using an Equalizer +

This tutorial was written for PulseEffects by Markus Schmidt (schmidt@boomshop.net) on November 2019 and updated two years later for the new Easy Effects on PipeWire.

+
+ Introduction +

If you're a notebook user relying on your internal speakers and you - like me - own a model suffering from a tinny, clanging sound, Easy Effects is your salvation!

+

Commercial operating systems on laptops these days often come with software like Dolby Theatre and the like to enhance the sound of lousy notebook speakers to something more substantial and acoustically rich. Under Linux, Easy Effects will do the job for you, although, compared to the commercial pendants, there's some manual tweaking required until the community sets up a database with presets for common machines.

+

This DSP software comes with everything needed to fatten the sound of your laptop speakers with a flexibility never found in other operating systems. Unfortunately the drawback of this flexibility is that average users will get lost in the sheer amount of possibilities. That's why this tutorial was created.

+
+
+ Why no Equalizer? +

We will attack the problems one by one utilizing specific signal processors, deliberately renouncing Equalizers. Equalizers are not of any help here but tend to make these kinds of problems even worse. This is because of the nature of this processor, but also because users tend to add to the signal (additive equalization) instead of trying to eliminate problems by removing from the signal (subtractive equalization) like it is usually done in the professional world.

+

But even subtractive equalization wouldn't be of any help since the amplifiers and speakers in a notebook are not loud enough by default, so trying to eliminate problems this way leads to a quiet and still castrated sound. And raising the volume afterwards generally leads to distorted sounds and other problems because the system was at its limits beforehand and just fiddling with the frequency response doesn't help at all.

+
+
+ Frequency Range +

We'll have to talk about the frequency range. For a better understanding and because of the way we will solve our problems I'll break it down to five ranges which are:

+ + +

+ Sub – + More or less vibrations up to something an ear can barely hear. Everything from 10 Hz to ~40 Hz. +

+
+ +

+ Low or Bass – + Where the whole fundament of a signal is located. Low end of bass drums, bass synthesizers and bass guitars are found here. Movies occupy this range with explosions, rumbling waters, thunder, heavy gun fire and the like. Absolutely missing on notebooks and tablets. Technically speaking it's ~60 Hz - ~200 Hz. +

+
+ +

+ Low-Mid – + Hit a 0.5 m³ cardboard box and you know what low-mids are. The "punch" of a sound is often located here, also the juice of snare drums and electric guitars. In Movies, roaring engines and shotguns are found in this range. We're talking about ~250 Hz - ~750 Hz. +

+
+ +

+ High-Mid – + This is the ears most important and sensitive range. The main information of any kind of signal is located here. Human voice, picking of guitars, attack of drums, the colour of a synthesizer - everything carrying the main information of sound. Something around ~1 kHz - ~4 kHz. +

+
+ +

+ Highs – + The air, the breathe, the sizzling, the splashing - this is the range of brightness. Everything around and above ~5 kHz. +

+
+
+
+
+ Test Signal +

You definitely need a good signal for this job. I decided to use the song G€LD by Seeed.

+

It is quite snappy, has lots of well defined substance, clear and bright highs, present vocals, comes with a very balanced frequency response and is a great mix in combination with great mastering. Afterwards I tested against various movies and other stuff like talks, classical music and the like and was convinced of the result. Well produced, modern pop music (avoid the 80's and 90's stuff) is always a good test signal for this kind of job. Movies are way too dynamic, so is classical music, and they normally don't cover a steady, broad frequency range like this kind of signal.

+

We will not be able to make the notebook bounce. What is the goal here is that everything contained in the mix gets audible in a well balanced manner and to gain a present, upfront, broad and hopefully rich sound.

+

I assume you don't utilize a player or source which is able to produce levels above 0 dB. I also assume you don't use e.g. video players volume bar to lower the volume of your source. This approach works well for defined, mixed and mastered sound sources like music, movies, tv and the like, played back at 100% volume in the player. Set the desired volume directly on your hardware after the processing happened.

+
+
+ Problems +

Let's investigate the biggest problems first:

+ + + + <em style="strong">Bass</em> + +

The most obvious problem of notebook speakers is the tinny, pressure-free sound not reproducing any kind of low-end. This is because of the size of the membranes and the inadequate housing. Fortunately software can work around this issue at least a bit.

+
+ + + <em style="strong">Highs</em> + +

Often the highs are quite bitchy, not representing the "air" but torturing the listener with searing sibilants. In order to fix that we need to equal this frequency range out.

+
+ + + <em style="strong">Overall Frequency Response</em> + +

Normally the relation between the different frequency ranges low, low-mid, high-mid and height is quite out-of-bounds. This needs correction, although I promised a tutorial without EQ.

+
+ + + <em style="strong">Distortion</em> + +

Because of the thin and neutered sound users tend to raise the volume or even add an Equalizer to raise missing frequency ranges. This normally leads to digital distortions because every signal above 0 dB at the sound card DAC will go from occasional crackling up to a totally distorted sound.

+
+ + + <em style="strong">Dynamic range</em> + +

With movies, but music as well, those tiny transducers tend to wiping away low-level sounds but going ballistic on loud and bassy sounds. For this reason it's recommended to reduce the overall dynamic range so you don't need to press your ear onto the palm rest when the lady in the movie starts whispering.

+
+ + + <em style="strong">Stereo Image</em> + +

The stereo base is quite narrow because of the positioning of the speakers inside the laptop which gives an impression of almost mono signals.

+
+
+
+
+ Solutions +

Let's start fixing the sound. The result will not come even close to something more substantial but at least we'll be able to get the best out of the physical boundaries of these transducers.

+

Every parameter we are gonna set absolutely depends on your situation and the hardware you've got. Every notebook has its own frequency response and dynamic range so there's no panacea. But the audio signal processors, their order and their missions are well defined and reproducible.

+

Don't care about clipping in the plugins level meters. The signal will be processed as 32 bit numbers internally (check title bar) which gives a non-clipping overhead of hundreds of decibels. The only thing that shouldn't happen is that there's clipping when the signal hits the sound card DAC (Digital-to-Analog Converter), which would result in digital distortion.

+

Let's head over to the signal chain:

+ + + + <em style="strong">Limiter</em> + +

We will start with the last signal processor being used. As I explained earlier, as soon as the signal hits the sound card DAC it has to be below 0 dB, otherwise it will result in a distorted, messy sound.

+

Delete already present processors in the list, then add the Limiter. You will not hear any difference, which is what we expect. It will hit in as soon as we start messing up the signal with all the other processors. Set PreAmp to 0 dB, Lookahead to 4 ms, Attack to 2 ms and Release to 8 ms.

+

A Limiter monitors the signal in (nearly) realtime and detects peaks over a certain Threshold, in our case 0 dB. Set also Stereo Link to 100%, Oversampling to Half x4, disable External Sidechain and Auto Leveling and leave remaining options to their defaults.

+

As soon as a peak is detected, it starts lowering the volume constantly (within the Lookahead) until the peak will be below Threshold. Afterwards it raises the volume again (within release time frame) until it is back to normal. This way we avoid signals above Threshold hitting the DAC without being noticed too much. If one tries to overdo limiting, it will definitely result in distortion and other side effects, but in our case it's just a fire-and-forget troubleshooter so we can concentrate on the results without trying to mess with levelling over and over again.

+

Don't overdo things! This might render your overall sound experience worse than before.

+

Let's look at the real processing now.

+
+ + + <em style="strong">Filter</em> + +

First of all we should remove frequencies that cannot be heard because even if the speakers are unable to reproduce them a lot of energy will be wasted in the process. This will lead to problems like not being able to use the full dynamic range and the introduction of digital and physical distortions.

+

Add the Filter to the list and place it on top, above the Limiter. Set the type to 36 dB High Pass (this will cut off everything below a frequency and will let everything above it pass) and the frequency to 50 Hz (which is definitely below your laptop's speakers abilities). Continuously raise the frequency by 10 Hz until you start hearing a change in the lower end of the audible signal, which should be around 130-160 Hz. Subtract 10% (or 15 Hz) and set it as the Filters frequency. On my machine it is 145 Hz, since the signal started being affected at 160 Hz.

+

What happened is that we removed everything the speakers can't reproduce at all, leaving a little bit of signal just below this frequency, which is quite important for the next step.

+
+ + + <em style="strong">Bass Enhancer</em> + +

Let's grow some testicles to the signal.

+

Add the Bass Enhancer and place it at the second position, between the Filter and the Limiter. Set the Floor to 10 Hz and forget about it (we already removed everything below the Filter plugin cutoff frequency). Raise Harmonics to 10 and start with a Scope of 200 Hz. Now start raising the Amount continuously until the bass takes over the whole energy, which is definitely too much. For me it works best at +24 dB. Which is huge but my ThinkPad P1 has the worst speakers I've ever heard in a 2.8k € notebook.

+

What happens is that the Bass Enhancer adds frequencies to the signal which weren't there before. While an Equalizer only raises stuff which is already in the signal, a Bass Enhancer improves the lower end by adding distortion to a specific frequency range. This kind of distortion adds so called Harmonics to the signal which is a multiple of existing frequencies. On the Blend slider you can choose seamlessly between 2nd and 3rd Harmonics, which means that a frequency of 100 Hz produces a new signal of 200/300/400/600/800/900 Hz... at varying (due to the Harmonics setting) and constantly decreasing levels. This means we're effectively raising the lower range into something better reproducible. It doesn't add or raise the real fundament (so your trousers won't start to flutter), but makes more audible signals that have been swallowed by the hardware before.

+

Later on, in order to refine the result, you should play with the Amount parameter to define the level of bass and maybe with the Scope to define the upper end of our additional Harmonics.

+
+ + + <em style="strong">Multiband Compressor</em> + +

This is the most demanding step in the chain. Even professionals have great respect for this signal processor since it's absolutely able to destroy your signals big time. But let's be honest, we're consumers and no one will hear the difference between 100 ms and 200 ms Attack time - even on notebook and tablet speakers. This means we can work with some reliable, well established defaults for the timing and frequency splits.

+

The Multiband Compressor will solve several things for us. It will cut outstanding and annoying frequencies, lower the overall dynamic range and figure our overall frequency response. The latter is what most people try to achieve with an Equalizer. Thing is Equalizers aren't dynamic which will add to the problems instead of solving anything.

+

Add the Multiband Compressor and place it at the third position, after the Bass Enhancer and before the Limiter.

+

Since the Bass Enhancer really raised the energy and level of the signal, lower the Multiband Compressor input gain to -6 dB as a starting point. Enable bands 2, 3 and 4. Set Modern Operating Mode and disable the Sidechain Boost. Then let's set the split frequencies for the different bands:

+ + +

Band 2 Start: 250 Hz

+
+ +

Band 3 Start: 1250 Hz

+
+ +

Band 4 Start: 5000 Hz

+
+
+

Afterwards let's set some defaults:

+ + +

Band 1

+ + +

Attack Time: 150 ms

+
+ +

Release Time: 300 ms

+
+ +

Attack Threshold: -16 dB

+
+ +

Ratio: 5

+
+ +

Knee: -12 dB

+
+ +

Makeup: 4 dB

+
+
+
+ +

Band 2

+ + +

Attack Time: 150 ms

+
+ +

Release Time: 200 ms

+
+ +

Attack Threshold: -24 dB

+
+ +

Ratio: 3

+
+ +

Knee: -9 dB

+
+ +

Makeup: 4 dB

+
+
+
+ +

Band 3

+ + +

Attack Time: 100 ms

+
+ +

Release Time: 150 ms

+
+ +

Attack Threshold: -24 dB

+
+ +

Ratio: 3

+
+ +

Knee: -9 dB

+
+ +

Makeup: 4 dB

+
+
+
+ +

Band 4

+ + +

Attack Time: 80 ms

+
+ +

Release Time: 120 ms

+
+ +

Attack Threshold: -24 dB

+
+ +

Ratio: 4

+
+ +

Knee: -9 dB

+
+ +

Makeup: 4 dB

+
+
+
+
+

Compression Mode for all enabled bands should be Downward. The remaining parameters can be left to their defaults. These values should be a good starting point.

+

A Compressor lowers signal levels which appear above a certain Threshold. It adds a simple multiplication to the signal defined by the Ratio. If the Threshold is set to -24 dB and Ratio to 2, a signal of -12 dB would in fact become -18 dB. In this example one can then raise the Makeup parameter to 6 dB, since this is what went "lost". So first of all we're rendering loud signals quieter to then raise the overall volume, which leads to less dynamic range with quiet parts becoming more audible.

+

The timing settings affect the "speed" of the compression. Attack means that a signal needs to go over Threshold for this amount of time until the Compressor reaches the full (negative) amplification. Release defines the amount of time the signal has to stay below Threshold until the amplification is back to 1 again.

+

A Multiband Compressor splits the signal in various frequency ranges to work on them exclusively with dedicated compression stages. This means that a very loud bass drum would not affect a crash cymbal, since they are clearly located in different bands.

+

Start playing around with these parameters:

+ + +

+ Makeup – + This is probably most important setting in this concept. Makeup raises the signal after compression stage which means that it directly influences the perceived volume of every single band. Or in other words: this is your Equalizer :). Raise Makeup of single bands to make them louder or quieter. On my ThinkPad P1 I ended up with 4 dB, 3 dB, 6 dB and 6 dB respectively in band 1, 2, 3 and 4. +

+
+ +

+ Input Level – + Set it to -6 dB by default, I ended up at -3 dB. What happens is that a higher input level pushes all bands of the Compressor equally, leading to a allegedly louder sound (well, the loudness was raised in fact) without tweaking every single band manually. This reduces the overall dynamic range, raising quiet parts and squeezing loud parts even more. +

+
+
+
+ + + <em style="strong">Stereo Tools</em> + +

After figuring our overall sound let's look for some icing on the cake.

+

Add the Stereo Tools and place it at the fourth position, after Multiband Compressor and before Limiter. This tool has a lot of functionality but we only need just a single parameter. Switch to the "Output" tab and set the parameter Stereo Base to 0.25. That's it.

+

Stereo Base acts on the two channels. It adds inverted signals crossover-wise. This way one can bring a full stereo signal down to mono seamlessly (by going negative values, -1 is fully mono) but also raise the stereo base by choosing positive numbers. This setting has lots of side effects, so avoid overdoing it! One of the bigger problems is that it reduces the bass range due to different effects, which is something we definitely don't want here.

+

Play with Stereo Base to spread the appearance of your sound to a nice, broad stage without losing the center (vocals, snare drums, conversations in movies) or substance in the lower end. Most likely values between 0 and 0.5 will give some good results.

+
+
+
+
+ Aftermath +

Hopefully you ended up with a better sound than before. This signal processor chain is able to completely trash your sound if not done right but also can improve it to compete with some high class notebook speaker systems. All manufacturers put on the pants the same way and Dolby Theatre is no rocket science but just some presets on a presumably comparable set of signal processors set up in the presumably same way as this tutorial explained.

+

When my notebook was new, I first ran the pre-installed Windows system in order to test if all hardware was working. Sound-wise I remembered the bad reputation of this machine in every test, so I tried some tunes on Youtube - and was quite convinced. After installing my Linux system the enthusiasm was totally gone - the sound turned into a squawking, pressure-less something. It became clear that all problems of the internal speakers where due to the missing sound chips DSP driver. But fortunately Wellington Wallace spent his spare-time casting the most important Calf and LSP plugins for this job into something usable on consumers systems. Thanks a bunch for that, mate!

+
+
+ tl;dr +

Sorry dude, this isn't done by simply loading a preset, since the community is not Apple, Lenovo or Dell offering high quality Dolby Theatre drivers for your particular machine.

+
+
diff --git a/help/C/index.page b/help/C/index.page new file mode 100644 index 0000000..f14829b --- /dev/null +++ b/help/C/index.page @@ -0,0 +1,27 @@ + + + + + Wellington Wallace + wellingtonwallace@gmail.com + + + Easy Effects +

Easy Effects applies audio effects to applications managed by PipeWire. The user can apply effects to applications output or to the microphone before sending its audio to a recording application.

+

These are the Easy Effects help pages. Here you can find information concerning usage of the app, e.g. descriptions of each audio effect. Additional information beyond the scope of the app itself, e.g. how to build the app, is kept in a seperate wiki.

+

This documentation is available from within the app by clicking the Help button within the hamburger menu. This documentation is also available online.

+

Note the documentation within the app is offline and not automatically updated; it can only be updated by updating the app. The online documentation is automatically updated when a Easy Effects release is made, so it might be newer than the documentation within the app.

+
+ Guides +
+
+ User Interface +
+
+ Plugins +
+
+ Calibration +
+
diff --git a/help/C/limiter.page b/help/C/limiter.page new file mode 100644 index 0000000..187bf3f --- /dev/null +++ b/help/C/limiter.page @@ -0,0 +1,132 @@ + + + + + + Limiter +

A Limiter is a special type of downward Compressor which does not allow the signal to overtake a predetermined Threshold. Ideally it has a very high compression ratio that takes the amplitude below a ceiling which stands as the maximum output level. For this reason it is usually named "brick-wall limiter".

+

Easy Effects uses the Sidechain Stereo Limiter from Linux Studio Plugins. In most cases it works as a brick-wall limiter, but it offers also an additional feature that acts like a Compressor with extreme settings, so the output signal may exceed the specified Threshold.

+ + + + <em style="strong" its:withinText="nested">Mode</em> + +

Select the operative mode of the peak cutting algorithm which searches the peaks above the Threshold and applies short gain reduction patches to the signal.

+

These patches can be selected in 3 forms: + Hermite, + Exponential and + Linear. + Each one has 4 different variants related to gain reduction of the samples around the peak: + Thin, + Tail, + Duck and + Wide. +

+

The shape of each form and variant can be referred into the Linux Studio Plugin manual. See References section at the bottom of the present document.

+
+ + + <em style="strong" its:withinText="nested">Oversampling</em> + +

When enabled, the sample rate is internally increased in order to improve peak detection and reduce aliasing (that causes distortion).

+

The modes have 2 main types: Full, which increases both the Sidechain and the Input signals, and Half which increases only the Sidechain. Each one of them specifies different multipliers and, between parentheses, the number of "lobes in the kernel".

+

The oversampled Input signal is downsampled to the original sample rate after processing.

+
+ + + <em style="strong" its:withinText="nested">Dither</em> + +

If specified, it enables Dithering for the selected bit depth. The process of Dithering adds a low-level noise to output signal in order to mask "quantization distortion", a form of artifact present in digital audio rendered at lower bit depth.

+
+ + + <em style="strong" its:withinText="nested">SC PreAmp</em> + +

The gain applied to the Sidechain before it is processed.

+
+ + + <em style="strong" its:withinText="nested">Lookahead</em> + +

The size of the buffer used to detect the peaks in advance. It adds the corresponding latency to the output signal.

+
+ + + <em style="strong" its:withinText="nested">Attack</em> + +

The length of time it takes to apply the needed gain reduction to keep the peak below the Threshold.

+

It affects the length of the gain reduction patch. It cannot be larger than the Lookahead (if specified larger, it's set internally as the max possible value).

+
+ + + <em style="strong" its:withinText="nested">Release</em> + +

The length of time it takes to restore the reduced gain around the limited peak.

+

It affects the length of the gain reduction patch. It cannot be twice larger than the Lookahead (if specified larger, it's set internally as the max possible value).

+
+ + + <em style="strong" its:withinText="nested">Threshold</em> + +

The target level above which the Limiter should reduce the peak of the signal. In some modes it represents the maximum output level.

+
+ + + <em style="strong" its:withinText="nested">Threshold Boost</em> + +

If enabled it applies an amount of gain to the limited signal equal to the absolute value of the Threshold. This causes the peak limited at the Threshold level to output at 0 dB (it has only effect when the Threshold is set below 0 dB).

+
+ + + <em style="strong" its:withinText="nested">Stereo Link</em> + +

The degree of the channel linking. At 0% both channels are limited independently while at 100% the loudest one triggers the same gain reduction on both.

+
+ + + <em style="strong" its:withinText="nested">External Sidechain</em> + +

Switch the Sidechain to an external source took by a specific input device (typically a microphone).

+
+
+
+ Auto Leveling +

The Auto Leveling checkbutton introduces an additional feature named "Automated Level Regulation" (ALR) which acts like a Compressor with infinite ratio for the purpose of applying a smoothed gain reduction rather than a stronger peak cutter like in brick-wall mode. This configuration could get the output level to exceed the Threshold even if the signal is highly compressed.

+ + + + <em style="strong" its:withinText="nested">Attack</em> + +

Manage how the raise of the input signal affects the smoothness of the ALR curve that controls the gain reduction level. Higher the value, more quickly the curve goes to it's maximum.

+
+ + + <em style="strong" its:withinText="nested">Release</em> + +

Manage how the fall of the input signal affects the smoothness of the curve that controls the gain reduction level. Higher the value, more quickly the curve goes to it's minimum.

+
+ + + <em style="strong" its:withinText="nested">Knee</em> + +

Manage the Threshold of the ALR gain curve and, in fact, adjust the balance between two gain reduction stages. Raising the value delegates more work to the peak-cutting algorithm. Lowering the value delegates more work to the ALR gain reduction algorithm.

+
+
+
+
+ References + + +

+ Wikipedia Limiter +

+
+ +

+ LSP Sidechain Limiter Stereo +

+
+
+
+
diff --git a/help/C/loudness.page b/help/C/loudness.page new file mode 100644 index 0000000..79a7a68 --- /dev/null +++ b/help/C/loudness.page @@ -0,0 +1,90 @@ + + + + + + Loudness +

Easy Effects uses the Loudness Compensator from Linux Studio Plugins which applies the "equal-loudness contour" corrections to the input signal.

+

An equal-loudness contour is a measure of sound pressure level (SPL), over the frequency spectrum, for which a listener perceives a constant loudness when presented with pure steady tones. The unit of measurement for loudness levels is the phon and is arrived at by reference to equal-loudness contours.

+

Usage of equal-loudness contours solves many mixing problems that every sound engineer meets while working on the track. The main problem is that human ear perceives different frequencies for different volume settings in a different way. In other words, applying changes to the mix on the low volume settings may cause unexpected sounding of the mix at the maximum loudness.

+

The Loudness Compensator performs frequency response computations and applies the computed frequency response to the input signal depending on the output volume settings. Additionally it can provide ear protection by applying hard-clipping to the output signal if it exceeds the allowed configurable level.

+ + + + <em style="strong" its:withinText="nested">Standard</em> + +

Allows to select different equal-loudness contour standards.

+ + +

+ Flat + - Applies flat frequency response to the whole spectrum. It's similar to just a gain knob but useful to perform a comparison to other modes. +

+
+ +

+ ISO 226:2003 + - Recent equal-loudness contour standard published in 2003. +

+
+ +

+ Fletcher-Munson + - The first equal-loudness contour implementation by Harvey Fletcher and Wilden A. Munson published in 1933. +

+
+ +

+ Robinson-Dadson + - More accurate equal-loudness contour implementation by D.W. Robinson and R.S. Dadson published in 1956. It became the basis for the ISO 226:2003 standard. +

+
+
+
+ + + <em style="strong" its:withinText="nested">FFT Size</em> + +

Allows to select size of the Fast Fourier Transform frame used for the processing. The larger FFT frame is, the more precise the curve is approximated and the more latency is introduced.

+
+ + + <em style="strong" its:withinText="nested">Output Volume</em> + +

The output volume of the signal with applied equal loudness contour. It controls the loudness of the 1 kHz pure sine wave.

+
+ + + <em style="strong" its:withinText="nested">Clipping</em> + +

Allows to enable and the hard clipping of the output signal.

+
+ + + <em style="strong" its:withinText="nested">Clipping Range</em> + +

Allows to set the gap level for the hard clipping of the output signal.

+
+
+
+ References + + +

+ Wikipedia Equal-Loudness Contour +

+
+ +

+ LSP Loudness Compensator Stereo +

+
+ +

+ Lindos Electronics - Equal-Loudness Contours +

+
+
+
+
diff --git a/help/C/maximizer.page b/help/C/maximizer.page new file mode 100644 index 0000000..aea59bc --- /dev/null +++ b/help/C/maximizer.page @@ -0,0 +1,44 @@ + + + + + + Maximizer +

The Maximizer is a special type of Limiter that does not only prevent the signal to exceed a specified target level, but also adjusts the average Loudness of the audio track.

+

Easy Effects uses the Maximizer developed by ZamAudio. It acts like an Amplifier that feeds a brick-wall Limiter with a fixed Lookahead of 10 ms adding the corresponding delay to the output signal.

+ + + + <em style="strong" its:withinText="nested">Threshold</em> + +

This parameter represents the ideal amplification level needed by the signal.

+

It contributes along with the Ceiling to determine the amount of gain to apply to the signal before the limiting stage. The gain is calculated by (-Threshold) - (-Ceiling). +

+

For example, on Threshold -6 dB and Ceiling -2 dB, the signal is amplified by 4 dB and limited to not exceed -2 dB output level.

+
+ + + <em style="strong" its:withinText="nested">Ceiling</em> + +

This parameter represents the ideal attenuation level needed by the signal and the maximum allowed output level.

+

When the Threshold is set to 0 dB, the Ceiling is simply the gain reduction. When the Threshold is lowered, the signal is boosted without overtaking the Ceiling value.

+
+ + + <em style="strong" its:withinText="nested">Release</em> + +

Sets the release of the internal brick-wall Limiter. Lower values may introduce small artifacts.

+
+
+
+ References + + +

+ Sonarworks Blog - What Is A Maximizer? +

+
+
+
+
diff --git a/help/C/multibandcompressor.page b/help/C/multibandcompressor.page new file mode 100644 index 0000000..2af04ac --- /dev/null +++ b/help/C/multibandcompressor.page @@ -0,0 +1,311 @@ + + + + + + Multiband Compressor +

Easy Effects uses the Sidechain Multiband Compressor Stereo developed by Linux Studio Plugins. Please refer to the Compressor documentation to comprehend the basic functionality of the dynamic range compression.

+
+ Global Options + + + + <em style="strong" its:withinText="nested">Band Management</em> + +

This Compressor allows to split the input signal up to 8 bands. Each band is not attached to its strict frequency and can be controlled by completely different frequency range that can be obtained by applying Low-Cut and Hi-Cut filters to the Sidechain signal.

+

The first band is always enabled while the others can be activated if needed. When only the first band is enabled, the functionality is similar to the Singleband Sidechain Compressor. Otherwise the signal is split in more bands and each band is compressed individually. After the compression stage, the bands are mixed together to form the output result.

+
+ + + <em style="strong" its:withinText="nested">Operating Mode</em> + +

Determines how the input signal is split to obtain the different bands.

+ + +

+ Classic - The original signal is split using crossover filters. After the compression stage, all bands become phase-compensated using All-Pass filters.

+
+ +

+ Modern - Each band is processed by a pair of dynamic shelving filters. This mode allows a better control over the gain of each band.

+
+
+
+ + + <em style="strong" its:withinText="nested">Sidechain Boost</em> + +

If enabled, it introduces a special mode for assigning the same weight for higher frequencies opposite to lower frequencies.

+

When disabled, the frequency band is processed 'as is', but the usual audio signal has 3 dB/octave falloff in the frequency domain and could be compared with the pink noise. So lower frequencies take more effect on the Compressor rather than higher frequencies.

+

On the other hand the Sidechain Boost mode allows to compensate the -3 dB/octave falloff of the signal spectrum and, even more, makes the signal spectrum growing +3 dB/octave in the almost fully audible frequency range.

+

+ Pink applies +3 dB/octave while Brown applies +6 dB/octave Sidechain Boost. Each of them can use bilinear-transformed (BT) or matched-transformed (MT) shelving filter.

+
+ + + <em style="strong" its:withinText="nested">Sidechain Source</em> + +

If the External Sidechain is enabled inside at least one band, this combobox allows to select the input device as source.

+
+ + + <em style="strong" its:withinText="nested">Dry Level</em> + +

Amount of unprocessed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Wet Level</em> + +

Amount of processed signal mixed in the output.

+
+
+
+
+ Band Options + + + + <em style="strong" its:withinText="nested">Band Start</em> + +

Allows to change the lower end split frequency of the selected band. This value is assigned to the Band End of the previous enabled band. It can be modified for all bands except the first one, which is always enabled and its value is 0 Hz.

+
+ + + <em style="strong" its:withinText="nested">Band End</em> + +

Specify the upper end split frequency of the selected band. It cannot be directly modified and assumes the same value of the Band Start of the next enabled band. For the last enabled band it is always 24.000 Hz.

+
+ + + <em style="strong" its:withinText="nested">Compression Mode</em> + + + +

+ Downward - It's aimed to decrease the gain of the signal above the Threshold.

+
+ +

+ Upward - It's aimed to increase the gain of the signal below the Threshold.

+
+ +

+ Boosting - It's aimed to increase the gain of the signal below the Threshold by a specific amount.

+
+
+
+ + + <em style="strong" its:withinText="nested">External Sidechain</em> + +

The Sidechain is an external source took by a specific input device (typically a microphone).

+
+ + + <em style="strong" its:withinText="nested">Band Bypass</em> + +

If enabled, the selected band is not affected by the compression stage.

+
+ + + <em style="strong" its:withinText="nested">Solo</em> + +

Turns on the Solo mode to the selected band by applying -36 dB gain to the other non-soloing bands.

+
+ + + <em style="strong" its:withinText="nested">Mute</em> + +

Turns on the Mute mode applying -36 dB gain to to the selected band.

+
+ + + <em style="strong" its:withinText="nested">Attack Time</em> + +

The length of time it takes to apply roughly two-thirds of the targeted amount of compression ratio to the uncompressed band signal.

+
+ + + <em style="strong" its:withinText="nested">Release Time</em> + +

The length of time it takes to restore roughly two-thirds of the reduced gain (in Downward mode) or increased gain (in Upward/Boosting mode) to the compressed band signal.

+
+ + + <em style="strong" its:withinText="nested">Attack Threshold</em> + +

The target level around which the compression is applied (the range depends by the Knee).

+
+ + + <em style="strong" its:withinText="nested">Release Threshold</em> + +

Sets up the Threshold of the Release Time, calculated by summing the Release Threshold to the Attack Threshold.

+

If the Sidechain level is above that Threshold, the compressor uses the Release Time for the releasing stage. Otherwise the Attack Time is used in place of Release Time.

+

For example, with -10 dB Attack Threshold and -60 dB Release Threshold, if the Sidechain is above -10 + (-60) = -70 dB, the Release Time is used for the gain restoration. If the Sidechain is below -70 dB, the Attack Time is used for the gain restoration.

+
+ + + <em style="strong" its:withinText="nested">Ratio</em> + +

The amount of attenuation (in Downward mode) or amplification (in Upward/Boosting mode) that will be applied to the signal.

+

For example, when the Ratio is 2 in Downward mode and the Sidechain rises above the Threshold by 10 dB, the signal would be ideally reduced by 5 dB (10/2 dB). In practice this behavior mostly depends on how the Multiband Compressor is designed and configured.

+
+ + + <em style="strong" its:withinText="nested">Knee</em> + +

The range over which the Compressor switches from no compression to almost the full ratio compression (the Threshold usually sits at the center of this transition zone).

+
+ + + <em style="strong" its:withinText="nested">Makeup</em> + +

The gain to apply after the compression stage.

+
+
+
+
+ Band Sidechain Options + + + + <em style="strong" its:withinText="nested">Mode</em> + +

Determines how the Sidechain of the selected band is evaluated for the compression stage.

+ + +

+ Peak - The Compressor reacts according to the peaks.

+
+ +

+ RMS - The Compressor reacts according to the average loudness measured by the root mean square.

+
+ +

+ Low-Pass - The Compressor reacts according to the signal processed by a Low-Pass filter.

+
+ +

+ Uniform - The Compressor reacts according to the loudness measured by the average of the absolute amplitude.

+
+
+
+ + + <em style="strong" its:withinText="nested">Source</em> + +

Determines which part of the Sidechain is taken into account for the compression stage.

+ + +

+ Middle - The sum of left and right channels.

+
+ +

+ Side - The difference between left and right channels.

+
+ +

+ Left - Only left channel is used.

+
+ +

+ Right - Only right channel is used.

+
+ +

+ Min - The absolute minimum value is taken from stereo input.

+
+ +

+ Max - The absolute maximum value is taken from stereo input.

+
+
+
+ + + <em style="strong" its:withinText="nested">Low-Cut Filter</em> + +

Enables a custom Low-Cut Filter for the selected band.

+
+ + + <em style="strong" its:withinText="nested">Low-Cut Frequency</em> + +

Sets the cut-off frequency of the custom Low-Cut filter. If it is disabled, the default Low-Cut filter assumes internally the Band Start frequency as the cut-off frequency.

+
+ + + <em style="strong" its:withinText="nested">Hight-Cut Filter</em> + +

Enables a custom High-Cut Filter for the selected band.

+
+ + + <em style="strong" its:withinText="nested">Hight-Cut Frequency</em> + +

Sets the cut-off frequency of the custom High-Cut filter. If it is disabled, the default High-Cut filter assumes internally the Band End frequency as the cut-off frequency.

+
+ + + <em style="strong" its:withinText="nested">PreAmp</em> + +

Gain applied to the Sidechain signal of the selected band.

+
+ + + <em style="strong" its:withinText="nested">Reactivity</em> + +

The time that defines the number of samples used to process the Sidechain in RMS, Uniform and Low-Pass modes. Higher the value, more smooth the compression.

+
+ + + <em style="strong" its:withinText="nested">Lookahead</em> + +

The band signal to compress is delayed by this amount of time, so that the compression will be applied earlier than it would be otherwise.

+

Each band can have different Lookahead values. To avoid phase distortions in the mixing stage, all the bands are automatically delayed for an individually calculated period of time.

+
+ + + <em style="strong" its:withinText="nested">Boost Amount</em> + +

Maximum gain amplification to apply in Boosting Mode.

+
+ + + <em style="strong" its:withinText="nested">Boost Threshold</em> + +

The Threshold below which a constant amplification will be applied to the band signal in Upward Mode (it prevents from applying infinite amplification to very quiet signals).

+
+
+
+
+ References + + +

+ Wikipedia Dynamic Range Compression +

+
+ +

+ LSP Sidechain Multiband Compressor Stereo +

+
+ +

+ Black Ghost Audio - The Ultimate Guide to Compression +

+
+ +

+ Attack Magazine - Demolishing The Myths of Compression +

+
+
+
+
\ No newline at end of file diff --git a/help/C/multibandgate.page b/help/C/multibandgate.page new file mode 100644 index 0000000..d5f2af0 --- /dev/null +++ b/help/C/multibandgate.page @@ -0,0 +1,281 @@ + + + + + + Multiband Gate +

Easy Effects uses the Multiband Gate Stereo developed by Calf Studio Gear. Please refer to the Gate documentation to comprehend the basic functionality of the gating process.

+
+ Global Options + + + + <em style="strong" its:withinText="nested">Band Management</em> + +

This Gate allows to split the input signal up to 8 bands. Each band is not attached to its strict frequency and can be controlled by completely different frequency range that can be obtained by applying Low-Cut and Hi-Cut filters to the Sidechain signal.

+

The first band is always enabled while the others can be activated if needed. When only the first band is enabled, the functionality is similar to the Singleband Sidechain Gate. Otherwise the signal is split in more bands and each band is processed individually. After the gating stage, the bands are mixed together to form the output result.

+
+ + + <em style="strong" its:withinText="nested">Operating Mode</em> + +

Determines how the input signal is split to obtain the different bands.

+ + +

+ Classic - The original signal is split using crossover filters. After the gating stage, all bands become phase-compensated using All-Pass filters.

+
+ +

+ Modern - Each band is processed by a pair of dynamic shelving filters. This mode allows a better control over the gain of each band.

+
+
+
+ + + <em style="strong" its:withinText="nested">Sidechain Boost</em> + +

If enabled, it introduces a special mode for assigning the same weight for higher frequencies opposite to lower frequencies.

+

When disabled, the frequency band is processed 'as is', but the usual audio signal has 3 dB/octave falloff in the frequency domain and could be compared with the pink noise. So lower frequencies take more effect on the Gate rather than higher frequencies.

+

On the other hand the Sidechain Boost mode allows to compensate the -3 dB/octave falloff of the signal spectrum and, even more, makes the signal spectrum growing +3 dB/octave in the almost fully audible frequency range.

+

+ Pink applies +3 dB/octave while Brown applies +6 dB/octave Sidechain Boost. Each of them can use bilinear-transformed (BT) or matched-transformed (MT) shelving filter.

+
+ + + <em style="strong" its:withinText="nested">Sidechain Source</em> + +

If the External Sidechain is enabled inside at least one band, this combobox allows to select the input device as source.

+
+ + + <em style="strong" its:withinText="nested">Dry Level</em> + +

Amount of unprocessed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Wet Level</em> + +

Amount of processed signal mixed in the output.

+
+
+
+
+ Band Options + + + + <em style="strong" its:withinText="nested">Band Start</em> + +

Allows to change the lower end split frequency of the selected band. This value is assigned to the Band End of the previous enabled band. It can be modified for all bands except the first one, which is always enabled and its value is 0 Hz.

+
+ + + <em style="strong" its:withinText="nested">Band End</em> + +

Specify the upper end split frequency of the selected band. It cannot be directly modified and assumes the same value of the Band Start of the next enabled band. For the last enabled band it is always 24.000 Hz.

+
+ + + <em style="strong" its:withinText="nested">External Sidechain</em> + +

The Sidechain is an external source took by a specific input device (typically a microphone).

+
+ + + <em style="strong" its:withinText="nested">Band Bypass</em> + +

If enabled, the selected band is not affected by the gating stage.

+
+ + + <em style="strong" its:withinText="nested">Solo</em> + +

Turns on the Solo mode to the selected band by applying -36 dB gain to the other non-soloing bands.

+
+ + + <em style="strong" its:withinText="nested">Mute</em> + +

Turns on the Mute mode applying -36 dB gain to to the selected band.

+
+ + + <em style="strong" its:withinText="nested">Attack Time</em> + +

The length of time it takes to apply roughly two-thirds of the gain reduction.

+
+ + + <em style="strong" its:withinText="nested">Release Time</em> + +

The length of time it takes to restore roughly two-thirds of the gain reduction.

+
+ + + <em style="strong" its:withinText="nested">Curve Threshold</em> + +

The Gate fully opens upon the Sidechain level becoming above Curve Threshold.

+

If Hysteresis is not enabled, the Gate begins to close upon the Sidechain level becoming below Curve Threshold.

+
+ + + <em style="strong" its:withinText="nested">Curve Zone Size</em> + +

The Gate begins to open upon the Sidechain level becoming above the Curve Threshold + Curve Zone.

+

If Hysteresis is not enabled, the Gate fully closes upon the Sidechain level becoming below the Curve Threshold + Curve Zone.

+
+ + + <em style="strong" its:withinText="nested">Hysteresis</em> + +

When enabled, Curve Threshold and Curve Zone apply only to the opening Gate, and separate parameters can be configured for closing Gate.

+
+ + + <em style="strong" its:withinText="nested">Hysteresis Threshold</em> + +

If Hysteresis is enabled, the Gate begins to close upon the Sidechain level becoming below Curve Threshold + Hysteresis Threshold.

+
+ + + <em style="strong" its:withinText="nested">Hysteresis Zone Size</em> + +

If Hysteresis is enabled, the Gate fully closes upon the Sidechain level becoming below the Curve Threshold + Hysteresis Threshold + Hysteresis Zone.

+
+ + + <em style="strong" its:withinText="nested">Reduction</em> + +

If the value is negative, it acts as the amount of gain reduction to apply to the input signal when the Gate is fully closed. If the value is positive, the Gate operates in "Reverse Mode": It reduces the amplitude when the signal is above the threshold.

+
+ + + <em style="strong" its:withinText="nested">Makeup</em> + +

The gain to apply after the gating stage.

+
+
+
+
+ Band Sidechain Options + + + + <em style="strong" its:withinText="nested">Mode</em> + +

Determines how the Sidechain is evaluated for the gating stage.

+ + +

+ Peak - The Gate reacts according to the peaks.

+
+ +

+ RMS - The Gate reacts according to the average loudness measured by the root mean square.

+
+ +

+ Low-Pass Filter - The Gate reacts according to the signal processed by a recursive 1-pole Low-Pass filter.

+
+ +

+ Simple Moving Average - The Gate reacts according to the signal processed by the Simple Moving Average filter.

+
+
+
+ + + <em style="strong" its:withinText="nested">Source</em> + +

Determines which part of the Sidechain is taken into account for the gating stage.

+ + +

+ Middle - The sum of left and right channels.

+
+ +

+ Side - The difference between left and right channels.

+
+ +

+ Left - Only left channel is used.

+
+ +

+ Right - Only right channel is used.

+
+ +

+ Min - The absolute minimum value is taken from stereo input.

+
+ +

+ Max - The absolute maximum value is taken from stereo input.

+
+
+
+ + + <em style="strong" its:withinText="nested">Low-Cut Filter</em> + +

Enables a custom Low-Cut Filter for the selected band.

+
+ + + <em style="strong" its:withinText="nested">Low-Cut Frequency</em> + +

Sets the cut-off frequency of the custom Low-Cut filter. If it is disabled, the default Low-Cut filter assumes internally the Band Start frequency as the cut-off frequency.

+
+ + + <em style="strong" its:withinText="nested">Hight-Cut Filter</em> + +

Enables a custom High-Cut Filter for the selected band.

+
+ + + <em style="strong" its:withinText="nested">Hight-Cut Frequency</em> + +

Sets the cut-off frequency of the custom High-Cut filter. If it is disabled, the default High-Cut filter assumes internally the Band End frequency as the cut-off frequency.

+
+ + + <em style="strong" its:withinText="nested">PreAmp</em> + +

Gain applied to the Sidechain signal of the selected band.

+
+ + + <em style="strong" its:withinText="nested">Reactivity</em> + +

The time that defines the number of samples used to process the Sidechain in RMS, Uniform and Low-Pass modes. Higher the value, more smooth the gating.

+
+ + + <em style="strong" its:withinText="nested">Lookahead</em> + +

The band signal to gate is delayed by this amount of time, so that the gating will be applied earlier than it would be otherwise.

+

Each band can have different Lookahead values. To avoid phase distortions in the mixing stage, all the bands are automatically delayed for an individually calculated period of time.

+
+
+
+
+ References + + +

+ LSP Sidechain Multiband Gate Stereo +

+
+ +

+ Wikipedia Noise Gate +

+
+
+
+
\ No newline at end of file diff --git a/help/C/pipewire.page b/help/C/pipewire.page new file mode 100644 index 0000000..eb8be5d --- /dev/null +++ b/help/C/pipewire.page @@ -0,0 +1,43 @@ + + + + + + PipeWire +

PipeWire tab can be used to set default devices, autoloading presets and test signals in addition to refer to different information about PipeWire installation on the user system.

+ + + + <em style="strong" its:withinText="nested">General</em> + +

Choose between using default devices or select one of the connected devices managed by PipeWire.

+

PipeWire version, quantum values and sample rate are also reported inside the tab.

+
+ + + <em style="strong" its:withinText="nested">Presets Autoloading</em> + +

The list of autoloading presets associated to specific Devices and their Profile.

+

The user can change their combination selecting between the available Presets and the connected Devices from the relative comboboxes.

+
+ + + <em style="strong" its:withinText="nested">Modules</em> + +

The list of PipeWire modules installed on the system.

+
+ + + <em style="strong" its:withinText="nested">Modules</em> + +

The list of PipeWire clients loaded on the system.

+
+ + + <em style="strong" its:withinText="nested">Test Signal</em> + +

Configures a test signal for testing purpose.

+
+
+
diff --git a/help/C/pitch.page b/help/C/pitch.page new file mode 100644 index 0000000..524aeb8 --- /dev/null +++ b/help/C/pitch.page @@ -0,0 +1,136 @@ + + + + + + Pitch +

Pitch shifting is a sound recording technique in which the original Pitch of a sound is raised or lowered. Easy Effects uses the pitch shifter from SoundTouch.

+ + + + <em style="strong" its:withinText="nested">Mode</em> + +

Controls the method used for pitch shifting.

+ + +

+ High Speed - Uses a method with a CPU cost that is relatively moderate and predictable.

+
+ +

+ High Quality - Uses the highest quality method for pitch shifting. This CPU cost is approximately proportional to the required frequency shift.

+
+ +

+ High Consistency - Uses the method that gives greatest consistency when used to create small variations in pitch around the 1.0-ratio level. Unlike the previous two options, this avoids discontinuities when moving across the 1.0 pitch scale. It also consumes more CPU than the others in the case where the pitch scale is exactly 1.0.

+
+
+
+ + + <em style="strong" its:withinText="nested">Formant</em> + +

Controls the handling of formant shape (spectral envelope) when pitch-shifting.

+ + +

+ Shifted - Applies no special formant processing. The spectral envelope will be pitch shifted as normal.

+
+ +

+ Preserved - Preserves the spectral envelope of the unshifted signal. This permits shifting the note frequency without so substantially affecting the perceived pitch profile of the voice or instrument.

+
+
+
+ + + <em style="strong" its:withinText="nested">Transients</em> + +

Controls the component frequency phase-reset mechanism that may be used at transient points to provide clarity and realism to percussion and other significant transient sounds.

+ + +

+ Crisp - Resets component phases at the peak of each transient (the start of a significant note or percussive event). This usually results in a clear-sounding output, but it is not always consistent, and may cause interruptions in stable sounds present at the same time as transient events.

+
+ +

+ Mixed - Resets component phases at the peak of each transient, outside a frequency range typical of musical fundamental frequencies. The results may be more regular for mixed stable and percussive notes than Crisp option, but with a "phasier" sound. The balance may sound very good for certain types of music and fairly bad for others.

+
+ +

+ Smooth - Does not reset component phases at any point. The results will be smoother and more regular but may be less clear than the other transient options.

+
+
+
+ + + <em style="strong" its:withinText="nested">Detector</em> + +

Controls the type of transient detector used.

+ + +

+ Compound - Uses a general purpose transient detector which is likely to be good for most situations.

+
+ +

+ Percussive - Detects percussive transients.

+
+ +

+ Soft - Uses an onset detector with less of a bias toward percussive transients. This may give better results with certain material (e.g. relatively monophonic piano music).

+
+
+
+ + + <em style="strong" its:withinText="nested">Phase</em> + +

Controls the adjustment of component frequency phases from one analysis window to the next during non-transient segments.

+ + +

+ Laminar - Adjusts phases when stretching in such a way as to try to retain the continuity of phase relationships between adjacent frequency bins whose phases are behaving in similar ways. This should give good results in most situations.

+
+ +

+ Independent - Adjusts the phase in each frequency bin independently from its neighbours. This usually results in a slightly softer, phasier sound.

+
+
+
+ + + <em style="strong" its:withinText="nested">Cents</em> + +

Number of cents the Pitch will be increased or decreased.

+
+ + + <em style="strong" its:withinText="nested">Semitones</em> + +

Number of semitones the Pitch will be increased or decreased.

+
+ + + <em style="strong" its:withinText="nested">Octaves</em> + +

Number of octaves the Pitch will be increased or decreased.

+
+
+
+ References + + +

+ Wikipedia Pitch Shift +

+
+ +

+ SoundTouch Audio Time Stretcher Library - Attractive Features +

+
+
+
+
\ No newline at end of file diff --git a/help/C/reverb.page b/help/C/reverb.page new file mode 100644 index 0000000..7849ea0 --- /dev/null +++ b/help/C/reverb.page @@ -0,0 +1,81 @@ + + + + + + Reverberation +

Reverberation is the phenomenon of persistence of sound after the source has been stopped as a result of multiple reflections of the waves over objects within a closed surface. These reflections build up with each other and decay gradually as they are absorbed by the surfaces of objects in the space enclosed.

+

The Reverberation is different than Echo because the Echo is a reflected sound wave with sufficient magnitude and delay to be detectable as a signal distinct from the source one. To simulate the Reverberation effect, Easy Effects uses the Reverb plugin developed by Calf Studio Gear.

+ + + + <em style="strong" its:withinText="nested">High Frequency Damping</em> + +

Cutoff frequency of the reflections. It causes higher frequencies to decay faster.

+
+ + + <em style="strong" its:withinText="nested">Room Size</em> + +

Size of the space where simulated Reverberation occurs inside. It determines the time between reflections.

+
+ + + <em style="strong" its:withinText="nested">Diffusion</em> + +

Degree of uniformity. Higher values lead to less uniform Reverberation.

+
+ + + <em style="strong" its:withinText="nested">Pre Delay</em> + +

Additional delay. It corresponds to a distance between sound source and the nearest wall.

+
+ + + <em style="strong" its:withinText="nested">Decay Time</em> + +

The time it takes for Reverberation to fade out.

+
+ + + <em style="strong" its:withinText="nested">Dry Level</em> + +

Amount of unprocessed signal mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Wet Level</em> + +

Amount of processed signal (Reverberation) mixed in the output.

+
+ + + <em style="strong" its:withinText="nested">Bass Cut</em> + +

Removes low frequencies from the Reverberation.

+
+ + + <em style="strong" its:withinText="nested">Treble Cut</em> + +

Removes high frequencies from the Reverberation.

+
+
+
+ References + + +

+ Wikipedia Reverberation +

+
+ +

+ Calf Reverb +

+
+
+
+
diff --git a/help/C/rnnoise.page b/help/C/rnnoise.page new file mode 100644 index 0000000..e1b4bdb --- /dev/null +++ b/help/C/rnnoise.page @@ -0,0 +1,31 @@ + + + + + + Noise Reduction +

The Noise Reduction is a process aimed to attenuate the disturbing noise from a signal.

+

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.

+

Standard RNNoise Model is used and custom models can be imported to perform different types of noise reduction.

+
+ References + + +

+ Wikipedia Noise Reduction +

+
+ +

+ Wikipedia Recurrent Neural Network +

+
+ +

+ Jean-Marc Valin - RNNoise: Learning Noise Suppression +

+
+
+
+
diff --git a/help/C/saturated.page b/help/C/saturated.page new file mode 100644 index 0000000..e47e0e1 --- /dev/null +++ b/help/C/saturated.page @@ -0,0 +1,9 @@ + + + + + + Saturation Warning +

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 Limiter or the Maximizer plugin.

+
diff --git a/help/C/settingsmenu.page b/help/C/settingsmenu.page new file mode 100644 index 0000000..7a6ffb6 --- /dev/null +++ b/help/C/settingsmenu.page @@ -0,0 +1,8 @@ + + + + + + Settings Menu + diff --git a/help/C/spectrum.page b/help/C/spectrum.page new file mode 100644 index 0000000..f558993 --- /dev/null +++ b/help/C/spectrum.page @@ -0,0 +1,77 @@ + + + + + + Spectrum + + + + <em style="strong" its:withinText="nested">Enabled</em> + +

Show or hide the Spectrum.

+
+ + + <em style="strong" its:withinText="nested">Shape</em> + +

Choose the style of the animation.

+
+ + + <em style="strong" its:withinText="nested">Points</em> + +

Number of points/bars on the x axis.

+
+ + + <em style="strong" its:withinText="nested">Height</em> + +

Changes the height of the Spectrum.

+
+ + + <em style="strong" its:withinText="nested">Line Width</em> + +

The width of a single bar.

+
+ + + <em style="strong" its:withinText="nested">Fill</em> + +

Draw filled bars.

+
+ + + <em style="strong" its:withinText="nested">Show Bars Border</em> + +

Draw bars with borders.

+
+ + + <em style="strong" its:withinText="nested">Rounded Corners</em> + +

Draw bars with rounded corners.

+
+ + + <em style="strong" its:withinText="nested">Color</em> + +

Choose the color of the Spectrum components. +

+
+ + + <em style="strong" its:withinText="nested">Minimum Frequency Range</em> + +

Lower end frequency of the Spectrum.

+
+ + + <em style="strong" its:withinText="nested">Maximum Frequency Range</em> + +

Upper end frequency of the Spectrum.

+
+
+
diff --git a/help/C/speex.page b/help/C/speex.page new file mode 100644 index 0000000..dd36da4 --- /dev/null +++ b/help/C/speex.page @@ -0,0 +1,21 @@ + + + + + + Speech Processor +

This plugin allows EasyEffects to use the Speex preprocessor to attenuate disturbing background noises from a signal.

+

Compared to Noise Reduction which uses RNNoise to suppress noises, Speech Processor has the benefit of using less computational resources, at the cost of sacrificing noise suppression quality.

+

For more information on noise suppression in general, refer to the manual page on Noise Reduction.

+
+ References + + +

+ The Speex Project +

+
+
+
+
\ No newline at end of file diff --git a/help/C/stereotools.page b/help/C/stereotools.page new file mode 100644 index 0000000..a82c4f3 --- /dev/null +++ b/help/C/stereotools.page @@ -0,0 +1,130 @@ + + + + + + Stereo Tools +

Easy Effects uses the Stereo Tools developed by Calf Studio Gear which provides some handy utilities to manage Stereo streams handling Left and Right channels in conjunction with Mid and Side signals.

+

Mid/Side is a recording technique which registers Mid and Side signals rather then plain Left and Right channels. Its basic setup makes use of one cardioid microphone (Mid) and one bidirectional (figure-eight) microphone (Sides). In mastering stage Mid and Side can be used to shape the balance of the Stereo image having more control over the mix to get a wider, deeper, and more focused track.

+

Having a Stereo stream, Mid is obtained summing both channels (L+R) while Side is the result of the difference between Left and Right (L-R). Mid and Side signals can be decoded back to Left (M+S)/2 and Right (M-S)/2.

+
+ Input + + + + <em style="strong" its:withinText="nested">Balance</em> + +

Sets the balance between both channels.

+
+ + + <em style="strong" its:withinText="nested">Softclip (button)</em> + +

Makes a kind of analog distortion instead of harsh digital 0 dB clipping.

+
+ + + <em style="strong" its:withinText="nested">Softclip (value)</em> + +

Level of Softclip.

+
+
+
+
+ Stereo Matrix + + + + <em style="strong" its:withinText="nested">Mode</em> + +

Allows to choose between different channel configurations such as normal Stereo Mode, Mid-Side or Mono simulation.

+
+ + + <em style="strong" its:withinText="nested">Mute L/R</em> + +

Mutes the Left/Right channel.

+
+ + + <em style="strong" its:withinText="nested">Invert Phase L/R</em> + +

Changes the Phase of the Left/Right channel.

+
+ + + <em style="strong" its:withinText="nested">Side Level</em> + +

The level of the Side signal.

+
+ + + <em style="strong" its:withinText="nested">Side Balance</em> + +

The balance of the Side signal.

+
+ + + <em style="strong" its:withinText="nested">Middle Level</em> + +

The level of the Middle signal.

+
+ + + <em style="strong" its:withinText="nested">Middle Panorama</em> + +

The position in the Panorama of the Middle signal.

+
+
+
+
+ Output + + + + <em style="strong" its:withinText="nested">Balance</em> + +

Sets the balance between both channels.

+
+ + + <em style="strong" its:withinText="nested">Delay L/R</em> + +

Delays the Left or the Right channel. Negative values delay the Left channel and positive values the Right channel.

+
+ + + <em style="strong" its:withinText="nested">Stereo Base</em> + +

Sets the Stereo Base of the content seamless between Mono and inverted channels.

+
+ + + <em style="strong" its:withinText="nested">Stereo Phase</em> + +

Set the Stereo Phase of the content.

+
+
+
+
+ References + + +

+ Wikipedia Stereophonic Sound +

+
+ +

+ Calf Stereo Tools +

+
+ +

+ Unlock Your Sound - Stereo, Mono, Mid, Side, Panning, and Imaging Explained +

+
+
+
+
diff --git a/help/C/testsignals.page b/help/C/testsignals.page new file mode 100644 index 0000000..ba5f272 --- /dev/null +++ b/help/C/testsignals.page @@ -0,0 +1,35 @@ + + + + + + Test Signal +

A specific signal can be used to test the frequency response of the speakers.

+ + + + <em style="strong" its:withinText="nested">Enable</em> + +

Enable or disable the test signal.

+
+ + + <em style="strong" its:withinText="nested">Channel</em> + +

Choose if apply the test signal to left or right channel only, or both.

+
+ + + <em style="strong" its:withinText="nested">Signal</em> + +

The type of the signal: sine wave or white noise.

+
+ + + <em style="strong" its:withinText="nested">Frequency</em> + +

The frequency of the sine wave.

+
+
+
diff --git a/help/C/userpresets.page b/help/C/userpresets.page new file mode 100644 index 0000000..94434b2 --- /dev/null +++ b/help/C/userpresets.page @@ -0,0 +1,10 @@ + + + + + + Creating and Importing User Presets +

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.

+

A specific Preset can be autoloaded when an input or output device is added to the system. Just open the PipeWire tab, click on "Presets Autoloading", select the desired Preset and the device to associate from the two comboboxes, then click the add button.

+
diff --git a/help/meson.build b/help/meson.build new file mode 100644 index 0000000..0c61b84 --- /dev/null +++ b/help/meson.build @@ -0,0 +1,49 @@ +itstool = find_program('itstool', required: true) + +if not itstool.found() + error('itstool not found.') +endif + +help_pages = [ + 'advancedinfo.page', + 'autogain.page', + 'bassenhancer.page', + 'bassloudness.page', + 'blocklist.page', + 'compressor.page', + 'convolver.page', + 'crossfeed.page', + 'crystalizer.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' +] + +gnome_mod.yelp(meson.project_name(), + sources: help_pages +) diff --git a/images/appdata-screenshot-01.png b/images/appdata-screenshot-01.png new file mode 100644 index 0000000000000000000000000000000000000000..a25968fc55befff088e628964f0f7e113bb0cecb GIT binary patch literal 49811 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 O1X5M^e1Y=C+y4gLR__x4 literal 0 HcmV?d00001 diff --git a/images/appdata-screenshot-02.png b/images/appdata-screenshot-02.png new file mode 100644 index 0000000000000000000000000000000000000000..69180e1ec56f717f77685c0b659ae1d6f553ac11 GIT binary patch literal 69026 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 literal 0 HcmV?d00001 diff --git a/images/appdata-screenshot-04.png b/images/appdata-screenshot-04.png new file mode 100644 index 0000000000000000000000000000000000000000..caba199e79dfeaa97583d551877716382583826e GIT binary patch literal 57448 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 N;;HPDyhqPp{SQMm1x^3} literal 0 HcmV?d00001 diff --git a/images/appdata-screenshot-05.png b/images/appdata-screenshot-05.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0311ad85097a948a2d341b5b57778147463675 GIT binary patch literal 61295 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

-^s>jdFAmThg$Lq)~ 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 literal 0 HcmV?d00001 diff --git a/images/easyeffects-dark-screenshot-1.png b/images/easyeffects-dark-screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..de32de6376bfe8ea95827573f7603fffa1d59881 GIT binary patch literal 138536 zcmeFZcTkkuvo<>FHYw0wRh6l2H%?3P{c%N)ROHi~$)W83>Y5M8XVFhn$q8 z1QBqC43cxs`Su#O>`>qN)u~hWRNY(k%^!O^Gw;0b3f)gX{d6z9WTmg}-9@(xgTd^* zeoaCSgV~je!EEc8Py~ZHin%UvNx?pRq|GTnLobBuXC{toP?}ZusMk(9R!Z#A zW1H@||2%=+=Kn_zH@nr$(NkBiFy8Jwx`Wwrryn!^*fR-zhD&}$RY$!oj%) z)8nHRtNO>q+-biM>JtRqtaIWMlM|EG?G$Z9Yt#rv+6DRZnYek1nTA3~yFXx*|M&I( z*A=Kvifw0f-_}#GF##h^#c>KT7RnznFS3pxlO(^M1|8+xdr9Z{o1Uf3zdtiH-JG&# z=O*#QUb>CXXd|AeC%m3G7Hb~y`!b9yMW@oU12>Nc8*g0Z{^sb98=D4&|M;(WZBUqw1VIGOvn5){+8IO z^vT7;8>10h{6m%gwfVj7sSg{Uxex73=RJDtYgxC!#^f*r)-TOsPfpN#MqOcw+VcCJ zMc?=T9OzQ`y+3NM!o<>PRU_>A!d&|IoiTgP@J;X^*c{E$$q@SNd*_4^sV4VCKjX&tQ`dX* z_`>u@?dmD7F^E*psIm^VZ9E$z8E`LOP*sse#=R23ZD`{gXzVD&qscJS{z3;f$ zm(Xx3>b}&&!On|EHU`GhVE%+(e(U?;gxgE!m_HJ8x3JvI7Y{FHR5Otjq4|AT^zEJ3 z3f{|-aFJ2Br6T-A-|mjemqAj>N?lUHI!d<-{Uup5+9|{Kxpqc&hyZ_$qT(Q*la-Bx|P9 z3@gr!CG?>v-5eJ9l;87h&anA5DG!y(W{VioYf32s;;^pwbKLl}m zACnR<7$y1TJk7t$S{oWu$1 zpSVNP-2RSRC zNN>a$S1}~}hbmZ;@hvRRzRuzmx^sDIl|PMmI!TvXa)N$80wd{p`C*lFW#!I@ zOG?K`0+a#_h8I8MW)pMN?q?CGm$&}DSf_{f^mEnwuL%LG6nZ>x=^bYK*GY$qafBVo zq_=g6#v9A5V|^-av+?vGd+-=K@$82cY6`bF4GO|-0!`J& z3KDsS#POG(xI9gFG|Vr?l|D)&?21*QOWc@nv;~oQkDByr!jGfF*LI}sN+soP*&E#i z6Q)R3qBG*0ciu2+Ly^+U5kv+3Bt5jNJALMg?!||3x1RM$#3p&Yx?mEO%DF!(4aXW zFMkPpk-)CK#B5fh@1AO4=uKDCYGMMc=&BnI{GM@fIUIn=%Wh|kQU-7QO zQIvkgk32?@-~F+n;gbR2qyUtrZDE>QXVYbQ`b|uRLIpdgGnPk|GWkZVxP+ z-)3=}Z?W4h8Z&BfD%lWz{4`>FL;SR)G}nE7NX#W_((cx$F5@@jSsG=-$8{doeDc%2zk~4IHg<$n+nf-G zgRm=x&G2G#F)n*k{U<;5u{6p0zwJV3ApHf#(^a9lg`X1BcBT1YV%V%zhOIbRKdRn1 zN(j#=-5mQ^QKgzDhtt+amr7YGp$ZXd@(Y0nEhC=Um~B)2mk&|8mq>3Y(t_xit7-a@ zf-u87>aG!$D|e>MapA7O(0^vgniEuV2@Wdx7o^N;I_8W)%p~BIk&9=;tIAJvA%->18JUl(hV&{^! z)-y)`dm!#FIQWX_ZeP5h7XQ-d4Qzq=1GZzNPn(m(8Fi_2IP0(NOXa;WOOz{)U-Y|u z-JXZrvyrbm!%-c2&B|8;+sVQ?d6&-)`5w-AN~{+P$~RTNQ^b&dCqF_8{%0 zzR9UnN;q^GueV=^)6K0{Nt+RGIjEy3C)H$@&`ESwRJMAIl^=KdBZ}U z%dl*x+3j)3D!5-swR$h1Z=33FMN{AKx$OGbrz+EmcGZfvu!`=4JtnhbVh0m=|4=ox zC#bZjJyBlPe!NxLswKn3&CCl+qNRPpDE%nm_q2-)mHplC>Q7j=%+24Em@##$q3L<> zRV6ZnuW}DQdrTbAwK;gxoWgk2gshmAXAT7gKhP0>kS#OZ=4hI*42I zbY7^LW?CXH`x0qwFvCZA%$2)kUupk_$BE58eamk6#t63x7bq7zOZ*x>ST*0;n_XWD zP9;o`oo&24otR4T;swJ2d~bHI(h1JYQ5~?qy(xVeTzq+Ir?Z+nl3BENCuc}VRJ}fT z_nWlf=*Q@on7h(WPRl!i5aW_n)9thqY9Qpls$9sR1Jboz_heJqbvRNxbp>8%peNnAWdYDO(`J5zaI=;I1P z!!VqzMWJRbtu`T@KUyb@OiPJ#1G`f)Bqb_8-miZz6Cp6$lboEK&B(}jcO&>#dgxvhrr$5HiB*!R-dmFRS)l3< z6{(H}Sw-!nlX;;jmcu%o#31IBbG0;DCL!nUmW?FH$3+s`+VY*&zsV;k%*@P4n3~VJ=^ESpdv`I<4Da9fl3=DxN=m9Fk*G~fOloUuDLFY)t~B#LXq@;y zM8wgEEcU#bzp9P-z{;E3wl_kW9UTFkQO?wcF8uMFZG+#sWvL)`jRuV-)_OS8kl zT-pUIA12j!NY#|J^ox%Z7a!qQhncrMRk0F}??r2`8*{DY@~Gv`)F7SX+f=R^%@QGU zS>cj1u1Y9Nltem>IW(4d9jqA}7@(!6Ommp-Yy5a$9%kRizhP;ZFDXe$oH;o;Z$ErE z&&=%T=*U~J(B<7Py72R{R0dzuAxiZa`>iCS%lO1p-Yk-%oz9LQ=Znpp4k+)RZ2?AFkX{q%32O5 zV9SH%B{rTPtpHB$T^+`EmH7pBZfo()XZ@VDgW&^bAGcF`hndPp)bUqJrS=rpg5QX4~`8A1> zr+evji=XaYtl7U|V(dTa>km>=g6-EfHSx2smV~NXoC}<6fB7LVe82J7l5>4&b0D{9 zxTFHDlDo~sYCw98+n?&yD0LW}MG5$V(3A@n zZw4hE&MrQ}d2Ggo469`p`g>vLGV@1GJa3`Bq;v^X_E6qfJz68!FUneFF9Hr{tYl!& zf8LmccMw{d0>5%IBpe7)&2QMt?k{Bs#x$VYUD+L4u%3ycPz@el@ zK+pQ~^#gqn1Ez<*{}v%QpZ?`b)|Jj^qkC2TBE5N}!}*`~D3Z*77~<@<)3xf*++?FM z<2+O6oG{V)44=(sGKS-1ZU$FPYd~%+De<5&^-UEL9Ass{>d(P9hGu5|85tSZjyrQv zJyqil@o8^wZ-lLR(3Fl$QEB`Pc`3JVu8EqSnmHE>1*_HVmb`l1N*(ae*G8vvb z8N#0}A#waXuZ$jEO7C<{Cf?0qEM3zEmrsk*cb_^zZOif+=E_hm6x1XS-ot>Svwe^ma&u6b6 zKY-A#t*s4xQMNGI9YY`x+S|zdg_aULRd>3tnvyb2xCOQXuYTficI&K12HTJ1fLWr^ z48A*csv&tu!HQBrUO!8AmUuZ(MV;lXOY_J3W@BSx?ZV8u_3v*5&NE;z?sw{&nhpz& zW!<&5wI$_ph-I;om%=DXw2}m1y$lxJ&fv0%M50|u=<&Fm{30#yQ1Oc`$Mhek$xV3Lk@TTZ>r%~e04gdX8e zH&FA@q$Vr&yjhF#z99eM;E<$BMQQ02rKY0G!&|j759%cO%W)8>bIq;HDlYTgSC=^c zUM5Ne2VwdFd*A^b2+fA(U`^~PmtWC}x;lT%pr$`aj@LS8)iWM=DX>$a7#at^;aE!d z%|1rb4axp;KEh1IPP?@ET#4jmcft`GX}0pyaX%(>md^yyaVbz_uLokWK@qmigQ-|- zWMt&79H3%F=2I$`hG)jej^{o!YtWKm&{o%!DU{;svFmbQa%Dq-LTn#~o~OL=JG$%b zL%Foi0_n~W_E@Baaap;TR^)Lq>jKgEz{2e4!qv_EhS`Ji5b`EOEEq%w|_gRgVYe_yMrbvCTh9Jb7EwG+nTx#xRwh+fGvo zF_s;hU`gF2`M|Fn?KZ``JCP%1w7_ap#;9uMWku!XUXF#=I2DofaE1<91s$qKdpD78 z{FwTjz&ogUia(M+0wxW#hmkVPq$Q)m5m^*K(eH7AYrAIjioLCVyEfx{*$8;^H#WUb^`^JV zE%$Hd@DggYATJY|o*^^PB;;J0nwpB^xcq$K=9ZSbtyvanK;Rm)EbfZ`p_*A)T^P$O zI1!@$f=5@!p2sfCx%?D0d(u0j;rM;ALE`QNi#^oboYcD28d147?Kec4=&!zvg1kAo zxt{kr;P$mdA{9bN07r_i=h&aCU*gfGBI$M#b(g8QO)xRSMQYcxKD0*P7b%ToQ#JyL zB51Zys1V%p*DLxupjat@G!P7zFaAIV!DkrLAaD+hjxtVl?`5WJQq9sO%6W5g=xH)D zZ{rXZJoKsYHsgCL)6;F{%G{i+JUjBbF-Fk{7(;(q;(0}erZ=Om`(o{5pT$CbH!n^P{KyHQd}*#sXvnKbjL zBCj)a?(Ie@MOzJ^qzk(+J0|Hv&zBr|jN}>;l4X=`)5{R|-PY29=ZDfb#f8_pGz~iU zM_U&!LvE+2I8FGv_Z_wIE3>fHQJA2PL{wszn5>Uly8tm_s8yWy@JX3ShPX&aqr7g$aV+3s zdPZC79r0F&{s@c7QkwEm9^&z#FA~)nT5~sf+0j9+o!Q zEdj5BrF!po6rK)DE4*C);+(djD%-GRtUd)V>Fs#z`EG78jr(2;H652Hl={^|L`0YNEbriOWg;^Jfx5Z5D)vFK( zBAm($^;%;c<=@}*y5db;YMMJ5WVg!VFLZ!4%GpwAePz11^*pUAn%DZA**Y~4%VAt| zO*6r`yYa67>^RaRf5?KbgCV?WZ~J0A+Ds4^+19ac_fp*~e>Qqxw_^bv<=4^ruRaYK zqm@e?%MDj0m%pe4FFq3*&o-G(8V>e(u(&xPVRPj)A>~RmflWNk>rV+tNtG<%O{-`J_ty{5j z7EOA=J5w(oT%Pb0)wqz?Y}Qv5Vo`Oje2=)lPLE@`V0-QJWe5T8wWcGDX|?U`TH~gN zezdnA`4y45zmD)^XE@qLUq0h5BC_3(J3)b6%XP805pn?*=C=d_5A_)hT1ra34reRj zT*&hG_7*d(nKQU9bXu%TmK$(JA)B>pci8e7*Rk9_-$hb4V;nQx%roDXCFjecWKyndLS5|adyKhqL4pe1rsib6PZnT zEns6rno|9sU;5c&cMJ~4k&hS6Thd;i)h=$k6P z=~68&ney<0@m5l&0&aH(iKc*l=hN$N%rGWEjgL5uq-71h59@kLZ;DM)&y zgO<~%yJ!YYeRDG%jh6kLj{tYK_}Ua+xo*LTofqhPeYfk~D`~n^4SOod0?TdrVb1Oh zbR?ZX^Uws#YLEpE88;-GyfZpmZ1gco6v)g6AcCsh9lpshY#`r_*9z@OIZK8~a}5EC zw>|3(_onhXz5Y1(8OPUVEkBYs{cTH-Sz8W|Qj!{#jOeQM%9vfDx7%{2n>UaPftmdk z4FKRyqXgvjpsJXNl`Xil8RhOlXAFyb5=)WSdBW*M0 zEIXsiOsxa5;f|F)zPrFI1{ZTuzjvC_i)ckz9`JjSFR6Q^(d{UvM5<57{K^Q~6h znT4w+?HSt{%*9S?DXw!LqDrrd zOucA?>Re^JGCR-EnmPc#MdKY$sy!)^CGHbLdcm5!_)cPkT|2)te{aBRVW&BFn}e*< zK3)e|%LjzxQ*8ozo0OtbaGazP~-cj{P1(PmH&@&XQ89hc>nj>t%@ zd`BCh*&p&2KW<;;X*OYee>q|8|5IX3Z?|3qjuZ@Y-o6z=MF2;#2 zH`P3SW8k9yE&On>mgD{Q38Q3)Qwy#AB7FA>rx`6uDAUY4KdWS!-&q-7UoG_Pp(T7j zz51lK>LL}(rGm*G$mQ_7>Y1jDeOi018#L|os%e%UkAex2p?KV}A$J$}!Rj2nxsRlf z8=%WGux|u=v#w}~I~L0Lx}J+uur>CXK|tw#wEN68Ph}ijaKuZZzHFb~ESw1xHfF^F~d~yxkT&-LNP@r=$ce;c$PHn=6A|tHta{-*e!8 zk_^`0FTpppwdY34*GCLQ>7&+W;(${HYr8sVSd>zUr;j^wT!-y~p==!{yt4b}S@=WfY zoHkgCGkLo(Me#f~Lq9g9$g!s+Yvl_lrDzF*gJZEW&Rqx3fmAiK0+>o~5b2=5veZ!M z2PjoCT_eg=xHg;8y)s?nFU6IA0XNjdD!TX;|C0kF8zEQr3RK;$0C{PzY^(k z!t)yWIblIJV$%~-$H3(WMNjKj>`9%QnRyq7ww=OI&}nXDhKT`qZueO3xU^Y=VL#Lu z#Vkxrh{WiX&V6pLc{(8YpmF3aw~b442@XU*?t*1oa=(!R&z4CPuqC)`-$d$qifg`K zudJ9vA|#!>BkBoy&D3^W0*2#))Etr~ z@C=>T_oy%7N?x9j(w*!oRlVD=dW5UwkmZ2_31 z)^Eqg#j#Rc{OO*!ET35FO>(r~Lk~f}5=zzlcVzFB&E*@RoI|m|jsj5Llpy{&cTKPKU$03m& zCYfzr>6K@sYTSn8qn^b@xq{@^R};k)7h$VLN&}*JFtgQCN@8YJtBENn;-ZDFhE+8W z2u*;%S;NV>UEn{yF7s`Cz?Xu7bJ28ldNTQ~FZi$1PF(Ej9AUlip=vUbY31kkH2cY} zi)flCW@i@6l2v?vp{Z-=hH2J=b#GguEXodBw3uX;?qm($zx{~4PTp*inJ*EiTn-yT ztE_3GCj+C+_|l^+>&+s@1k8PLAi^7abGxJQzT750`A zC5VxzWIRw+$~77*yxHp`o}!Y*jH)RITx_n)L1fLE{w7#IJm2BAK9d7kc&Vmc8x4XS79=4ko@1>-)sJqS@8+_t`*NnZ%*tz6_ zr6GLBDm$@f6G`r)gv44Rb!<|~?4)FPEv=4;K8wH}!8@Oy;1_AMoh`(|2J7R>(L_-e zvqbsI%&|VKZp#cvd=^WCapja(8D0?D&g709K*?NHl&C18W9ut5>)~3#*N%6!bgbFt z&F7CZn&%->VGHyOSu2TeiGyD{fqhWsMB?7GT`5Y*FA^0Iam<21P+_!Q!I4rDsH}Au zg1cF1dAP8Xt)l?scB}Ipq654DsNSN08ENZl%U30|d9uJ}ArVi?Vj^A~ijN`hHLMN< znx&b+b1q9WuldZhR_aApnd&AY#JJE8Z^6+DWIG$=(H;Ly;Vot z2{LcbSKt^f-3^uNChbZv&*N|u^E#KHvYA*;=K3BXt6R!W& zV8-oDni@bujdS1m!H(&vtv8LSw0z?=JB%Ml7>r2LZ6fuZ>oUV{-A(;24goL^9Bkb`bOy5g;vP<6xKzqh@aO zlrE10LhjVEM%pu@hz8Y*XM6>dzULrdAg4)BR0(hj2TmXobViddcPz&kQFY*0SF1bL z*X9RZW^nIB0~0TlutS`|?8$^eSy0;=3Jm@(BX_BotiU;M$cRGbd%{yzIY}*$BK70} zFZ;G(EgG)E70c39?7;3`pyq{M$j0c~C!WFwpJ$YXIeugc&$pfz&W8v{%V(xSj9z;5l(^xiZ{z}BSvw=X7fWfzL>%awIfNVz`dS0a02crP$FC(x4M&Xess%TqSHGK};+I{h)g~YTbFst`6{k`g+c9)pK<#mD$PJ18S`PEAeiEmQ^}nUyK!?+=$(TsNwfk@UY6#(PCs zSy^JHjftMm6s85bT#$2zX=Ca!;fU;8eN&w?xgD!#&g9S3Ep#)j(?Sh(a?;;T2pO-W zM2E^Z$j%GicC&%)t7}--UYUd;f_x_ls-C(Q^w{db!Gj3uaVgXnAxgVEUMRXYExLXl zP+y5y*J7H>Dg2tcc0Oq~YNdyDa1mu!!V#*9UD1yzp2heHu)n_<@=^=RKpFT?H8=d_ z6D^nJcYD)t`Jt%5V+;{M)(py{$=Q9OiF2rOJ2TVs^_5in7}PXfNGlM54%AQASFIQFfg>d6O;sS>p>7z;*25xtKN4+)9M1N( zyAgf%Aws6Qz71$$0dVGLqnS`qnVG4Jm8!2tS{g_kCz#W>;6Zv(PKXOtPAdQ9T?Fl$ zRTs?K^DcJ#oS*VLLHPKwge@-o0Lnh9{gf*U8otI?j`7e@sobZ9Rd8LKjw*k9#akD0 zkF70jPUHCw!G#dEZ^^j*+`@$2=lpZa*7?bthWsmIOntoh3VsXa=IAQuz;iPYnG9Aes%}|%vvnM0C zi>7el%2I6`M4d_WsI`@T(T0!y->Ysg$|OsqEvJM|c7hNB+NIRE6H3jo*OXO#zfh!t zH-A8xMrm^H7#*dHq6z}-wM_1in`IEp5(OI6{4*gLKUBZ&w7&_g6si(R`B8|=7EA@E z-1AUg-tvBxsG_c>*0o!E;qn8JbW95t`x5;_Zl1)oZ;w&`;9{cPu|Gwn*RYodA zFc@ew%r7l5P5o*5QXZERKjR3m7OlcA+?ONc!rFXcp`Y+(jC)_I1a<09Pinr6gp*^o~~@D$cd3n~&s4VA=sA~kNp0yj@~Ry|9AM8V6?&#%#K zeHEl)K-0-`(Y13p7kw&{UBPt3Ifxvnz>CF-u1)%@YG)Kq8{iRM<`vW z&d5NY$s-f1b$f^gd}TGD|A3xji)as-tsqiKD`@*bLgKVa>QRUmky(>v^f&?Ogo;6# zBu)^dG9EO&6yfS5elh`Q2FbI2`W36pk%{u3uK#Ck_4X^X4A3bER`YFk<=0sw0wRG+ zb>AJVi>+;GQ8y3U=Q{CN)nB3p|27B*HA&Mu{;fqr5X^UFBpHYv4gtkHgN%j%_!i$U zZ7&^Z`as4P2*VeFQQxh7d*vJ~YF>*7?1RPBSJraK0l{yK$}eqa1jx?M&u1B8V+~mk zf~o@OM_XHRWZ0C)?3LCJK4wSd8a3;L=r?pSXWloiDvvHqO!Zc>Km!jHyFj?P2r4I% zq5$tfSK1V4j7SecULe>VdGmSw!h<%YYoak~#pftc!8XcBJbF8mvw1jV1FBbuatR6= zmS0b(ssjJv*AqKI+Dp%?!1MlO5jfJ}%Y_We@lEWh6me=#g)`Gvnq+mBjAV)(Z z%S(al_cV%tt3jGVLxxu5LkysQsJa!km=&%XS%$lsn3PU;$Icm?S{b-1`V0a6AWf<8 zWXVC*X_PwOj1DZ+cXn9x=jt(~K$T6H=(Lr^8aF>cS3zM>V0H^Yju-$M99n83 zg$36d)|a#g7YW7<`gAY&g;l(roY*iINXBB4Ls3ke_aIepUE#ZBHQN!R5fG zJZEUDb)nX>MT=?ayJy|7Sf}WT9!0BVGk+ zh4_pJh$dwqFppYqB>>tZiBjoG30TQVw zC}9*RX$EKqIaAXa^fZ4vsNYTc+2ygIv?>d?*qav|jkL z7sFlNT+*J*xHQ|*=B%EVQbylnme}UkaQeG{{pxu9hs?1FhFKt@p&h!1eEC! zFp(K6)C|!+8Bdr%rl!cq%G?D4yOa#vp&V*2hk#C)=|Z7vvX{$^Uke7CzAWxSzR~Jz z0}%MVe69Ph9&xxg0-A#2==m4dN}x7ML%Bsf4T_?2c+k*`(!I~*oPszFX}R0?(U#`s zE@SOwH4XDmTgBCE@Ex$4j7Xhvp2cb3Qa;s+QeB+(s?jGC0JD|K!j($*wfu?CyZ@pD zl#sAo)qt@;_?AyiG)@KpJS!{=IYSmO&o`>)!+61R8PK5!*N-;r zfzLpf6x9qN9ESXXldK#8g*`AjIts<^K&^Q&fU%RCl~RJyu5 zALPdC<;oIhvq^Z>gP`_4K-KBVZ*~Re8IN)ip^vK@{N2Z!tKg!R^JM9JD zn;{t*!wxL>Emeh_zY9{=mS$}zh5_K(DcFQ#3(AGtK;#)L7ecl5Tu>FUSaQk;^~G@4J>?~xM^g&$nt4JJ1d9=k)LR?>xP|zTVtXQNZI203B6;-)%2HxWL-*;;qslCeN z`|aB|l;3_@T?g*;?1WTM2`ZmZQo?3g6m8lrA)y^_2CTrrzooA3Wimy}IBYUmVHv*9 zG&{l?Q^N%flv!YU-B5-@2!!NGa>zr%N>XM!9WV^-oX~M38Z?5WuDiCfcn(_iW<1(noBi{Uw z5i(79R&_2g%Mefp<#Uet`RX^Mn}s!|P3f^+7~?kT<|I&`twvN)7!FnJ%WssA*_Zbd3ct6p;skDohZkF9I>?{`q*H9~v++-p@~VA`64o2V)`ROhB|2 zh$*gtt|bm4`$SjF!>#MCTR`o!OdY5MlA|Dt5+WyG?e=#WprSSjyrIBQ8%YE96Q8!D z!JdP@M1}?808~L)}kAnAAjU-(M!xId~DJo zr<3zN!|PIp*;m!bahFt^kd(FV6Wl=reSD?!EEhc!B_}WgZEDJ`Oqc%H6NM@TkaCRQ zTRms^_v%}DgOhNmvet7+- zvOc&d<1!?V*1RF@YK*5va0T?ou!+oP*OWpXZd=j?l;0sy18PzD`%Ic5kW1swx$kos z5T9J=_J`?} z!ggJYm7B~TcY$I*j$Kuv1d9BWD8w%jQ}h*eg@KNGsJ!`_1eN=5z(*G#XJi_88F%V- z-$H>!%Z95S&FnY=Jj#r$jnr==H!w#(hY|DMawmMR&yUvFjK>r|fHL#o{Z3G^Y2!sp z93e>WQ^^G7=o&O7lpQvJ#=-gMm&iey8w#iqafZxOxVTL-`Y8%Yh%lkXq8l{)hXU36xz+3(qQ`QGH<&aEaKMZDoK0agNRK6Xi|OOelwr z&!dKmd?XRosH>A3)Sp3Q1>OakZi~4|a7orm8|Aci2HDHQZ!St2j;*9zU3a&6 z8})IQw+#(#4Z}(EBC8R0M?Flr-Zgg1--T`Q3s@{G?(SM8+Gvfc+;l&Vs0uD4fS$%=ek7n6pXzXYlWfFz%sgPV-|( z$$0woX?#kGOm8S8@aW#~nM|)^fW}GYmpAxy&*F=qOz`K6MFC{j3w(U#evE<@u1So7 zwh~rWA12rn;@?w2()#Bs`s8S9_Ica!c1F~L0?m>EGp)I{qt7A)?IaBh46fJgUS|H= zO%E^S0md=o`+2e~r2I+GY%=}-U8~5I0Z$lSJM*8_tFime!)Sn+~gWinWFah*BE0pd` z^=mm;s=!q^+WyelG4tyj1g!vSe#X$=0eSvyY-}tHZQGmJ*wP`WjiaCL0R)5pZ60mU z7X&tsZn>NaMcKxDC%f3NU;CkW-5uZ*BN-2?ujWN184tV+xy#1)xa2x$m4QDPl7Z|2 zRva}A!5ILKHimeIT)S~Uv~93xv0-F8$0*+Vb;B$W$y$y4yUTpNmzI{|aX9Y>r0qDd zY-sG1gr$ULv@6EOxS#Ck-k1O^d4&`}S)*W5{nesd6t9zjT=dVE+=;*0gjgbZxBvX= zS|It?f4)l~_s9SF=BOfh4gP%h?gn{mzuvhk?EKYxPJa8GoxGNRUihCLrl=W9FD3vP z0~IAD7%<*k>dzkmUZp^nvtrK9cVBk>^*0?b?<#iTdAgt={tSzS<3_Qc$p`dx&b~a( z){=cbNH7TRnyD~Et#mSh&^DjxDrFtQ8~ zqkjDp{`((oXXuxI12h@JhF3bkhO2%>vIqmUR8)yVL#E_qg@=|BO;%34eNB zj31v5X3IJ9!7HCVO*eiWz9IkKy;*lF0Gp9gwo;o{>J-IUdnF9nxG>Sw|8zhfBc(Xh2Jil&{NFB#ezv88Fs1Q?*iU{ehF0L8yZY;$ zEN`#cYC}aK`5M_aGVr)3DkSUNdt!c^{GnJj8dbn`HJq<1k-S0haXjz;X-+T_%4ChG zy#1Z^j4PsGLSnr;$o6{ZXydON$g2HobbpVyVu>3@i=nOl z3#M)@1`OMM9*3=vz4cF@*?70diwYg2JQegCk$nz4iY@Lp0JC|X{4b07MbiNM-2<1= zsB|VaKt1|$-cHC%)dG{Oe{DQ@)bX7E0P|liEtzcT^5C{ahyR%y!z?eI4%BY7S1Nl&u)|se`|am-gf*@(R0m{*uhq>Kj`Czq$4&`k~)r#2o*AZy#x;fB5@f?-HfeaM++>fmKcK7d2oj0e-MhF~A!V{wHhs z=OYqve{Yax!q&XV3fU7VqaDv;*IuEzIWh!c;)xxFsG9K)nSa{*Z&FBpob2e|@FGwj1@zyq|EZn+1O5N`=>Hj&{~ylt z|32)0JN^2H|6(4$`irvDVmBfqdgHGPLcKL8JJ38MM*lC>WsuZwt-rM#LMH^Y9I8g zMdlj{@ARM=6%8s+3qhw~8puUZH@NzsJ&!-RaBb-#Jbu@al&In_ud4OCq2565Rkaw; zpD%+mje+wE`Ob?|E=N!;y?<0xmWPjTd|C*}#?V!L6wag(8b27wpeDRDP{`5A8k#12 zoWHCODn^5p*$o9#^w&4ap|o}w4j6brFI*`)ajCsj7px0)`z=Sbt1hM)*1o;uOW8IH ze?lavlNCdVO-nmRZuNDAztT|#kT(q=CF4iYCI*8Ny-rzCgZFQKn6sFiWJ1a_CePi~b+Q_g$*-l9u zoD%C>J);TJaGA@79?7Y>`$k4L3g0|`baN-WdUV-HQjTk4fwHeJ)*|1?**~-~=HzJ7 z(|jI&=D8O2ZIa|L97CS1gAw6Q~ga_GC296 zfd?*pZJ`TYJdf#Ea`ItYsn#9X6syrQdr+f?fv6xHK#6u}*-dlC2YiaBTK`ft|4;WVUC{RJ1&>hr$e6z@de$Db z2jMkydExxAM$q)W3(^6)?fXvo%gxqw`oXfEdT?Rpm2UsuhYzXFr)c?2>cK*8@}OE? z3bEK6eQ`6M#}HcCEudGlY_gn*35qn{#rs5s&Sdwz1WmPilzeIxS~iy%a-l=zwWyn` z=`uP5b6P#)v{JIhVY9qR$+2bBr$UDsBOS(fq{;+qSY9U|4fr)()Xmp^uzonDP{a?8 zE~0xlLrZS8i(B2h>!>4OmS0QMb7%s!2BS7vtHyFOXiJ0YV67RdcDl?(f#RL+2kO6zfJ(TecC#;CO)-DyyyyrL3__i>}U~M$#^( zwN9okC@@!ye&}#ro?X7!UN2kjg$`{MS=@m>4Rmt4XLKEEU>Ji z95xzidF$ozwZW)0HdI`FecnJC_0^pzT$zGD*)r_jf66xelz#g@+VD=mlbh?OOBZyV z-9O(T$~;}l%ggNaIbZsX{&EtnG<=ii$j0R9xwOReBeYYgws=$wS=2ftpjSji}3?$k`9;d-o48W?X*4TqZV(ztkz%F zbX|ng1E;f`7a&YTW!88?Pg<)9D)hFSpfg?U1wI5hf*Leh7^XvbIDY+Q4=T+6xVmMa z{i>LqMUB$EfJ<7(yz4(&>waS|Ma8J|O~9S)h=a0rJC8oo9qlvj^K{?^fgRy)tt z7CHjvo8lTRbhQbnpUx@*`r-e)6xy=;W@Di(F12G7j?C7Nmv5s!FAaa!hA`kD8vCP2 zv8vmgZOPzVxA)|wgwKl4T;-~!r?6e??Oe79Uo-$;bo+=>s~3gB8`c97J=o_gJ~lSg z_#8C)*Z_yKr(J`WoP}?R6DsCPNT3dttpNUS1b#F$^cT27TjjLrFqB46B|Up| zOi|VG2o54R0a`CqphGVY`n3|Ym!Z%5Tgw`>cZ6oHqLyK(<5;$MQ*+*k)jZpbxBwJM z3N!y7_TD-y>aBer#onTrxRu@tNTVX1Vt@nE-6|kRcZZ1u0}Q1|3MeqZ0Fpx~DhNn3 z)DS8lF@(f`^m!J3_xt)izw__;<6PI_^4co02WEZNdg6ZW`(8+M4nk#DGE8kI-l~<> zJV6XzV8^+V5vg@cd50lvEBxNPG1=^5CI{14XPBHWm6^eu0H`NY{*{oyXMxIcOk`%y zq|v$14{2kGpHL#;w&Q?^1<&Z#z@ZcRdGix#tY$&z$UMEts`zYbv}W&#I1~_Z91Pmj z$@3k%o7F$RfCw?Lh}gd6Q(!$X%sO`JR08aia#*?Y}0^9sECreCDzC@ubp-s z1WC*f`=zzV-yLMQ_WfvzH;Pr*F2T0iT{|Z`Jr9voZK~HQ-d#7CO-{DB0)|c#_~xQ6w>!SuL`>u>vDuWqAdQk7$Z+sB-@(RW2#_=4vU#Zm;cG!*TAN2Hs>)u6!mZKv)`B1W{+lD04+s*XoI+ z@(BuM2+6cAyH(&<(4gOm8lAAb_^8-P=Kyey^@|-$z9h&%z=p4#F9N#ri((n1e*!X( zLs@e2$pg|q-?fP`+k74c<^Ynspy=%k?28(pCdZfAqmUH&5(O zyk4qYsyGK!(!NDtj&BK1K#wc|`+Eok#lc->fie!|vo#>;+CiH@=oq@3>@An%LQ8Gd z3_WwHLiX%JfKbQiNSgYW@{=97a;DsBX7F~yS?r(x5#ERHkRa78~ z=n=iOpVROGFBr&~;xM^)AtUD`csOSq69;C71LhmW%z=NjRY3wLa|p>U!DZsSVNLx^$EQ^sEQvyMyyM< zz?F7H793&0CtjL*e)h)20gp?UE}^uF7?FrzvpPBGJ2#1<_P`=!;Cb1nXHVS(z7d~> zZL%m(AKlRsZc*~k&wdk>$%r$w<#6%fsOs2!>(>z!_r-xgY|_P--XFJKLvw55Z`(Yc`8`EHSzudEHm+$^7&VwqIRqrXm~!; z^Og&WjTbMurQn^eWDRt*w5Zoa?~rK(l{iwMJRb8|sz0V@d~VE~>X^<7JH;O+w_J!A zbNO^cU0F7~QsvKwXNI$zI#lHLAf~D3puZ{)n1>9Y<%0z=jE9BZ{K*GiBG>9BefN0rebu8*) z(0SGU9s>uj4qjiiDy=y_w1ZxEB0#7G4m87b`N^|RoBUnnE9x~dH%&Kp(DD@}GI1q| zgKMAfz^Q#m80iP?3v1iU^BDoU*R!4J=;#pPYox+x74frxBuO{%YkD1`?@+iR>-hYG zZrpHKf}`IMQ>mOs6-c9&yt%s6#|O{OfzOZNH1NidKxbv4?r~1&awSm1zON2$26T{) z1tj7E4x}goIcUq?LWbIbY8zx%gk-mfKw1t0jnZ{=ntzp5t(KLWgM{aZ+)8Vx3mIbM z7Fi2O+utEl-by_Fg`If1;ZB<&P$;EA`GbVCR0C=WGbHAtAW3PkhrLTS{StJ_ttzRb z9cdf4nEAl2aR&2@;p|ubHW=3mUA_!^_6TM>hr^nGe@|OELo>%B}sgag4^A4ZO(F>W; zIO^MxT0zP!KCSpMz}I%OLd4QhrQfLi)J>nu%q7LQE`NOQO9^}YoZ;}>Q#U;>3t##8 z?XWYj$QTa0vfnhl%zW%H*X57*YHDgyq1k-$*qGGS#f2DdZSBB*jVM-YUU^pa>sh(~ z8K|H+PT_!S#fc1NjvTH-I-+uaRMc#1eiO-S5)bFRG++tx?P*v{Pa`<~rd7s3QcN78 zI;Lf&I6(Pn%+?28cfJiNa~Nn#R~ea@BH$cxL1R!#CJ-kw%gw2-X_4o0-*Slb;HeuX?6a6ftrC4{z@o#tCt)FXhRag~kt8tTG^jNmkOYt|UTndC8ku z0Bw71fsWsG7V>D|!s}+&P6Tig&d}`AhK< z^POB%_?SE|yIGFJzT%S-<0Iy~J^EO-Ok|jKn0D}Svz#TmdiP6IO!t|3VjW$|U(QgP zR;gcT7QgIXY@)-4R4!L<2tDp!{&-QMM$>{5fA5&St@i1NCsH%z=Yg;pI#TJ0v^7X% zxGi*i`9Q(r$54Y^xs15^L&%0;)wCGuG))nP?nj8eyhIHRSV$3HUuZW6F94)9|251d z_oCPlLLRb!`I}!qY&Btnj(rd)n@GW1I)%?6@*;*9p=!eiVi@0SA;Dju66k274pn2X zp3UiMwKOMtz^T+iAW5GGyb?N_j)_Q;ipYywOfSS=120Aq0Cv7ZICz3Mxk#SZR|#|1 zmBXWFV=Lg;A?r19c%>l_12y<>I&S=MTrsiFjzrA3@+lCfret;9Z=D80ToXB9V|mmy z(8|*n%J;b<-<;HZ!u$dExD!p~Y+=}M3(cBaZDkhoy2V*&)-@&}+vY>z5;;Hdfx+zQ zAE`iQ{>%9-TD1?n;vWAsq$GjN-;k|ZZq=Ny)s=lZZpN<{!SGF5DnkRYDhGtVAQJ?{ zWM7rO1z+qD&eHg|)GF4QHzS5?9fN2}Q;6?9UGeYY~C=Fw}7Okz?tDzyOgW|!bm<=zn|~>=I3A~k$!3QftHdbQjlb*`STX9qhfIby8kl% zu6u^9zPQRNF<-Dl5pXOU9b9_2-}3)hKI5(BdxQt9DcyZ_A~7vakFDvK=H!2i6%}YS z5S0*_dGsx96=KbS8}qb9PnF(ox1}ROxjuxHL=L{7K+AI(slSS|NUXI7ZJx(;-wU$r zbji@10~@fL{C?hN`(j`9vwELtcMxxK;D^s$tNkxz62lHGRG>Pxva>n4hy|1krGyBM zC&)&trB)So8VUn_i?E`GZAIHmfM7INR2#}>R%E*lg@pIOzCK;Ehu;C(t3`Ep-y&4W z9adX}R7YR#(AvZInYeUYUSx03w}^_wUr56+HaW@f1+K3~C}S6| z!>7+6_l1!nIgllf$b9qv_3e>zyLHm!g5!y0pQ?RpKsg7$TVy~{ydJo@6j(~2x}K;& zmOJNfeL3-SQEoXx?g^4N7q5Rjs)p!a1G1o8cz1{G(i$);MP@$bQYl@>dv2!7AP5KW z2hVq8t1r*Pm%0-;Fp0Grnv&2Sxtf7#>PNZFdAXP=Lv>}JfQ2!zq+nHKan~N0+Ul|w zfx#NTN~9mUd=5}Z?_*@SXAEXa&i?7UJ}pFON}oBSkT)N6HWogwe2y^fd_tjUtK#21 zgO!?o4C*1-;&osrp9R5|$@{<0X?6gRooWT(8?tWtQB-VC{u{X(12uY~Y!ieJCl1Q~ zx<0VfnPb9)M9VH@B)CP*;W;paDESdMY3KeH)>28(zRu9F0$T?)>Tv3Yp%uNPcKZ*Kkn)Fi(Hv6ID8e zD*R_iZet3HX%ye*6ClBVe>Mvic_T&tlPq72uHU(PY+l^>>4w3VE%fK<6jz#;sp%JS zt*214WGl7GJ$s>d#>0>26D3f69~=O_Me6yXo%9}ny#1)im;hmbJNkzAdbQ*K-vyCT zm=&T&GK(XJy`vg$MF4P?^)(MU4y`cbBQvjw2n!EWn?d=!P?orn-SL^gms4`HC3FaC zIErg|Ku*W!Y$k`28!hWnfDAzo=r9dr!O;UNB~Y1iQmIt`oGNH@?$u5M9Rz4f%2iJEL`Zw zpA0#?-nhz>wmau0>my~7+#{*V6Ks*Z0N!jJmc^O%&E|plT1A6_)y+V&r7srjCpmUr zyx?(fvi?BtJz5?0A44fsl^l)Nk9HWDsbv^r$NY}P_Br7Jefj{7^4{#dck(>;7o z>ra)X-u&m#B1gm*m%%Ez=@)em_;==CyVEt_+TdF?-TdXORN*-m#zlB)^@2DGOwE9_- zG7lYzO5Y_1D_BwyEEwZ;)HO7?&dtp+V^T(L4X!jaR#U@YhEO=g__|aaJf?+94T#vx zFI|OtmeV=eef*}vF~=LnuekcQGMfeQ&il8PoB8cNE6e0%;cym1ntv!_c_?N1W6H=0 zCU!pWi|NZ!r|ued7iB}Nw}Bs^Fkv1nq->z{Xw;*>qws!}$$A;O1XCGk%G?u%#IZ;* z%veSHd`ZH|1{&fQ5Ft~qpY{6EHQn=85ro2>5L;rCglIGZs?3m{m0H8(C|tKDn@CVv zDuUs{ILN+?BKr1;>%fjsp>z=l^Kmfuxd2W@lg^EU9f?P240B#@_-$)hV4NGBOSwHZ z$h7?pkvNdJRw3y$XFIkU*Sz;D479pb!KN%q{h4)bt8dYht!1co22U)X_ zf|m&1NF-pg_7r8qF{h-(n6|+NdUfHSurZ-+%zFj~FErdD7lDym2GWNTA=U}I3|}pD z95lrarRV0VZ-RiH3R_qeqC%GYfq~I?b)x`ww1HAq7*awAvxKI%w|9MAUHFhVbbK+; zgl2#jMsgEjn?EJH*bN3U)}Ymy=z04lKR>@9a5DgKF$@%RLg76 z-WvLIMj4+1c*-4>{=Puf9sm0Nes76$%7Fip399mVxw)wK zYoCzW(YYX-;3~15stO_0jo}&6-3YTwgQI?`H1B4mZWw;bbheS{W&ZKl(xj`i!$vHC zoOvT~E&sK@NWA$cd&RCH@=o9HSe71zZXCI{dw68TpBn=d?5uCeTg=aYhxs&N`mjv6 zR7i*koOR)D`ZyMY;?NV=R3{4tnVb^ySxV~^F}jfDSyKw*BAd6p{b+}%qYBoeT$a%s zd)kU+o&G;V~^)3JZAME$jK>z)JeD42WTd~Zs!Ky0o5V;L9MopN@ zlM*-AtU?&hpKi7MU#C+1i5CP+nz$?&l%~VLu#?gU<*O~kE1{Y(m?Lz&ySoG30x<^D z9h>jG_!SV%roa%-*p#3LeUJJ-hgv>|vll`udn@~2#@^OazN-T^S5{nPqSjMG7$`Q4_Bf`mf1uEmva#I432Ydi$zlMv9 ziFtGB(E$;o|FF5XURyN)9!FemO+tL~XyVvOiME27Teht@|0jYO3IIBE0#-fYKD{_a zrh-3>?YleM48c3)sGhD)qO5=9%a?d$P*9D>6@abd|M63YqMy2rWnOY3mai8hgkzTZ zIp1z*cZaGkj!l6DIz2o9`6iMBf-dLq#@3JX?|)QTbYJbGxnu5Lt0pxOJ2QH@D6acv z58v`${J6zeDp9WeI@#kM-~U>Er~H&1e5zgpMaxR{EZmN&j^1RqsHg-!zO;~FG0xUB z7Iv}6;}3W(V%Wk=G*esdZh!bxj7PmdA-Uq^QDd`)vx}4aOO43I&WWP6{?jY* z39s(1YZl(BkjuOBU*UuYuVL;s4h)hu@R~5P3=9aU^jVtD9;oo8fctmr&u znKO{mj#1nxNz!979jbtF=px%-u$xm3cZI`}=Pj@YM8yI=KK;rQO~~PhV?+ChcU^AOUnk)~kzCBvuN% zd?t_+#$lq_1z_f|xO=(8zt3*#_c-Cda=$;owVB7Y?Y zQw&FS%*;__Bu`DFjB_c1Bdl= zf)930=rE_KL}K$Bq?RU56_GojVd~zf@Lj6u3^}&~J1YM>Q0n)ybd~SHc}&kxT_l4-XWViMF(72iRn@;DCJmu?mZDlLGR=c;p|+%fo~D z=A^&p0JAzQ|J?k%i1(ZYfH$s&x!3R7kvo|j%af7qRqQ$QAaGC^v<64he0wR;E+7~P z-)=*D`u22RDM;V`Se83laCJi5A)F+g)=G=5>esKCLpe3ueH1;+WloihKELWB;`6b@ zw&wHIxsinAFMa1DMZaoB`OO7yAI!2@d(=`LCwKaiX%Ei6?+zgkJN9wnqh!91i~>QX z%Ov7ffKFFr;}58;H%~5A<;u3~ z9*yKcd%g&{uT4Kb(-jltJLT(%KdW?#rgd00ekT72$ZechTKb`ML+Z%12+oqXEU#wQ z!~W5p)}+e1*rgPY6_Vo;N6y&ejt=d#*RMOhu}>&OUtvPUVl22a-P(2ky-lr2-Rsn%=OTz4BF4|>M*;4HMp2iiB^V&u>iHGV%or+B6Xx8rWOmk zWgKi1I+8CvasyCd0v&Uhn7aM^DjyXcJ@NXbLmRjfxdCNj48{xX&{tEz(bW)&-&Qz* zW;2ZcF4pg}C;eCMt50)9je3;4`H=<*nbx$92(7{)8^2i?d?A#Vx}*HJ zF$%YPOx>FnZQPn8yEi;5`P=hF(pGANG%+=F`Sp!1uc?WGX4C($tb9FAJJsJe7CPyr z!gRY}EF~yVV6EqpR{zh;b5YxLLph82?E9XCui3b*2eDb$lB_I!tghU?Z)^P+Mv4ZY zwYM!;-T=d#juWO)slc{ThT}&AAyb!y4e;6|iMAs@k)q z^7?mizNTJ;ouui~^)^akdQ@m2G9@w2NpYuMS_u}9J-z>0*TJTG?HOaU`_n=>jo8oWBTv6)mx_^8jXFd*Up1Y2?tBscx?<9M_qe|xoN!_c3=9mx(mG^x z|B15~a3H6BW1isI7%NhkFtoH<=tH#$VUsgmUS7_l!E+!dWkxBFtS0ICYjn)w>YqM+ zA_9bJN%p9){rBC$?{Ou5vWakOcN%O|PEO9cp;=+LmBLB??u84`IzkInDEeSKO@Z`I z{nqcP3n$)unUzy>W1wm?M7y23OR{z<)LZ4~{}n&UYog6`X~sA)K$cVS_yMJ^4-HGV z8>a8vWHG3yvvJ++b0p-;;g@SzAWm@f<>3&!|A!iCfK z`DMTQ`g%?92Z{JHGwT%@8=DEMVQFQBPffkNx-`S}nU;o&W_y;k2Cgi@e|wPL5HUv* z%VDGyRM5Hhj4V3duefxrbu59!eTL#o?NU34$?wYyj+Ah?8|UQx*7GJ+zpW@S8Y8bL zRAf<&%iR3f@tw(4q@-BwXh7j;x@&@*5NDge$PrVjK5pu2(NqqT&Q!I{DW1-&0Xi-* zF9*icas~(ZF|oq3%7luFs^o*kS5~0OWbXcOF>)6u}Omj2cMXf4pgkJE?Xb8{2hXWZ7_9+i-g14Y#s6bX$!jx_J`@{X9$ z92&8IN%-Q-W#dJPW;Vhe?F_9gwx9cHQ@(t>m;`^08hXG-35)a|*zQg4?7#aq&we%B zjFwjjo}F%%RA#C!CYm;&)8M`o2j-XprRo5SdsB~A1iR}M1-t&}YUd9{{nu^9^MgG; zy5AIVDclG##idqN_^X>$`YNQzZA4$6za^F`Wz)gU$;BnsTMiIMI0qezq_(MJqulEC z;MP0ac5q+-I?QsJ1n>10s3!`%=Wl^;oG~=Gosf?Dt*L*cQNw8PjS}|t5&@g5sSe0q z5Bk|?oZQ^5UwPK*GwH|Rs02ykQOQr6zOD`_Y_|9DqV|Pv42`C(U)~z>HCip;t7gK( zIqRaO>uh9xh)%6iNR65wR`B<6_E(5$^(?136dfKES}`RKRGd=djrpGVA%&sCK=bTy z(^MX>RGuN0{x2odP_jGebA^`h8K$ZFiOY-1Hc>anTcso?6!&>%miKjb1|}pY46c;V zCOr82E6{&pAjQ3zoU{YbL=E_bc9Gt4D`V`->j7XRhC%vNVk z=HsF#D2P#zJVyHvrD#-}0cSK;$nq(8^~(qtM-uQybUe_K1s!BNgA;_nr7E3`R$s5?9-1zRpr5p{0m_35gmY7MNRK{UOn zW;gC$%~UlbF35AQtvZ>bLP|s}Gi*3U+u@XaCz11|Hp@W2%ATt6Yun} zWGd<tJvFEL@Lg&wOVt9CX(8R_a22vOtvW@9x6NY{W zd|)*!Z{3;zX>c1LOaM*EqKATWgY!25BweYEJ^!i+;b>WF_{o}u#OpnK_Dn}#KOOZ? zhF&_jd+(D_6dQt;9CQ{3Ol?r8SG)c29caQCj>A3y8ZTFX}5L<^n3Y?PH zsLc~`x3+DRE^|M{7r_C)7gqMLwV26D&{ICfN?s@OZmg^As$5RROuv{6zqKd|C7xi$ z4NQ&mrL3A(KE22~qv%sFDm1xOc-7n!FObu%j0izFbJ}r3Xusda3|GG!61$JWrER*|Ki#!az+Mx{*x%u(0 zp4Ko&8EJrbL>Svfe&@`ZO{kf<3f0B|l#X)r5SyS&vOzp?0wzYe_b& z@F_$z-tGTgadvPf6?KOc8~#6(5u*bf2-m~la_QD;tc2lTP6pV%_UX^Tf4jOzm#pouC#3uahQT*2t6y`VOLIdvW7H#KidAK% zT?uDVmtr6)i>gj3{bMb?It^_Qy?g)b9Y%>vf;JUrl?=9GHg z_OnM!o?sR@0Wqi?-IqTgR(xNVAP`|Lweo==Db_O|!41}zkDKH+{VHIbf%svhjI~@WB^0uQOOOn=-TdO zxUr;_+GTbIS~Hjk=BYvD+_9Int7C=fhsKx`B zTxH1Bxv=0y%-w!rpT!ZAcjv5w4MRmAN!&E(DtsO7uc1q~Ius)^g&$|;bC4oBd}3Mp z$nuP>)t>?PCHKY$*~pIX0kIruwc?i8O>YRfd$@W%NObEGSY|GMi6YkJ_qQ4Q&vUl! z(wz-7Y7kj{$b!qW2qwobw3K;f`jN{*d=lG@jC?5D3B!ApP0L)ozIT1l#IY}PEc4e< zGK3s{jg(3@mtHar)ib?v5s%}4!RyGah_%CfyL!AcmqnMGS(BStoAAWZW^8lG#kf|d zfkn5E$iMXb=-wVlg~9mw!oTGP3~Iy;7i#3!hZCw5`~&{G7Bu2faIK+2Pft(Y)ZCoQ zvA<9M82kkjOn zetmRzp@Z``9Sp3@75KAfxxd*q^zWLL>oi(Wiw!+`Dga8 z+*3FFN_PxXoKUm1higu*cs`Ttk17Yfg#Od5pGXt+Z^>7&EE%NmGoE37Q>$XVYpmwO z&fmA=J^ZXiju_J!L^b?6WP4WdBjf(@zM1t$`NS-p?x7&P52m3PSyRF+c`OWQjTCM) z;LQ0M*u5<*7~s4xHnhFJr)uazwhxE)?y<;ZiJaBpXr^0q$~f{}>OGC|X5u<4KLJ!-Nl7U)e`;y<=Io=~X=$d|dSXW9|ZA#LJMvE=a7?m4-*%{FK@;?*^ zwQIo5DjiL%Fo@Zp`uIE6*~N=2S+cBo?(xraD`(QCevx@A2#)~5Nl!|;03LKYy1KfT8l=*Y72D$4 zC*;L70p!gNu%^oZE`wgp^UE>4lfma!fL%cVdVj5ACVqOYA1g zy@8p{o_ckA4RtQz^OEatD7$bBX>feuEmV@-7|i+uV!IR34z_F@rHy%zvcX6=?CVq2 zYtX{LETjW+feuV(hKDVvl%#s?$W~ zq#k(U7rn?o8X^WxLSggr=%Bw2R?}Z$Xr)NW%|KBk$B{2>CHPgLZ=35#<2327^Ifg> zB8mC$f|sUP;27DZ|^;7T;VyYmYOT@kcBfXx^7tC;eyCm$G{U2j^d+u`#u`HJqMYa zJ^m2*JpAV)ot`ciUHOay80j=;e%z3##pgr+13SrIoUXE{JA(Fiib6;mYLNl2iw8=w z4>-LIi(>%?e39FG#1bGnAGmW_$JjUv*h#|HIhU&{-_8C55BzF9%X3JSwNKV-rz&}i zUygrH5Rik?F5il;cptt`Fsrg}8(qTu}^TdhBLi$ag<0{1E=)4U@C}vA6n!IdYiraAFN=rfO`^2`>{}Xa!R{&W9fy z!bnAF{8y?oYv}S6?q|I(@jofnN9oq(eldU0htRsPPgz26$g<6#XNpKNqxFyAMpa+YMSFm-TdD@_4(OqbxQ zq?*a3TR2okP`H<6B=r3rKGS8U{;)*!%ae2y9CTy+RLUuL`x)#ScG{y#a79vDr1LI` zj-YTci&dYaKXE(XvCa%2FWTi?*2>?A@HyKkE=$Ae;( zuFEm%2czQkMy{&zf3(4SI=I|amf8&v7-uckEzEt`zCG=|E4Jb4lYKb~3f%b%zNvw4 zI*%C3-0W6OHMg;l5-?Cw#!0i*6&2bV1y;;{=?ActptvnGEs3kmpLD`g|MU@ysDbjO zpsQXY#uB(oQOTqW#$h78A*4J@i?VMy_mneG`onjNp0s_>^a=HY*pW`}ykVa+{!X{qX3Zo`XXURJ1k~0UsY9UV-Zp-pJqI zodGf(m>#!))8oNx(+Z;LlH(Xv15k@z5Q^COwj{~Jzdp7{Cd()dX-pB<*8EJMj+-DC z6A+XSokO-+l_@HJL3ZVQO@z4-dKpd(oBu*MpchzM>`->Ga*QBxvDcPV6&OgJBI^Ns zgT80JWy1m>)e}(SDOM~A6!*OXk{tz#?^b}2Ao}O{bXC~(2*Kn@4ZKjJVA$QyTdNSt znhgV&OwXBtiSE1<=wG0K-a>WZ&ZRC8Rbf}Dy9~E)&${{-Uz*A*WpT;T$01i~+QUT62rC+LdtVjvR8a zdF=szxXYAL*g6c2^AQh{lyknux+zW~R>rpo4iq5v8|z@#XC{XhCRshbX;pM#1*KdV z1@N6euO;KNpl)FB0(|mMNSSI~mJ7@;9pmFA5K0txdU43)29*hD&_Ll|Ny6V2a z`NQnVwc5%m3c)9mH&+Oon%wkl$ZmBgcF2noFKQo)=72zY!Qd7rds5&Jw}1Wo#whDo z0=;`h%5MG5!Ohh`^z)&A29o94^J=`i0gM*_2I9o@mU$9rX=yv)l5!LZD}1PJXyyQa zX6d5rE1=)0AAYFjB@Rx}Cx~QE$V1{v%974Rx7VBuVt!2ChiW2D)jC^znU&o=v|B$U z)yXX}oA;zHkB8ip63%0lBUB*%=;H_aEW7U25h>r~8aOx`e&HTS^Gku!rUi zJM$Z0!@ET1#GRMhuZs2P!}U=88ztCmkp@NE?kkQuoxGUaBW(l0zxMW7cHZEzsB>oK zvF`K8@gVKa`8T-1?_WD2!o!onL@onx2)KV$H_9A#HYrK|KFmo{8Fyp>QM48AP1V-b zeGNCTjKM8xT40pt;^MLZ?xT8OzDbxLpsU!p`u@5)C>@`m4r(3DCA(ly<_7-a9X=ai z^XCRkIebBZHhg&(u+IdcCF<)lMt;6%00AqS23Yb0>~?}D3u>U?+h;s(D3_(02m0TQ9{&81;SQs?GmF03 zm!>!!sn4QLr|Yl}^eK#xDf*9R+!(AZiVYk*Pb)6Ji(dPR-A-+X?Qmr`Z}C0&mH9X% z>|XvcH|B@*EJYWw*)Cs=*IzVI|=?1+ECkCcMy0!2Yn3YvjNHF;2z`#`<5vJ(sS1KUR zK5*%c2v`Ff&X8LuOuPaDDgfGBO>Ph>S2AJd!;z7meic6RhBe^V4NMz~OkcjN1Riw) za^y`Di#|+pwQC+dPU_U^F=3%?|BL4mHvu=xoWh`yd7(MtQNcV6U>ZTF@P5Z+K#{BgQz1zf zE5HbdRo{n7i_{pcZzNWq!4PQSx1TU&;mFJ^8$blu}vzcDbKy9 z*wJiK79yW@N9o<@2Q+*~ss-i3peZ_q`<2z^T70auIMS@v3)JBN*l$_B5k zyKS*D(@LKduUwc$;k=E?ds0g{i@r>oe5jAxK$bfHJHv0-T&e9I54U@ilA}l&kKJx( zJKe{7^a;6`hy$YG@L(#JNHyh)@=bLa@-Pu7PIX~_Q;j?7^vJ!Jm4};W?CQxniOAs~ zy&VdwEp*6n{NIl|TJ2B(SO&jjweHG^2i99=2%x-}HVAYbuvNMXTfbU5JI^}zmnCpwM;DU%%;5x9s5%is*p zmPLKQU6s*1{nA01R6t(o*kp}CL4XIDBAq`NNfRgY8)AnmFSw%q@-G(dt8RPg@^9;T zzfw*wX1Aqd`{j9mwC{(EagTqYk`qb$U`~yv^?FI6k9+T{un}&HJvZNzu9q0gm-U&1 z9xMoIIQE!@@R;Rb&oSDd9kdVo581Abb$J#J7xx{)%N@BcK&{{FWwA#(-)A!Tf!;_b zQ)HYFAucKWp29IpP0L!tf7b?ncglPLs5!?txNMjf63Ro_fW-WQV;l**OnkrISTPmYFqV^_F&dE3D9I2|0njezUkfllWJ#|K;n;Q_i#JAGyO@PqursW9yy;cKiJ zUtD4Wl$$DrCANiT_4(tf!+&P--p`U}KMI*aA<)b{_x=CE9K_EdR1#GjfP^i8$2h*p z6*TxVidj+ZUKq*Hfsh^Xp7L{+CFj8#O2B&=9i#vb;h?;6eg);MrZvwMLF^ z8}Je}#3|Nih>!|~B;n^2;3kJK7~=YUaqWn)Cj)XHx&Sv}Tm&^j7pxig7S11v_ekPA ziM9}ZHpXqQ;^Ac{vDYp#4y7(b8#_DP{Q3;}Y!A|B+y0Crq}u6VoIR$JNjA!AmXE28 z#{Gd)fjpDW7JU3%^kMh5N!+FFxeJRmLc6Q~@BtleKyQNXMNu4b3s3zWK=Xk^<9TF>-X7r$LEy|}Ha`u*JJpM3O>cN?*v>>@8!8!IIC(PrfDhI;7}dkL}nUOMtT+RwjDKbtf&)9?MiHN##|tV4;- zk1>QhlQfzKb8p=Dm~@&y*m}s~#*O3zzc~!14YUvE8{?()V1kZIh4M<}`B`~%JxI1I z)bvEV-r)dq7cgZOfr|w5gS}Y`k&+JsRl8RTsqDsw-2#RMS8)q)9jhiJlZ>`TVHuhA z^!J^>U;x(wRk#Wzs<+4<4>lLNFp48J;qe>2KyFqL>vOsfjh~5Spr$4cm@mEE=G=UI z&sgxyP|FK*X&(GmlTNjEW$v+gn`5gYu=*;Cak2J{ZLeOtgl?aQTmMt3=_gWu%e`6^ z;&=h#G@u284RFr4WKMWEs50u<+N?Kc>20JLsn_G8RI# z-Kq0kveO4)JP7!bbQ?p_B1@gyt-}{7U_gb5hxzaiee1J8bA-zU@1T0B+xyCuD~KKf zfFZP6X|PDQp(+Q`gk7NoL@AT$s?7kEL|GH;&=}|kW12_XQRRp(bMnB#Uw~GFXE@L6 zDg!Tr_~*4l8qf|-SFSp&qq?9==J;X#X^E zOg7V9gv1=;1aAeftn$2}F@KH5zcA888UQ!oHH%h3qb1 zEA@B0qR6D&TyJkvhW$XSu!7h4gTF3#qk)ikD;U;fv#H%FEVBK+Bj+_XoWIU(vU`>h z!z*Af(a#xw;fdxdv+us?AKJ^OBymR>!l{I(2PoxtC2U>}2n{N{^w{M#h$C18E7r_? zJ`t)Uw-GlNU45zJHK3>lXDLTL*0{A&WY!rYm+jFQrwNP>x{r=JhC;b{{3+5EI{r>VMZTr$_3G_de z{5w1B(|2dqw&H(uw&YoU2lJ||UPR%(Xp_OK_%FdNn(SrtCPO!g&`JL!==&JLx z>J@aM+t0Tz!}7(#mcY;HOdtjz?7jI|7_VijCCZ}92q>hxTN7YJjf3r~3-bju6NM4| z0*IPSVDtdRBnXJ3;K_mjT7C@S>@p5N;2^|DsPWc8ocvP;&x_Kp^S$=9xb-4P1Bc2V09?*x$|- zuuEZsa$p`le5j`Au}fRV!cePQTd}80o$K;H3zskL>5L6+zgzgiLTw}7kEIEQ>V;1C zGqFP+H{7Lii8qvrkJ_pqKX9AiD@chOyJ)*$M)1q73M3lU3`OLX(;f@VSP!f+(7aSe zATk@QRQX37E80Hc=W{nWk53AU&zm7LM8?5*(&eJ__lWkJI=tMn*-fk7cI*WE;k{+b z1p7L3W!F8jIXT%?8d*b`d8w1MJR*}GhEZ<6^H)k5tJodo{G@R7HD)A%YAPUUaA z<^Hf$riptBr8tm~7|DWyf}Kz|9nn+N=cXtBW?<)C1kFXLrr6h@aeE z+}WzOEmpOs_sSE&Z`_$bo`eKjy!z1ArsgsJLBR3}f35wI-zWMa}<@ zSnVYAb9G&(s2#2*`S0A&@P}t&*W_i&JHz&sS$I2BvA+&v|F4K4kPQh-)p}D;Xx|&K?UHZ}qtFF6VFD7T!o?qK$5}S81;;rsjuBMK9tGwzO z`SaCyf8T}mI58?)>9d9GV3OuL%4>u6?V3uTr^Y7qqjsR^q1dT#v!hP8aEqX!q@d{ablC=Kjv{mgM^Y&tC-MyXxS^Vlm){XINzY^nqHY z=62iqPD(`%*90XYy*c~n)O_JyB%je(|q}xw`Ae$%5S27 z-1F*hxji>n5^3P&DiYz6mrZoiX$aA`tI-{VxE)f43zBfS`#2VlM8Vn&S-V=gSi>5VnxcMp zv+hmbq1gtI1Pv-3kbR)aKbWXSK#()zB6akz~d|kC|(_7RF;fn zYC^gyskZ+FbfE4(URX^4V5jHdQKYG9^S3aFKEN!VGh~hH4BDQ0?zYHbmPA}Dk zt`P{xgQQN0_B0Ir=g$_#NVKa!8}2`1WH7> z<5M21wKOvlx=3W5`h_^t@B<+c#!E3rhnAt+)6IjuKbJd%Iu<26ETB+@3)J4kmb}tZ zR`!--RRN57HyvYYRu(^mas`~*ub($qq`lN(g<9bzNO!=Hck1;lV3*ciUX?e6SR$F5 zh)pCE0f<(U;^B{+T--VhtbjVH50|c3yxrWj3ipNXaG&a>J}0b#+Z`2&rB&1q|4x5~ z`Pa{;<8V0Mel=GY7yA9XUuN&Hv9ZYn05)@ykB3L&>Xm%$~4yKTBIz|`Tq0^m_=hi6y4O*I?t@n%TL zIR$99Y~XGh;BOE>nQXENh%vQI`3w(z=Kj`OR#p@Q{Bl5_n`^Lna?@)i5^p#a8sdPS!X`K30zM)(M2$ulmsvsxL*LTsP5Qv z0HJW&=5GWDU3j>!qduP>^$JX)c45OCJ1rqC9+l~>X-`o+7;@s=D~%s3i^WyhP^I!5 z`fCgtL<~&Y*x4_^_tp$$mASckF*yu6ArLvD%nzdrJbj(&4@uw(Q4d3R-Lh7cUQAJk0>aM9;8yP&z3Exf);9@A;)guPVptK@Y z<6C2CXao*!(=GVxk(}Sv$^%xPV_bb+DQ5s2fMqYHWDWs0Et*{-L7!&+eU-hgVZP#d zgaZ%BzoqXi%$DoWdZgG8p29+YOUfY2 zdh-wM_6re^C<+F;1|_`VSFVkpS7A}wtA@v6><_)8UiqAaQj7Xp{*Tx@7_IaW8+EM zb4rX0fn&t`RaI5sU%=Ncyhob#4M=C971o7og@A~i1KUnar^gqrRU*P1jGmb}D=28U zKUfby6A}l3!y-?go|QER#*H>`sT||^TfyKIF>@P=9vEU%aC?q1bE}n9od=$Ed>oNcSjc&BcDA-9!W_pS1R+@F`Zf zVOstA^(1(c+Gb`mMcDL#fdSz1Yr*FfLKsOmd@z{3{d(K3KR@;E>5Y_$p+N0!;u{Mu z_cimIV+9^7Zla^Y`x%0+;CR~4az49)ODjB&*V$Z(dYfr`?WY%4=jdY8#FA7~agd$> z?$fFE8(P#in~8fm9VQC&GMWrBMH&xtw+lxFN@$zc>eZ2J1ur!<6=utK=2YVk_>)3N zt+hWh-!kFdOt^GQw`UzN&~cS8)Sc;U!XJ1>OR@LK{yCB4VK${?X_*ECNA?eA-N4T5 zHaM!V3=9XtHH^}xdU`%uGhMAA#QuH;NGafFa=;*4*B|^R(SrA?INI512LuGf+^ruQ zvu=EGUh%-AOHkf-!Lu@MNAo&}uj5jK%h>Ab>VoUJ zbSMd>Y`C&=-Bk7F%~!x&A9fO700#U)%=1q+g%d#2(spvng^5l99666fLw9jz&|>+C)Jhwc8-_tiZxRCx;ZCWk=&p9>soTWcu|6;Z?$5i83+nnsK32mO?6$G7 z@$}iVh^nf<;%26%(IH@#qtgTp_&U&`W`45CQ79BB#Z%(q;!bAf&iMEm_t}fX=5d+m z-~pu%uc)XllwA{UY~bvr3Xw0Lyv3|}l%(`K=p}7t;_+|{ftcMnJ*$zT;La$-!Vf83 z%iX=OwsQ~77*m7#aT@WS2ElZf=1r*%OSkvdpfqe0D3y}()=W>QoQ7IOZ z<-=#QU7qW{c&+pL1Ml0OQzAwjzAtCGHtmW{mns@#rdDdR&DI^>UJdy>V<3!?U-SM+ z-?UI()lZ+T7jUuVsS0Oagy;%Lc&JCqPgnLvfErB6X1qnjXJPDQcAA)iVa2pdii4*W z#ELiX-dzCEsrz4q#hSI{dCL<)K#&*|ET3?rPUxWe7l%OY1MLFQ(Q+o&+UMWT-vx6s z?2#i!5R-ijCVG=gE@*ZRU2MbI{m3I}iWu&r30f$an)1DDd=2wi58noeUCf9dE2N@z z_wHT8axdpcqYG}viWAODJ8QVEkAcCXDGqYtC$6Q|Gf<30fB2?uY#jIf`*+D}W`#CU z`#-4Py7iiump3Ts;_qj4{W|;&YDFOn${8M>Z&lgb-kk+S*#{-_rZ<^u*GnGihjeZh zA0%WJwrAYPD_X^U%A8uAck7x_op|?&m~ebhZI58*c+Oya$KtxTKr%_xjI_F8pt8JY zk9~i9Ub?}v4+FSQ3-BwNw4iJGqRM4{-BPmL@LpE-jn3%AY$2BHWYP~fqcS@U?d>n( z?eAxa;ybLPCIm7Y_i23U$;%h^X|P_1)|lZG@#2~NvT^btLCMAaq_Bz>czawjR%!mv zW7y&a)PMOhIbR-hgZt!3d7K;I#)65Suv;;j>gr*zlH^d{|BJmhkIOM{!-p9U2Fc9W zDFzWzNYSD~W4S}6q|IH7LZy;6?Tk@okla+HMbch(w0GYvXlP%Qy4yqhPOJ9camGB) zJn#G8``7#Xe4akfg6g`j>wA5_=W?9Kd7N(EH*S1idnr$p&JB=>(KKIZXtqPKnN?<7 z2IarUps%Dn&rK(;flwRJu%0sE6QHLk*!{YFgUtg!Gkj8WwJ|f@cuQ3G(~y z(*Q#5Cjh7SsU6lT8@@U}Jh)*5Gs!eGG=ib1VHKwIjZiZyio?-?gjre9 zPoODI(*m@p<{mj z5orN;o4k$=M*^zA9)h2bg6ZUxcExFJA#vfRmX=V+mq+BO>~;P9_l-hAzu?0mr`mWvz3Et;(IsD4jrBiqPTM`SW2&btJ9Zj|0c79Pmv}mKuk&>&0<@d>{baglYxE zu_eIUNz?=Wx((SBFw7GOCX@Vj`}OTVaA32PlvY7O0o$c<6^w^wj9%BkPTlAe#EM#S zb3drq9<^pYyaxhHme8EvY#vV&33iX>l?vwCwQCps^wU~~%;jf8tG&L!Gf9|~ZyEmb zj-L z=Y^k$h>ALnj$!%nes%o9fW1rdVO!qaI;yFwsjDxB*LWLrkl-+BY3ZsAmkb{tADP`5 z84a4%0|j{dI8hpKTY%L<(B=brE}u>sLWYqRmx*)qv~qGxuueRLC{|kye#Gj*6ZQLl z`Q<#+PANjdGabh{`uOoz%x{cRJlGtV%$6D$O70&>JJY23rzhr-8HWMjx)j>72y$Y; zRHFa@U!1J)I^1Z zY=GEfWMZNh_w4i+-=lXkQw=tolh`o2!l@5RuG>w+@{S#zcS2o!zUHYCkNqJ!E1vrp zJ5>ahzdvhIRdS*HQNYsHf@^j<+a031AIKgMxp!?uian)m=y_U)$<#f{-GA6e zp+qw7tk&Kx(^klNC>*;KXqh)1fn>K7XuzmY>YAgS4 z#*A8Lk>4lEt5@zgSNIOdZDU7=NO;pii$afTqC7$PaMg?`^pm|Kv!JdXMA9_Yx|glD zCCS2sP@NT&rFD!5jKK8v_D04KiUKW#eD>fw%KWZ5B3_RZ0GvY&`NO8QYxjX;DA@i0 zh4QhnF)K7Ho0)(3QBY7cyh)uEVniI&KmPdR&pUT`AS;sHNBtjsDJYx9M!$c5ilOG@ zl-6nEkTe<+8>_Zv%^J4u6J$IQAgbel&7D7A1B#p6XN>BApeIiN#cX(;m37#-O|`9~ zBQocnunBw_U7N!3=(o!sUo6zr(_u*Ir}_T^Ubs;YF#%F74alZOl* zH{_$9Z3Sg6E;|w?4?Y!3fKS4qdWVyI((kO?OTh+pdwULOhFdbXVTl_!{uB!405U@og8t{TLc{=@SWx^SfB|tO0J0tBno4a zk}^i|pEi30TyH_sT7;k)%A)$KUB;d(`|qv{-BSaFk#>&!V50kknXO98Rj&KZP<%!^ z^eT`2^2_f}y*}5%pjud1AUamJvWiFS9&cQ>d3ba*&nzi2Je+~#j^5Y4eZLX=OZi%c ze{n@c7^PE4lTev`sO%>b4BjajPgE~toJOpY`W)4_{fvO2j>Q3Jb0#;*4% znsuYaCKEe*tiQ>cT+2jK_2kK`t{%e~(+-Gz7qu+0({L#!ON=gxZ{0pzR3Y`QsWoyU z()CDC(~z=alxh7^iTR8ImeKj1&yiIQQL4`JCq$3@S<;#FQt8HL-tXI1U!QHCQy-La@A0}MHb8*?CSPX6t9>_p%A#&u$Iu9cLOoRZG~=vjtb^~#lLXpc3)X6Z6hka;&SXn=@Ahiemk zVdo=Ktn!nxc(s`IJwJarIwP#WOfmDmi{56~l8E$lJ;Y^Ca6U&*x`ifH=hWBh1HB1B z0Vfo>`Eu95s$HL7Jw{TePPSVo_ ze0=xc{d8*nf(1Mz-lCdXe*yAg5akgUm9^5gc0J}`>F`5~rEecps@h0e0*_@)BupIl zttgFo_o<+pl?1Z@hT-I_GdDK}C~JfccXn|-j#pK|4#V6<)O?8~j#~GTh&A{$H#G&5 zS5{ES$f~L?e};$%aS(+_?5t67< zd@ti^-D+Olsv&4$`Q{WA@$j>RqXCB1yu3?7;y7w+wrS}=fEx!@8&BOm&|Wz34J15ify2CWQLJw1Q;EeOCn zq-9VuBzo-30{U7MCMyTRyYYri$|5uX8E&GACP+!Y>A))hlCive{kcp~Wx&&G$x_SnZh(b;c0~mSYh9J`u6kA=h zl>IProQofR18!*Vczbwc#2EAiY{YoFv#2wVt82^b-m@D%zT@>7K6Z3+N&qYbdS&?Y z=f@Cr85tR29MNqGjOc6wAt9531}g)f5Jab>zP1q=as8J!yZZ5H+KAuG!b4+VbHd}} zC5VLqp?jjC8~TJ0@7%0qWrW4qjU@Ie<1&$I;^?E`lDNG4F65o})G`nOe> zHjPgnreH8)!I;|$%R!Ngg)@5H{UzgH#~WzrrY~Q@aCcvGA})9|!f2Ve0DsOlAvZ;F z-Sia~LPYX6KUC8+zrQ@1d2+s@Yt_Fr=if9inscq{a8bnIUx#BCuQKs_oox1_;=;3% z2Dxh=ExDc%-m=-eyubNHdDWw)ZChfO6>Q$xhuA&N!1Tl~=i|N`*X70}&eAH|kX?nd zzI$5qns+`c^gTWQm9s6)KvGonLs|Lzh&4A2bgW*VKkhm?J2rc#ke}xG*jQsr3$Ljk zrT8fX6|-9InEQ<4HK1#om2SU~7oM1Sf_gmK+uOlQ965c=TxH9Wn?ws`uy@r~BMN-(gOUq z1!Yg5MOPJmfK*Awhl^aymY%Slwc4Tdb;0uA+PfcEodcrLCF6x%E2!Xn68BUUYj~4X z{_^wlZEBl*lYUjOY(B#M6d_dEWy6Gb<8=)6^_8N$`wo^3C#qj|(T~fPg?V^*I2Xuj z0V`Y2aB5F)KMqnIB9ffy>grlU>m0#`Tkm>T(AX=tth~HDk~ut||6n`3ACJPF?i%T# zMfJwp-U#dK>r;sv`>zTjaolc8WXe=nCjK>y2T5)T7S0JbZ}0$ahz5%_;V!(bw(lHp z@^EH?>dz!6CE3R4a{=E`Kk`%eYF#EX8VdEA(0+%WdN_m>tPv)ylD$3TC447O)o*Ec zMaFpAgkBG<92x;A4?`JU2%!b)1JDUMs*WlU5Rn+-QReaAfii(Hua+CyAX(hCs@1Mo z*GXEx=EF!s+eIm>*5Wl3Zh=2dxkRF=F4qo`N`I9}OdCeS1mdJELdt^keW%PZ4OFj= ztFu=XgG406a9gnY1e}R?(dt}_H>KoOZFoJ1Xh?ZCB0T&pLd5usANFCvk03l_w}L)zeSh`u^yhRnN-)<^s%gvxbWZ2Db4co5mtb(h)JF04Z9U_#A=dsS%VXomisG}^Ms5k&?;0h3()iZN zIV1Z<)8-jy#7X=MEN~h7{;;XFxC6A3k}9-)Ap2DZya?Y3ZRX0Z*k8|_X+m-XE<>Wj zJx(-^-)VJo74(XQA^d{G&fqft&LfVFsQ|qro14!fi8b9Ls3w{uAd6zX3uSxHkSw+c z*(Jd5hMa2gs#SG?BF|;{-h3fpDg=2VyLKg&o?^noh@DJ+j1h1E93o0jsp!86M1cT~ zX<&4u$=zPXS8Ds?V!d-&fg;2)N6ZgHf;!hm>|A`%3XFtuW0#FL=D@qq$_USV(?jZ0H zWEXWUtp|9^*1e4ko`mhme{(QiyayBc$6(-2D`JPT9rF2Z|H<8-e$Ojs#j>sso2!1; zy6xrvxJ%}FuE&-)nlCln_KQD4J{O|sTKQAS@#-H;vLwTpmo;2{I+V)pyQtol4#?K) z)tDXmp~N~tWQkI(sn)VX(VNES25(n`8hEw!2dU9@6u2= z*IV6Y+V+cyPNS%ztIocN117i1wndBQd$oy2kG$jlGWo+;_?FnbwOPeoSHz%_OyxfF zjPXQc6BA0$5O%bpqxTqKHSa#@89)0wTc%|U4E~iOH{RwWgSSd_NO*8U<3aqa?2+M! zYgN~-EYuYpN^sCV*9W`oCu6Myl|Bsw``Bi2c|3rE_9qkLB0X!(c<3LiG@2HYlA=wN zAk@1hFcwC+#nyEhx4}`lT3M$X_~K*OR@?87`^h`$p!-P`c*iQc#vcK8v|dsS!COFVjr%^x1W7&hgC)GU==WiMT-b7#csN`YRk%74VUCp{FYuz zq5bNaKKC#9Q>yC|hZayqI8x3wD1WOSJ9ZZva+H~M(UCddws8D>f{ufuySHY~MBfcA zJJc`bQq!MLy}F;tIaOTaDIQjp-?dBg^y$-r`&!m@{oC%oxDA2S146oQH&yIDkj`7ga{w^z9eDg1^ys*7d?>Wj*uKPugm3tLO7%90L#ao?`f3)xcH=`U!YQ);jzNxvz9>uw>2)k^NL7`*fZFBp;D9fHv92j zEiJ7KlU7k%Gh6fiA+J7Wf$i8A3)+jQl~4oQQ!lYlq?r*B5hc($b2yo}=n2hxfup|>Byo}9~k{XzjS%Mfq z;`FP35deU&djxmsz&GLwJB-+x9nb?RCx4NJjW=Al=`JT2aHjt}a+rYn%s6cu3=Isz z081c1POEP%AAsI|U|yS_^{mcYJ5Dxqbw%H}aYN7TIYN^r88%YdG@mTNS>lB!xBmR| z9@?`wH8Hdc6;c2&&alX-f_X`Vs$nwvg`x30X8 zxL0eYiH18W9-R4fj}II)=saO8BKgrNaLb2O8(1lV_Oq<_(9_G+>o?!Q8yZhH1?0;1_0){NtfRH$qeb*z;HJY{mGHR`qigsj0h3 zZ!pc-SrhQJ##dwr8cM&=OvRXHZd=GBAqFsWrwE6~c=hp%QQ9V41-=f(?Fm5sNIWYr zI)Lm9M9jq?V%8qJ6fn>v^AVBkn(*Mvp7Lnj*>SrWmu8k@OY~Z$&1mXuttcIoxubdR zjGr)DWQLrWqP1S~nMr%4uRV?u$bt7CT+mtg<2oa5Mq!P$oM6~p@j|}A5#MUt@p|k3 zrzv@Vws2Pyd%?8?r#N=pV=Y_r<^kKPPX-)L(5l|_CuOHK4RhBjKv$(b^t^S0)KMe; z_8<0`wxw3}s{1D>_Y5y-U7v9{B3>fbBgpz;;k3@|Gtaez1_UH7&YG2Vd!_Kr*K6G} z-*)xQ&Knqz5#UF5puJ@Y0Q>G;&u> zLakyGNK@aRmOcz|OFVct^A($?qup|nHsPa7^%-+4F~6QUvz zP>aoo0<;FO1W9RH_i^6R!fD5B^L8Fp$BBggTN$cZm~kpjTq?Nyj-4;;8?%1|rv9{g zfY1g+@JWEQ24EV7IA*0131|$yy-H38fNE8$9p%%Nd)w5i1>G_OLHJ6R5nBcFDyS;8 zg$t3LAP_oioRSdBl@SquYQbGr`8Qw@#nu`mEMo=Kb#xqGhoW$CgwY zWCz||p*NqO-=_9sm0iaGyRo?$X#xW-m1!ekY2zZW#jni7CqzU-5}mkuTM4=eF+u}o z{^F3%Nc2PDoU0&5f@pffW9v|BoOVyJEy58cz`oDr<9i4E6g-UT$m-j&0D_ORsDO3d z)zxOi7bAO>)IyVz37LKBHI8`h-D!J73{y&8B!1+;_OJI60=Lv3Ja$Dwl_uss?~rXQk-1WY~H8y*>rl5=I( zptF9)Zf4J(rsn3{vvHfGq>}Txjw&mk0A32@`M8$W#+*K$=hao-SACZjn$<#qqun$` zY`iw3ySb^XuVrs$W+pRBTtUHQPeA^iD`WdLsetRl5sdP zlp@#0-?jNx2SJbYf!EwUFMhVPE$;95;bhmXw^a|z)^fMR=0t>)$GjvQGn}qHuT>0Yvz1XC)I_-%15re8zAowLj#S1O(ZE%JYFj~YjYdI zg!V}(Q70O({CYG0P3j>S?XaKCAFF&KvTSh#k^>A`?XYEbtLo}Tf(OkarH9q4=;l52uKC<6zdo%8CL|3`O=10xalIxr}U z87Rl-9U9^xzU9jCI@;TX7%1blT8`JY89BC_r6Ja^hj5(G6fz1iVwqchg^#(isO4<} zyIyUQJ!Kid5lH~gl_6Tqh4Iq-xfq2Myex8L>#2{&%vSGmFGsw%LENM7)pC0ZV3PdO zwtI|sC{OiMBgiJW16`LVu%y5l`7$qFpPPYUd)Zl82ho^P38%~zTKYgG=)}3WxZu;hS*#~h-6`?5J$lHb;vb!R%KUetlzeQUMts&4-IJ?j zy1GO)GTcv>tvm`C3Z#vi?(M5ruf}#taYsw&xdcp;(i80g9;tr$ax%f4_I$In*nU2w0EJpYaHykZn;Qi?mu`C zhSn{@)q&DD`P6^7NVArwSZXLE)02l7!T#kep1ToTeC&#H!;8((Pa`D(iY%jX!lHm4v6KK4g2y)yU~6g64}c@-wO6ji81~LS9?-+1RF3u5T#D zIRULy47Doz_yfYWw|1a+f{KE0wN}vfiNq;{sfKsLBcU>n4c}%}hf?5qjQ4}AY#>r$ z4WQW=eKNqAm~dB-iyi_nOSn0pD>BnmzonB6Q;2IW!UEwb$DuHKF)#Z45I}}!&(L4B z-r9Z~b%l8g8xzU?|g-{q|%Ky|3a3!>Bs)$*kh1JD7s8NM3zU-lFN?aS8w zOWj;RUS1wGAc~KA0sBk!Lj$o6!ooIU zQ{Y@222yL_owUJ>D&5FTN=afHpE4v}+|t&yYBQdejt&eU1(_JdC%-iaQF77lzFU|( z7X$DF4lWm^IXGwx9W00J1h;FX{N1}onP!xRkK+`Qj83UXlizVh9ToTcG+9-6Um3d3u$9ZqtItRG~&nFsY*C_A_)+40Bc839!Ak%Wy-Nu zP)gmDbltwwhO6h$B}pkes*CInO#p0Ej0Av2IB9F*%|zi2!7yNW)TrK4=%kQSREy;Z1<`l@i=B+k6y13D3o6U=j2H)K1>xtaN)7&>b7 z(hx&o40m=@!BTMLEpkdR!7qlhuh!t!2jLxa?22DBF5{h;{| zNrP!uRxZaVnPpc=NC&eAvbXW^&H#9T)c!rPgTNXc2Ur!#?^>i3wSDeY-!NC(il!OSS0`2|f51M~`*oY!1-a7&THRvR$dVi}`Pu=~M zmCNWxPGeeIKO_TamJ?QzwgHNIRG2`%($<)BPm#ISH5?xD@RQNa|9R|b(_H=E_Nlwh zw|!StDt@aY-F8>Z+t+85z0AB!tUha z=$}`aHZ4=_|I>>K32jUJ;BLq#Gxeta`;s+o|Gj4T?(YBhOrQV#)8DK1zm@pkO8ir? zkyhjXf<0mN!Oynt7@Q@_q1)dD^NDoAFiw5VXp(&Q)fp5o#l&Ru{HA=1?7b}r$p#NeBFTwpyf~x2m)bu zP1H}VE0IXh(9{udZ)3o;;WZ%1`bK3%sT?vHfgs9aoQBc&aEyFj4<0Nd5jhIDJD#I? z7fcF5A5rR~K%Iv7aSl)Uhxco~O|x1@>TG-6p6MMre7KaR<4~xpnK4qP>V54rJFbt` zg=SO?pnOG<0LIY=SYa*?B@{0@8V3G&xf25UBs&4AXKx|X`gA4*iiEoYsKgh-5=yH{ z2pZv^TjHtrvtE8#pwfpr`{Y>BBzdoc?gDS|l(U^M{ugoSJt2Zc@Ju?-f4vT_%R95W zm(FRI~?-1J4*6}=>EPXV*%I3>f#Ap^y>0!ROoiF}vCr&%{WfThq&dz!U5X0pkjj#9B^kwvn_)8JqRi?}BIA2g<(Yn#>IW8ofa#>U01XCNw3JUOR04ijXLv-&ai zQv+er%8$m=rYTZ45ep4WyZ`c>`rRvusji%TE?qiMf>N!Bi7Nx&~F3 zQuMO)znZu8knx;JIZR?zI(igExmZM#RJ;U0kx`0pQ6|~}yBW}15I~Y3z~nemM^Kxk zE~|+?g-LZJ;if~5$jhhbAfvcDB2bNt(+D8>i7yS)dsJ$)d_UYtj9H&!8B+vlz4L&` zu$mN`5mn(@g*OY$dtYY+%wEur#|T2bu{I@q*#|_-o)nW&Yidm__{Ag$Kr^QBysD_E z(C?$bs{-bKJSd;smZ5>vi}u*h1_?SeyM)>g2yz8x7xL-TCo>+ee%N(}3t15`jxf-Grlu^c-;Xg;#gK+P3>GwTtzZs`SWffMR$!5au7W*QpLoSQ9uJ1jb?BKqUOPE-hNb_;5G!Gs4hPNoXG2{ zUmqS3kt-*=c-Jl3XV66ft`3D8c87&Zs{H)SVhl@PM`HdSuYZM3=^v9!VS6L@pedX*(iGl-=xG1aI+*-Heqv~7H+1N@ z{TSr^W?+{-ZtA=5zM~OJbdo@k52RO(QMpI3HSiuBxj#H1sS2P%5lB6M)DxTqW=A+a zMH7r&$S8z5Lx!aTSWDN=PnF)hj*ALkmCl#32~(f?8h;K+Jq&-a8AZ!Oi~R&xvJv`Y zAD05GnG%0PW=nisaPo;CZLrLh41F!KKR>|2p|Q(#E7@c@KUU7ylyl24b%nK zFi=OHupC{CZOc6F%+w-hd>L7a)IzVHY*e!!C zsmXe<3mC&X2V{l*WZDYLTBf1`dPm5QC~HFpX8hTL6-0PPorhRtXvQz@XgYm)#heBg z{USG%4ccupM*Z->6GfB53gm&23SoAS5d9KOmGwl^D41)SEfccc$w8&oF}g|0ESYhK zAN_4%KIH~0&cOE(8^n3Ey1pG^1NM*&AiDYW-+#Ay5V|#nclY8~AGl56bBxy1`M&|) zUML_$?2OJU)CHkG-mb}dNzXX-4gCRrk@0TS^W*GC$*4@3YI4Ur8BLJ-A{yD zbS>Tw2#5i@h`(qQJUTYcE8v_1EQ6%#0n|LGV~F(>kp`K4>h1A)^k_W;wbGH73!ERr zGSSEW=Bf5)K+IGBoe>L0>X4=PUC*&&kCn{ zMp*rTZh?Bo)yCuA1yNYLefxHr-YVD7yW1v)njAm%_Li7C_pM}oCKQRyk#a&Fmd^Rzf zF{ukFt~Orm!B@jm$Na@bfPeI-ZEGn`#d6d-1Ds>92unj`M;IA|o}EMUMiGbtu@Ij* zd$x$AWI|>?W_2Ik`6xPzbELGh-{PD%``NQ+%AugNaLl$o^6)5bu=fQ3H6;i;RljeU zA+vDNqDD@cDS8lL&NqVO%$Sb)a10Yb9QZZEgR&iDSDv9%== zq<`=_AA>t)1PE8IJPEU{fod25`-ST<-en3F`P}cnzbH35^B`C(&Yy4U6Df`ZmD_<_ zk(e-&0?^YVrvhIZ1Kf*a?U&i)NNe_KGS0T;m`>R_{}&nNqKi})IqaRj_UD@x2g~38 zX0bBp*gK&LV_{`Zbz9WEo#&Jj{i7@|$=vhrRvyW>D%tQbU&v4S+Z0G+E?;{PqYjf-J(Le!a4Szy?+O$@;Q^Pf)1udb<;{ z68Ay4lGZ$Fv0p6t{cont%*!9HGg#0qc8+O(;#gHxbqQT5EvR)AdSl+#NvQP>mw2b& zM;qW+roxz_Kf>B>A)Mn#94Rk8YztV55y7VkB?d$EIT&nc!p zQlBEUT3O=3=$=uP#zH`G!@iw(%j#-7oEMSNjEQq&!c+8961-0(GsOC#z1qzWN-m5mxkW<0yJ&`GI*K!4C$BBuaN%>6I`FXbKeSR}ID!Gx|v`O=-_)UzGckkk}ENQ;^?(zOo z>GrT7aYVMe;pe0wj|V}KJ2gI z{Rf!=^a4wx!DNR)wui4(3F9F!ajz}fmwt#eG>06GWzreCeRS{$F+jJxTiE1qDcvTi zgXFk!r{=L=F*64zYgm7>!(}}q9peF!{IlD~W>~;9TH*}a+B_H|>yen4_-7es-ByTK zu^NL`kDrIbsz`Cfq@yXba9AwGAkd5S!ozi7tvQG1rC;L40%&zPqW#;d+%bm2lLpYI+w6iS;E#zQCXgF3Jtwbt@9EjHig@8o97zu*Sj+uz@(W9E97=3j@CV zg3|D_f?l%T@Lfk(y8+CgQ$_mcti6V`qKI@iWPEwOl_fMeo-sLe((&`_>fiZC``h9& zPnlR+T2kN~8Xmq$f3%9H2C~wq@zQ>>K*N|2`e>`;hk4QXeftszl@Q{j9l~rb=MdUzCtlDdzm9wd^gQ{>XQvhA zhf<0(+C3_-L#65(w^JVJ$;W&jNfCyfv%;pK(aBvvCDHz{0a0EKSw}p5eKyA7mJ}Cz zfGHG=*M=;p5GYhyK`N^HI{`!J)eWT&86q)CL1}u3yM*5tyaPS~scpy|3lPD7b{uP1 zt-`vm6uju>>*Jc5w(e<2mwOQ<+dt|vQYqwhUzWq`-6K7PCVg@*E-&|j>}=d{S&XwM zWFE(*(QQg6b~nOkGW@vp)mD`U)6h}38$r0UJTjGY;OH;kc|i*W%LKqP!U$O>eVUt_ znX}Ak!!|=0BOm|u4RV*+jAd^VzZ273+#7A~BogX-Ny%O6;Kq3AF5^JqO@Tx6jMZQEkhcVLHxz~1 z*S~JppB&-!VIQrbh>SKpO4UNT-@S&r$wB7r2iWSwN7c&PSnGH1I>(A;=_BrdGBGA-cE+~F#5Q#m z-r-{b{@{!gf;V(*lWxDNPVY80J1v|ibG++U?sdN{)o&j}MC;i)>L-+qv`3elj>nwQ zR%E?Gi{+{#EO1%7-xuQ&2uq#dhHRT?(F4XS0}K&Odx}xC!LP08%Ew^k2PjNF6$%zI zU%zSM^XSLw2~Sr1-6&J^xu& zG+h6G->;P&|AqxmlUf9J`ev#hl-AVv_Bao5tD`dz|CPdoo3K+h!1}QFT*pHfTTd-W zu_%0{G$OqARkuO1up|4ufdOdMGJkuP0f^Ger7oVD#V_yxP*-S5iZr#$0$I5S*J+w` z8|c9iABj!inH@s6xBXz}Lpa>C;JDkh2D-%>1{kYWs7c6_dtUq4=3 zZ=EhreiSo8dTi=|todNnykmgz@8cwm%(rsq7PyRa{s@?rrYh?_-+ztPMBq}m^HZRi zxQ1~FW6YYNNp=K*i!9HyCV4yh`od#kilA$aUg7&EVMp!Yqhzzl9Z)>6<9zXBAx8Ld zrSRjq7<3?xzX~8mvV%9bgylQl_+@Zs<3XPFUq2o+fTMGeu)#V@qsXF;Sv_@i{&3C` z5)x0LlCfOQ-U?u~SHM`Ka3%Pz{4JUq8ck1bisfR$xSvoZ><|3&ij^x%D=Ho|xXX$W z{9A(Z()t!fTh*M=d7VlQ4h|@8B~@D>NhDVd#pXoqI>hHfy3PkH%X&89QAag5b_QLY zF`LZy5tabDcc+#?b;GySz>BGADEtGqR#a4!B0*X)^aF)PM~ebAhAh`{W!bKHT2Bfj z`d}^<@ROSs%}s%8FGYVFIT~I>y`|J7h?LBry4&vzN!FXY5Xb4i+s`0#`p|~8} zLvpl;N3ZWY?R`cVgZ2<~g&?rTjU9y8dd^qx*n<65h#qf0+D+g-q;zvSY?5zJep)@D z=nmb5_=JQepg#rJHTTrQ@53oK;l^AbCKv#Yo`k}emkVr`ZHwr4lzOKzGVvXk(#vKD zg%z4*IrRsvK8k$~f?QGoB&e%|a$xu@K_V5rzv8qD9=!!cC=~=ObUWYn&a!X$%;u&) zg#ELT)7Oq6+bF_<%P3l4m9c*o8}d$C9wow`P!2ZNW}6EFBY#^>(26R$Di8t-F#rqu)682$On?{i9k5|9Ax9Ld z?ESvgUF@>1iLr4mXdvoamh@qy!CKNqQVLeXC|TC}Vc>!OIN^qfw;#$o*?T`)PUWV_{}q1Lf+{$Tc09)|SjtHoA>d3i55`7hXVeNFTs5 zfU3A(UH~uw>a>>i+XY<+p&W#tw$;)LZ44l*LH-sC>`jI|sX?}|2(h`LTZi`+Z5C2q zIQNLYw~e~6K00%+@1q^J8~I3ev_5PXhWUIbtm0HTwu;s0OWi-}CnL$|#dZiuOLKZ; zEjYa#kK~y)m0fbgrV{Up>qyCka*%-yUM>VwckhDT$!>QJ^A($K)ov+@9H9R^Fb4U{ z+8}Ac+H0tdBxep>-xt_-($PVRt-8?wIzCw4^>q({25(@1bCWp7O4D9G^ZTldHs`-lO%bkD%8Rz)`I zWQsV!wYIDe~m#&~tcQH`>0g?SUV%^idI%04MKP3+T@wCimICAf*) zFA~0#+7a643=@-%>6P_>QXkS?VLBY;_Lm^Gb1vIsO&hj_ml)FriM1gL5-4(}IkaFN zmMukOh|bOeE1*~!&Zyqn^_8swEce6Rc9+OP#pq|mCncQ&UISc8vlmJ!=g@yXyHTrE zhMn4*D}iIQV?>E;K%IHhg1Tw6*@(&lcuwQT#^9IqFGowpI5%N;#> z6bHy*u-%u7sBec&X9eF1iH)=wp|apkp9@1qPf-YpKW*mWff$#x+8T7qudggIyo~xK zx26aMk-rF=RCw|5~VWgjHDFT5WB0 z3NzVsP%>kUjEqF-CW#^Q(&kthfn4@LEj(Ux)bzrI{4Dvw=d?|8yiVCNnM}&OQ5Fb6 zG)jh(Odz3)xDSdtF}GeEZ~w@HZENTz^pJUWB|2enfkFGba0Uy`g`S}ed@yqMsM`0G z&3@Fn3XSs*)s>~!1F_xYi8df32CN%GX0N~?{UI@!oT8P#|FkZ;R->z zL~3Re5RV+X08j{uGaWRRcHX|`=A|%g{dC5H?#3l{6E|lga*J2_H%rsbR@|DOUxDBpD+!u%cvxEMLxC+DHkf z-t06)`Hv$P(s_BTivXd^@km!)E8fvL;cR}Ss(G*v{;&*NP9|TxlW2*`dq`m58t6~v zVx?1f)}4j^0sx=~rq^$sjrB^q^x^ta^3^EKcy5UwCCoI$vuzhna3@K|33-jnWBe&p82D{xd153#v(_Yk-nhy;YE0-GDSKKsw?hS2qM= ztv_s-b-LJ+n-3LSoC%;uLx>?fV#>rwN76(3xf%=un8Kh?1t;T2hOK49-J=VUN&@q- z4bGb#6iNq^<@ucu1xYvD+QAaSta(fFRfX1|9~CJskh_nkBjY|AKTe>q#hc|u=H^9P zQT;IGM42JL#6lg0Tk`r=Ecl}5mio_EVh0Ud%WBi4u7OmPMHFD6ZAr!e6}vtP8+J_D2(5yj1L7d8-&=tkY6);Ar^|HdL%^O3rwZE;aTklM)j|`rW;m^1w1H z%#dd1#a^h4-JtrJe3Lyz@g@bQ;E-jHZrLC zaqz0Jf>TAgD`t@1gz-v*v7T4yjqK7HGJgzz@f8LAr_k-O$W&l+Pk?lj`aw(|8)!CVN%;A|fKxb8qBhWcEj zB+P8#8^Xoz2_diGMkky(lI6?ZmZ3&F7ip9ss1O7fA?vPvFglN^eQ>CZ;93gX<8NcT z?Z^NJ#1f~j87>t=L@Ro-p2FA4=digYwztB=D+h~&2vni#VG*0CazNM*N;Oi1P$51Y zj1=RSyEbdS601von$_d4uBN-U1qma67De@pL@qna z{qe>+a_8o|$Pjw#*%Kq|9uB-bHipW~%}uHj$bfud9R2DiU+a&(wmBoiapzyQ?bIW* zxwtqXJ@E!NO@`_W@S=T@`s2pj;vy(7^q~?eK^g82$1k7g0#u)o<=Ote7fnwkgx$D@ z$pUbDRzNHE6P=HaKy_7>y(;)y)2=A}G!=Z*YQc?DvH|m9p2Q9b*+4f8HhbK!um2?5 zGFmHn%hvrHR+tkYbFu3PUMeD~x5J#E$QnA528X|dBBXV*#MQ;k>r%-s`ZdU=qFD}B zge0l}Lwit8>sEdK{P|YC6BovBR4Wy2O(I|#`HV7t1bmUYRE$Mg9C^LFVEj7U46!%u zT^s_Nsz7HIQ^EXdo-%uO2?|i2WUB!r_UyRSm<>%iF$!vt2vOF7&}J73fcn9CPx)lz zpT-7FE|B^GdDlH5%52yGrmw|P*{?NsDg-#SYh)J#$OZBjf`{4GSpIG zdSN3LYeVM=9WiLb`=RI2iWa6!ODBQ0@sq zJ+auPLqsm)B!vN#sgv8Iw#wRV(i@QrEuwggLS2GdLFendbOGTAs#wZAO-;>~TWCLJ z)tW_?OqEM1b&!<}D@{YcxeyR~Wy%}?X$ZPkmRbfz7>_FCq~WkoFo>P0jDqKQ1ldV` zOg6y(rJjMvs4QUa;0tiUJsmNQcmy9SF+su%VVtP-diR0 zn@)o?kZ#$`12}>ynDI#9JNmz@U2QofW0#g;15hy^9A@|m`^o#UBh?mZ#g+aVU= zD`=25H&d2}I)plP<8pS(;`N#BA*2-8W?@8kQlkW>PY z6|e<~;w+*sL$-VO$2~Rr?@z77X(NMPUS3Ys46a~3ATIEU&H^hVf6RJ{n5%E%{)OSR z7SIt436n2wuTvMy2=YUaMbH?%4BRC7sPM?h!}vh(%MwvSUta4nIZoz*V4}iF^UEF4 zNmNtAMnxtnBFh(QqZNPt7}Yv}i>?FzCl@RTf8v|@b)d8L0Ze+!eRbs=Y*UJS2nq`h zUXRd&E{Z!rskp_Zd|VLT;A?1c#r7#6sL4^6Npo6Eg6iPz4&%H{<;97K1PaAuOxS}~ zR$XbAkO`nfHiOz)&j~*loPz$m0sWaSthvnf@e!Qd>R@WxWwu(K6X#Uoltwuz(g^P} zcjR_v30NL!NlC>F55kWy1=$#v~_Grz?h}v z6)IG?@(cPHq1(!N$~D+TVx@2s_S3a!O}ZNSkY8O14?rve^Iu&SEy}5{S8$ zW{9x1fG%)Q(E2#Nd}IvBy@UuD{%z*GUQL$)&1!4qu5B=mKu8-gD?}y3dAt`IRw1ez zFDyKe1};$_=q!eaK&HTDxOnWDW}N?Al-KV9x|th;;y|(J;?2w#dQv|mbepZbp5#

bX4q?x;JDJHm;x7Oc+U_sVeUE_~B@fh&9I zXZhEc4>|r6YdoZgBmV8{{fjBw;@jUIM|~s1PyKzP$X8bI*Kg)3eXFw2U$4YYMI2wh zGwpxB_P-_hwiW)jORy0Czdbm{o4+x@>20On^Hd6EvbQdpYZ&pb+^^~A*SDA(b$qk+ zEX^T_7djgk{jS}%^B-2>F<&Bol$TO);T~hyK{X8xPpB0b0;^z9nV7-|)C4HG1m=Xe zHEGWCxp9{^PJumNFMj1(*t%y`Kc4D>)kYHxfu9uhBNxm?@(N;#AKF4TFm{^NJfMmM zO8P*N3K4?!fjE2)ff0qDECp+W#Rg5PLjNeI&So6En4q-5s7kQ~(I0{>v(_P=ky$bx+ur>Ag z{Ewr#>mRWuq?Ci{Mm} zft8f)xXS*gV;EFCs1?6%n?2GVLnM8MF=z0iFsETf|8~fmCogiGN=1u;A5Ve2ai? zyc7VHM*~&EE*dfdRSzLIq5Xw#nX8LfE&i_y%g8(`2ge{Pu22c_N$}zJcyw}9%*Ko(J|RMzj&lV5zU{CmwM`78!_(rA9|=#Eex&PD zs#@yv;hqCZY#owGk$?gqWKD4>aIcV(rWdd<;mIgRfSjSpxfKgk{SXc#!dm?{HJgZ` z8w*Q5rS}}TI91=G&#-}o+7PT3p_W_h8nK9T>K%eH155<0wmNm4{ju0dUbc20(xAFy z*s{R5s3;ShR}t=-RX%r?~NiGyS_|EDfVN*py+&UE-FO#f!c;>Z8^bNRH2MY<9omGkT>DHz{rU$ z=#ug9;!T8<82~&Zs3E-yD2=v!OLB__czHMU5dCbnFWj=BN%6j|7={h-$^L zmD*tff?DA>A~uKW%~l`^{M46J{{_MCnLvBcuY2sJvCRcgJPG`1F8P&QX%P#B+p!*7QIIC^+uGkpR}{$XEFtp-L=xUChL!zBRd z)_+_)AE=rQJt;4A9a^P#&$WJ8{?8v*pkXIzX>w?2(L!BX6BY|e5mA~6Yt!(2@H6w? zj)nhz#KBk9+=n(+Qp{(k_Cgzka0iXBSOcKie%75~eG$r0|80uy$b1(lc=|2M7-B@_ zMLJe#LiIYjy;|%4!`^#GMSX5j!wW+E-u3=0eQF%$nJ+Mok@zZ;KQWfh+B+CI-We%{dMCAps-Drx&102r{4EBEwTkO;d5^>7 z))CPS{r!);tjX(pdf#4TcF%`G5ajgqO!j*a%Tx*t_*5<+t?=VLb`}ju{vzBTXh(IE zGJ3qXZ(I_%W`gVL&o{VbQCi-QJcGjipwv@_9UuZFA8(Ur=&?8&l(hRqkYh41ZsJlB zMM84`?efdi)0mzeuTmOPI2d!hQ_UjYb@3L{3r~ZxmtN-`R@zqc!t+$pL)H&wXLvv5 z&aPSEDw4GGwSwt|!_R{@{F|HhM%59LPpL@s>e7iUAxd12TO(vC^d3jc zT1M5`ua-@`T{Zxm&nauI)2q+7dMC-%@;u>I@$s{b|Kj(ccko`c<6qnFcR5eIB#E-JdAxNqntK^89#}I(Okzylfs4k*7o^ZRq8(&Yc*mzn z+D>j2XVovOzOg+#-SWtC+gaDLcf5S{Ap1fwYeneqE8WF5FxxlCHNV|4FKw~9*l#zk zWdCt&eydd1wU<&`e|_mJDt`Gv-fklgMF=?;-?n2Fg5iGI`aEG;x+g~mp|}2 zgte-cd_KBQIH+f7J~TGw0L<5N#kiN@L=BR2IdN^%9vCmyu%vb(aN7v zjls!s^2Ah~{7Q*~8{ra`dE%U?g)>gWqd~6gPVR7PsNJ1RjT1p4&6A=DQcK-<3)1om zW-7Q7GD{|)C@>Dc`}spo^i<$24&UZ3tC3rjiC$RuQ>gbMsV@slvoZjw4F^rUQdqB_ zUiW*zQ_TF5G1w<@6_XuH##0Jbtz%8mQU&5X8VQ1T2Tmdyp}pjRL4x5W08BJs8N!Z( zH{{{9e*AXnm%JfU2Vzy8V65XoMSG6xUaK%!dVdc{%@Ym|W0-Uw=ueJ=!{Z};)D|M} z35sEt9$vLrbcz3t>H3+9)O~Zze&Jho)dE=+sY{t`1lX)+nM7Ge zN?aE;{Q2Gm_U>GHr^Kz3uvWqm?W-FJ9wy1+Y&0c=58s*Mm)V4VOxYgdH-G%_Uh>3=^zht zMwdOwJ<|Qc{Lfr~BG6XkJjXz1S^-4YRAKlrMD-vJc;0cis0f~f%XqFPs z-5Nu#VkE!p1%XVV1u>EW%6_t0CjW6^N!h3HH4$0&tGYyB{(ljXxBnLrdC!0Gm;dj7 zOb?sD4K`=2)$2kcHT1m}e!jmunaMcYs7>p9XUgklUfM`uh~^xhU8Uf$1Ap`a$;=I7h4>zI^b)gAh-Ua*=pWQTr?R zdr(OVqAE=sWRNxkBPVDpStS>|E1}#CoRbSC4$6Tra}vGn+@?CE`a+^vwW8{w{tiIH24L8ZGlXY(f9 zXc@5cG=K;omgdyq7IMxgirxm#Ks)43+>5l&zvqO*6SVgOCx$jp*pSvE2Kn0+DJxZC zXi|?ssNeylUO^bX+y;-D;!kNKg9$&xt3(xns+GxJ;lDBJ`aN5h@-y0V_r@?lrcQ%< zt9Hm9XQ&M|k($Ppe*S#|vd@s|r9wcn`-+q(aU7^8X8q#sX(6Q|sD06Rbz&1Zuijkj zfq#L-;6c6-WA9svj5<`}en`=lLN+bQ`a!f~!{-k@;Xt+qJoVX0)k5p{Zh=|H1|*3n zq!rbBQJM#k+KEYIBkPDcF=BUAi-DGqq#;J~h9!->`Hvr%{XHD#)=zpsb7j9mTi&A2 z8z{prwkr$>KmB@b)Ivt7mdv=)Rk?5rh(_^Q^`*8D5KXPrP!uixE=)iYd=4fp0Q?5& zhU2Sbrs%6WqPL@{yRsUuw&&vYFSyt9dE`RC7PS7GN`pz`GdTT+VSOO~kDP&Di2TA4 zkKDXVJ2Mn4FB_N{C=i1G@k?-Dg`m|-SVpP?%Ed@ka!e!8`b2Ka} zXuzbdZgl?fhQ~$}v4BdEeh`1Hjjm7^`}60W(EJWKzcEAGzhPJ--7eG9z;4*J3s2ZMF(i8B5bl5kff;N58BX^BLq-? z3RIU@3U;*>Ly=;*d^I+9o7GYFHuiRAm$J8c)&tGu%$|oA_zh|GncT>lBJ-Bk+)QqA zfY^hY@Vq3i>I_F6*>tZ1(hrxIm~D^yQuqp-aM(kxFvz#Xvhd7fP%6A&VS@*ZfPb|@ zuJN!6g=OVz<-qZEX3C$w7+`b|%6YNb= z!LaBc5s>Hmlm6m&;-wI0J^_vtn<323I$Dr;WIU^bcZVqG z6a1oa0|g{d>obu#A&nL_%XK9^kqeBJ+Cjc82e~TcS%$u@?kfzfD+2@+z@RJ~@($|9 z5cQQPJE&jVCiTj)FXrtcz7l2*N{w`cmMt%A(d8I47`sV^~5?Oh{W*oXQi#`}N^#A1dqC0|$q5zwUL4zC^xZgu1k zO_cy?q8X+6POnp-4k*<~v=Ey?YFcaVWEVcsGo+w}?hrVRZJ1X07OATnL>{V)CS8t^gEEB{1O(hd-AUnu&*?^d?R$ zd0os={;>Ck2OO%bNx()tFrv`+lMUyMX1Pym@XmuD_fC_&1q}_6iD`Kdvy!xX)p-*@ z8$vAg9zJNFG;g7XD+~Z4XvdZS&*2_ChIbD-cMwt1G<}A3(nQ=%^j6Jx#`6r$oh7>s z?v)x?fQ({XVdEM*N56q0C5!1qnQz2{w(}##B>fx_`jLk#)nWfSSMAx^29;~W^H4HY zaDK4ZCK}}gfhPkvU1aRTpcDdVp8N{mq!y{{<&0};gQCTx&y!eFB)woT$45Ihcfi4)ix#0r#mwZX)I?$mA3xWgIkXT0x91P_MyVM%|K0Ee<2SUO!!Lgu(r@O9-%Z&S6|4q6l*hdKelg5PECHIV|t7ZZDB zNL_=gFz<4%wmViZ8=SBN_Yw5ronh#|lKHO1XTr~T08DVEk&zKuee8I_^+eTQ3Unrr zF$5t&INY`QNph%&^FO>iC(lbrlR{GzYT>v&KeEh-)JVUE`1Ib8RXS9KbCs~)JaB1g zU{qTIq70M%Z2P*`i?A(&XE_$eJ*gJrxr3Vb%L{bOGt^2Ny2De?%Em}K%uAfHV1aFL ztYh8IIFn6^GRw+#mxV7j`t6vlZF`}9MVC3m=tSN{>QGJ#1T}C>@fe5#q%!Aj z(tk4h0qza!EPL~(Iv*-XWu`Oaok7`b!G=r8-$KQuNx-bnpCiG*3d3u_wmlFrf@!kL zsh2`^0F_+8k<2;@LCV#ll1V*5fg~sFSH41ywXbrD;~fi0u0h;s+A&C2>JnI=&(>id^xNTlRdx~7$E-q}**L))9apV^Pb2^F%RR1j$`-XoJb zQ8GGl#mEEl(t>AJDnKh6?BgdLK+s5^K}^yb<2+l{mX?%Ad5?ZDg-DU+P6K?QCD)A=LP>+%(T0JWL@%Xe z`CGli&xjSpGMz!er%Z+PTubh9!j4^K>+O3w@pkk0&dJUwx*LM6LY_tVcO4Qa?N#$b zmGZNflR6t1s!*W;%#>6?agaim(+H$H=jB<6R3L#F?G8_BPRg*b1o7!*+ZUMy!XLJS z?8MN5{4nQx+CU6WZiXy>aZ)cj7wY(sCGFC&5d5rT_5;k11&tdB)8t7;01oEG*ioQI zcIs11VqpaNM3)Gp4HJ%r$x%`J(~^`vA2D{~Xf~w$X3YONP-ErjCPk5fF$YGzu_1rp zt%|lG-{*Ah{2833Iukls^#fuL^dogX9Q`LaPxxYl|G2qA#GADAuHSAQ?CT==3-VAl z1Luah-LWx;dy$aSs?QcrQX}axgJ{cX30cZ`I5|)Y43O0j5y-&x?T_d?z7ojZ_>exdcm-7>QPWEPl{7MKTLhj z!!1atu00EHuL6gIQH)_jX;3w{!zbX8OpR#(njgw%gq?ShZe-F*iOgz{0;FCl= zJ=7lR5Y2`bXna~gdmkc3#hQ=2Xsvvkz0B#)f4F*245k^(TsB>M=Ankviz}w5mu}zb z{`f*sx>|4kt({AYQr)kPXhd#$AEE3qTGE^|5VdsZZHQYjebc3H>th^B@5b}H?j;Cr ztsbj9^7ul9_lFNr1@};1FqlvVr&VXR7djkecOyzOWgClA<;jSxoWzJVH0UU=HKfFO}7&ds2H3<3HWYn0e!9LVe5Wl0gbOtD=%2@z3tYV45B{-fBkPE^erA`J z6|+=wtg`czh2=kyg#m3FBI~0LBtAj!H3TnDmVg`ZDh5CxT2s6-ORxyXx{!i`?3rQ5 zt0X0X`7ly}P=_8r8L|ywQe4Q<^s;#*>#)SfW`u9DK)e?PzKTt$j39MBXtn#^2Kp{G z>C$&a&ncWv036bqIMFIlg_9Q*lm1|>R1O8wWtG|TmT7<7<}}oLhM=QI2#18lkSbX# z5b`6~paDk}2DSaF*JtK*98wDkNgh^Yqtp@XHrj-as0Wq|NvVCGSg9-CWnIGoicXxx z0KEKV(5yI2^)nqMbU;vjOBqmviw&w#2CwI!ak5=ak{<#+^;?VMXD774jz1Md=!|!h zdMSu0N4sq{mu{Udl3t$CRm4Fj>)^XjC`0XUR9RzD9YQsa9wFC$qBriN%fv2h53(yL z_B$i63RFa8R(-dJtD8dmNQ~rx6<%}A*B%!(Oq`R{%T3gi95Ria#cRl4-iUYk_`PN? z`?nE;wuf_`l=7A(?9vY2R>D48T{l!a5isq-@s*{`$D@rd^DMv78d;D8A#>I7RHcPf--AcR*1Vfm7Kg=7MuSu$ zBHqT-)i|koU37F&IOynDKqd;4rSqwI8jti0%z{wdSCYXUdG)E-G+7QjsSJ*{u;b7D z`>MicEW|2epn$A6ZLin03~mvvqi*8hOCG@reJ@6cN5ar zGS38Zgu!5_tr&0{?DOG_&m-&swTja$7aDcPWPfrcuHNy4##FEwNJ?$1J&DRq4vYks z5#x*4D!6iTa!bR3PwC81i9umS!o%IlKWr;Rt8hEV9sG52X-P%B^$Mu!V-n(%jvj*n zav)w?;&nmx{U(RFVF5ezYtOko_Is8y5YMX_hVRW$k)z0>E1(k)95*kAkrOsc+^t)W zs78QdTtvOM2G#RmU(04D3AbdAk;kDUTd%`~I07{P@Rc_|!f4St^G3^~GEBU)i=Ujc z1x~0}Vvqag&0UDYOAo*$)hWa8O#~vH+rYo*(sS(%iSTdMzsF%QuS=fZ<{+tXb3lJi za#C-@L-+FS4_#5?jW9)+ZVFv_aj)~oHP~Tx2&g0xn9Ob+vmHL5-`>*g^AA9{5YqcG z^_%XFk#BBVQc(tX`U3(2fm1pS=93FE)A`ZzGtp5|L*v!Y31113H0vi!ko<%kVLw2* z$q+CyimWU*c9Zs`bi8<^-q6Ijk3^{qVw1C9VZHBS69DM~6jE zR>wyWGK4UAvo?t-wzIAk>hujOhcJx55TKbG8<;Tqh)r-QBHcQ&OAqKhcqaY8y)n{Au2YAFs683o~? zo;{+XJl%x4weGi{C zQY1o#+o7O%9-GW9fG7X@+MjF&(CmZG$Bc~X#FCBrkeD3o&nM0ifwK^C-XM)AFTACy zac!bIoSNtm_1`@H!If9N7BcK7BKHPW!N zA@2hu2$KYvW|_r(E`HsJ&lrpMIxy2_u@#id+J z9s@yO`ufgkBD4A(D={yQCP1uYP73J3IWP7qL_R52tl+bmN(cr=As2Rn;RV}EWvn(>$?5t38 z{U$qCbM@=X^F81GX69V~ykbn{$)P_RI$j>gJwA88`tk*4!?9y2YFQ<3scirv$K(bl zt_#$r9YC7v#2;dwkOy5crPQ={5!Cp!cge5joF8kXb-CZL6MacFP4ojC#|r8TlZxKU}1H#?8LUm zn~p0|ADXtv^dig_QugKJ{w5;@JmS>N)0*iDBgeXJ>JXFJ48+4n&iXc1mh|YbT`HMK*XOWJykD zJ<_3hg)BK5L&e65iG`#q2dr_z7Sb`+fk{Uz6&O#T&>~Qayd>0<_DnP#$GMw%>l5wE zZ5E=Ied<6L@(ywZgMUwoQD0X!Oc?RU^{_c9!GEc)Z$`D~t2q0cH=U^t>FX`?s^cGC zOBc!>x}Fmyp71WkxPz-RyYu3Po%4$ZxmC462J1|@IKJqqEu!oVpXd3A48)Rhe4uFOP1ch@N1TgALtde3FI#LAeu?Z)@TS!; zz=d+L#}SHhsJ0IcE*>W%Y^3OysO%+663K$W3Nir#!l?n+pS**h&~eaSORYINA6@&J zmB^_HR2yxa{UDrDEl&Drstw9KBZ+0-fxeV55`Q|=E1=TxmAp;mVLyDMlZrhqZ0g@d zy~asrWgD)h;~>$Cfo7e z+6zZ?FfENIL}8R0Hb=*$ZRO@6X28}K8HYJFCo$idl_KGjJ zHT<$G`UK6zD^Lb6Xvf9sES%k`#526&VS?^V~IHm(7-52F|dX~DAr z;JwwyOuC^@mzGxsYR$ksNk^%2fPykG0G-zg1$nOe}bfs7FRpjL(BG**;@f| zHtPj8L^Uwckf?14&DJaYRVfHbS0IRkvPn8L4P-*{o*XLNllBnKWJ0p=J?&&V zNyVRj>{Gr6vN{)1%aO|xHf$>HzMZfm@a-qv80nzGVUS_e_m+&r(PE|Ry$R2PE3nQW zQ6kL(fF`9@p@Zf|0f{hkCKoPDTcQsa`sP^Ko<8y$Xva-yVkeMIB`q;tqq|FaWiY_T zJZHR`x9nMB9LTNZoY(AW}oGapAML35;@!)hkKGY^;^lQk0DyVjDfM%FXYVQjLS zNak=Tz-{P}cf&`ItTHIKqzFR#dRjI(25(d~D$RN&l@9Qp-`a@0Ere-m$ zt$}fJ-KamQ8A=iYdSWosRtL+kP+wih*j)z>ZxSfzsM$9OTOnN}9~+EHI8Dw{Ip{;w zEH)>qB2h#^X>_a@`pD_n`>+aq=ZtZYcR1V5&NWXoz=4GK9jz9knJSEUL}p)UZr%W% zgMxBTs6Q3Xa6IUjDzmgkF3Voz0KcRr&9P45L1=yK@r)Y&lTw3*=KUECoQbLn8JgO% za7>5|INmiL8eMjEr%mjELW?db*=^Sgd%EJ^7+*(TB)ht*Eq8;bwPB0j9RCIPd~q84`A1 zzC*yC5qCrG>UXVnhZ~-R8+WB%W6a+4<___UDefQ{)9G>!9mJ_A$#h0PRJt*BDTtd< zzY@a1)-1g7@$g7d1|;b)=n1m5XuM_5fn*~gftZzGv8Fd#?KO7We67mL{?y%v6GmJQ zmfm}AZnRcN^7-1Fs{4tR20OaL=XWV5Wn2u->y8X=Qr5vmye0=5Mlm$51}v@d`51Oa z%G6NwEmmT=NwVZGGUR*GD=EHCI+)?C!{h#VEe$6S?qxjTzGxPuTCMypG$W`2un#dr zDD@P*Qj|#MYc%767?KT^B9XzvFDiGP2x1?qe1BOxB;^O?*~v)@_bWN~#SgZ$RSwLN zv+F8S;|S-t>!}nlmnV)aHN!RDLb?<}i9AyZ%A&ajX^s%mVW!qZAVVH@l&U7Pj(5YA zQVj<^`6>o|Cb4AxLqxv6fcU$pgiX&EDS_c&f$tM1ek9eC zpffBRK!GDgxt04P#o*wepf$TmnQ>5nf{t&F2vR`tn|dMma|BUPCN+ap@Y7Ke zSGp!1oRU|>@PWV}6vtIeRoj+l;7!k65HS+7UGKei$n9q{IPMne%N}Q zCsLqkRiC*=&8uf^yc=_SY=NrT!uimOm9@ZF7iZ^OgVZC0_2HNSXJA)q*E;P;VEx)5 zpBNva?zIj?(o}R59R*BXsSSVq9 z$#&1bo?PRC+Iq+bjykRVM*qj3rcR03^5-Aj`+oT4l8oi)?kkq;? zcL7Ax!azm%8b$$BQIic*N9E~icq}3Iu*Q1{!bW3kJ;`xpmk{e7!te@pC!@xr0Hldyn6KbuY8F~qYcET7J$_OKF2}r2)?fQp!t}1NaBJ6G+cN8k zN;eN4x47XxCLtwjG`HExW&Q2OVt!mtAOCmlA7clapsu-&a^evBRn9Ihl?Yc|FH4fv zVxtE$G8~(XVL{_^L`ER|v;aQ5QQCk>i~ z9@SeqHWhP4KU03__edYJPBTLKsEdh#EA}3mP}p~OszI<@S#e1TTetesAYPDU(sw7) zE}NMNBx#DZWF|>o54JZro*}<2LFA7{Gb7yy*YBO(PZ$h0Yb!U?!31n}eR*%xu{1HUies?u^qDgf7`E7Qe83O#1w9U5NTIp> z-aQozxASiRD5Q|Op*IToZe3MO2uXF3Y%CBG;^gOV!gRfZ2-}qNOPc2!w$`IyI)!%fPc+sH zE@fxX_B7z-)+89+K=kQEuKyH5_fip|O-EB;%Il3Of2%OEcj3A19Zw=_z&9TRveN}w zI^Wy-WcvwvEwAe8@me0caRtN5ewymg%4?60?@I7XHZeNN*B%plB47~m^(uVYO=2W= zGz5+t-$f{}Q~~Vkp?+{h$F&m~9cO*{`dMXHHta;!{udn6F(MR*Y7DL}&LqoGeD&%$ zwO4C8!1a-@MT}bSRES;Nd~Oetl3q zRGRr|Q(9#h^K{j$5Yw*_PJmB+2A-a2vV50GAI7lngxd6N()g=#W^qZgNPg z^2Dgig8B1rArJnffljn~qH#tADutks5QE-YIE#xiF&Y(v_13vRE-h6)U7xWM zGfs&eppUu8w9_ECxmC@oq3$-j#N5un*FZEbB}EH~md>6%du}97&z>uF7H>(I{wuS~qg;q?dKCF}Q|xO?v&>-n82i55kL6)xk$HAUhpR;WywGUe>K za~ysnOs)6){`>DaYcUBKFR=!=HiNljvv)qRZN!r0FyojGD&R-R$@F;qZXif8P!`2S zNB@reGTxx0w#(AmTA{iVPvl0qp!CYAhA-w;-?hhn_*3ogC(a@U>wL-{tz~Uh=j-V6 z+UgTeFETayA{E6AZb@6XbZHVMBB-)KClkf$(67yP?fjKVIb+UkJScWF6x3Y19$$Z_ zTd!ZgUQ)Ae)vCi&WqUem42~SRO$R9OV0ncYjVn^yFI~E%Zk#-3r>(6WVYgJu@-G|( zMa5-h>Tq1CMwQ>SX{S2wBnG%+96lAGL2~->A!nE?nqW+%U*W>%s*^X+cymPk;!VAU zQ4F$}kx)?m9rWo1ed)4kAySz1Vj-lSYZ7;1jnuH#cWTV;il;q}Jc6 zm*(%*)J(3a7ZhpHBJ?A%8g9|27;)Hyewpt8jM-pIKC+a;u<1hm16?M`N+-gDgY`QU zVD6ZV>nvV>-gvqLuL}=1RQeFx+-Ho15JZ#6aRXfBuNfW#)=k)J>Zy{??di%z>sBM) zZS@bAaAp0F;l@ggsoR`;>pzTsaM0VGkRY<7$-(gM&Ss08p5_7*HWt#Zv4B2V7c%D0ZmciV&Zyzhk1x2|h z3R(tJQ;8plD%YYz-gX5B2A^BFma=yld=Bj+RSgaO-+w=4?$NdY5h0dYJuUoigq$eG z*k2sATd}DvNp)dt-sdMCV#&x$`uX$Y#=lQkCx9m0RS|Ozv%~qIE9f8V#VI99t0n3{ zq|%AHWQ)yL%Gwo@Td?Ex!uW#sv{2_Wm37Nwl#o+J;eyYU}C-f`XTX zYQ35hTyhFYh`6{aI~_>IjE534Z&hbCqaG=>PU}QXHuISo9!LRvC*Q{kqnMlyQ?ngCreo)3`08rebA6-RTTZi7 zw3B9>P4pkp3Jr;8KfaN)_CEqR*qSe)cvzyYtli)CF`}tPYSK~1u8nsTes5r4l=yIB-S)8Amc{F@SY=olFX@xTPyps&%#4`B4vrR~Jdt;YE$WaVy4ClE*u7U`_YUhcyZZ#ltn+&#{?+k#&=py# z)D_A1$4kq~g1EMc*1uOCad%($eoq(D-ds#~&o}@_wlAptk==ek+SBzygawQX2-*iV7>B-0Q2{)x{2t$sK8z4DUkM8*cQZy zyBjVjViAG$Lun3ToF0;8OQ|cauO9v6(41d)#Gh-+#le^1GvR%u%o?jlV*Pq8EJ+H( zgHRUnS|-Nb6KjNj+kXl+1uN#vnKLvp64HQNZSo^9%NaRdC3e5T3z;-1jc&nAy+slmH|LC$26CXfEqX-_4ykl%^EbVm3xce$d zr)V8>-J8gLTYvDUlO{T4u>$HVeI}eKP3!mAkEu?zasm2%n_?Yy4wxD3jmZ=#tLcj9 zVBC9kOK$U_7*6R|idli0lt2FX!#N8kZ#ZM_XCx;H3Ox5j@}YhDq1+>9#|xa&TX$pL z#P8eXoAiBhXj1L0u_y8KBokAmCepfo&oN%xG3VCne`}H?InTEL{`*02rKlh=Gy6J_ z)D-0B=R0R9DJiw}_4N%ZjE;@9b#@v#ws1412$)_#gpzdc$U~-M>^r8}+Hd`{*y51F zrAh&uMaoKTFU8j#dr_&Q;3<}6>gSO+QFEkm{dwCR7A63hBtc9p(gt3`QTwXCcphqV z+b}RJ%*4^+@Zl8v>Tvx(LqbA;qLlW~PP)JUh_Rr+iTdStW`sy67pM%4zz^&gcX%OEa%lOb@FxGm2w${#n*(oXHQgOm+W@rSs1}3sS?I+PW&j zC0DK5g~b(AR8)lFZk=7uUv1!QNlPm$y;^#qv9A01@826BtF+adCvb=VeM*$kqq=vw zYdZ0)b_A8=2Ag-?5m%AgEwx*0v9C#;wR2_E6LyAc9?$!^QLd8OIc2rreaEnsj_p!ozbPa7Ks9A3G$-UBC z6-%3%3Z7NFxVwko+EG|YxS9t=r>9F}Id0it<;I$FqUpYqx$e^*r{eX;a&rSEerE3r zuzwe}!)UsGo#h65s|XD%_C5)o+i;889Py%6J1WoUjh?)<+ABrg?4176OZ%ikxHeM7 z))}j8coQ2l{M*}+BF7@l3e3vNii(PQ)zj0{rTx|8I_N4dFOQT%M@vg9XYA_LtNnwn z=8}vJ8+7pZ8YXiDwB%g(Zcp38zLYRi=;{&HV!iCtk@y$ir`9V*l(>4Br1$^j{l1eK ztM@KXQ`7cY$%;1H^|R#K?7f*WMi1Au{K>oZAKM1}+QW(6-QB8+w-wZkjYEM#m}M#p zT(h2P_$*<5j6L^sa;V8)-0Z=k{ug>?U9Ps58%rFdat;jz2Mib6jimP+^bXL==s8&E z-CwV~w#7MhO}gj(;ItvD1(Eg5mUdsX`S?9mjFl^QuGGA$>*$zNS^c=Ij9VPAvNL~% zz}gda+-U*^5}OLQX0DsLV11Xn)Z=nHAqyd2M%XN-SaC}6MW*aM{p!>F3P)xtQ&l#B^sKx+eS`qG956DsKeCSr2JRIEsDMb4 zj{eh(ho~H)ffCa>isMqt+WID?tONv@^g&6wVBx}>=x4nKH*tag^y$;>fU4OxWF}(I zvEIJi9xyI%SwbLU0@c{f7+qPlCB7Gk(46Dq3$G%j^t9HE5B(C{+O7GR}G zfr0ZK>Qc8O7hGVQ^km>rGB&=tQvp91FaT^6*PZtDEdjCzlH?v|=Tva&mNWa`y{pF5 z!Ky;9V;K$<j>3TR7A%1k9+a^S4i(Sz55^n?3?=1`t&oKYsjGTbn4tTTV`nOvxyA znYg5+KEf7~0n6KlORUTVwp6aTbJjX;l@&+IKzY@~3(ZocY{&!m7|qlVvy|XHFwT6) z2rF4~yWaIsmR`uVgdKI(65NiKtJNJ1nzojaZlSeBi91;DIR?{&X1_Yf_1AT1^wO7- zWO>Up3QwtKCoBsbiQF8|7%&VtWw2t!3O?wekAI82zyH#{pOLuf;}pbggYPKb)0CIB zr#ejtX|Q8%rx+q?oxN;ZM~B3kHM>#yr5Y#luev|Kb8-oS_G9a`1bq(hEPC!2Fa8KR zg}S0!_fwGQkTKeZmoB{%6g@h69Q?rI%1RyNefV9~APS3gTm^WE{cBr!(+{tu)XQ`m zD*w|tO^uCJsCqDdQ+4Um5S6C}(@)NuJ6GEEwbo+a>qr6VLI7q$LuLSkln-u7(9H9) zgF~}^_~Dt#9HnT$WlXE0f2!m4Bv81nMwNtXR%J4uQPu)Hh|Qk6V9_Eh4IRAQ&)*Knuz?lsp>(^8m9}XzwGnA zt-d%%RN;zI!U~)IjFB@lhczoa7R(P(^<94NmD~0c842Ioy?F5?Xr#%+N>5gMFW(kK z>k9aCus*!mH-?m{$5Gc=Iwk-L>hodpEv34*4 z;Ffc9Tx{+?d`P$~L@9p*VG(|a7fy!+@P4NFNMbT1cou+*LKRr?Qc_Zb0LW?#`!IWv z)&GhKkiuO7xE1hUT`jHW8=GS_mr;{lRZXoDpcbpQQJ%?0%ms9ijQpKIP~-fgw^v+j z`1y$qNXdhshIE1&2I>L3*isu>0~xn&Lw;xFPH51cVGZ$tu&-LXRvir(bgrt=wpsAg zPuB@H#E6j=U1MY8)&sN?zkEHf-*#d_nR$6;jb32t_QEl5NlMAq-duCf_}%^W%vAkZ zx9dxClj~=x_;SS;`&wqGW~L@S-S2YBNHk1W?~G=v_9BCO7q3hF!SQ8EU9tSxQJlH? zR(`=mU|V;un#y_3&4c;t?a-vaAWoxwKG^pVI$y`}NCg%Z8z8n-J?A$zHOV-?+QqB@ zL7uYQhqr<8dx15FH(P^Tl((r5>?G~Zd_=Tic$n!K8s5STK_m2Z6b?T>fz8GVUneD{ z%?=C<)RoK^4^py5rg}@qD~PG8ItdpFdS=>kRiQ7_1$IsbKS`ywIBRfOap+mZp+pA- zHQ>gB2S=5QKD?ZXs!Gw(BvHSo_BN%uT@6{uc-Npor#c@%%!5_(m>SSDeRM1qELjpy zz#8w!SGg1{|DCUxnh9tL-H&x&HIOz@aXR_xrMAYUi}d%K+NRkCdflGBTQJ~;MEq_? zsom}UVPRe_A&rk0_?KD+OZsuS2h`hBe{<~h_fW08u*#-%S>RaPCZqD+;C(-ckEzILqlFg zE0Sxh(*VZlQ>UupKWj2RE~J`;3MoxR3WiGLCRjgt~g)2k~+U6B(c zMFskB7(LEAcS8sSNIH>1F>Hc+dwXZhnia@E@grR_3jWBY=pB9Khvw|omrK6C{~2g( z3+BzcfzuZg0TW7G<_K@RhOICD%P(8NdAJBrgggzp5O!77)g7wpB@WEF?CIfg2;n>E zDoP|pruLRCTY?6p+Xt?MgkZXgiwoziaN3n3-!B^ne>lPWsd#z%uHdS%)aYIVY#}Sh zd27+rw3_XIDF;un(7~$Te(k;Px>E~Gf7&0UE_*LJb(NjbLDbE&!j^~iXxr$9F;k7! zImqt3oN+$UUi{d_jPzaAQRhp8^4+U9@goyTBQ%&<;WwBLsEBEH?xgk>X>zfnEo;yW9{ix{TV)5c#Zmh+#^}G^1 z^+uAF&2_%dh;LOFF&9Mr2T!P1t*tlcVWK-ifgcB_o~da9Tm<3)QEpO?t@5&=(%IxO2S|c&oXrrOwFYDBt-~+xYodm$UqtMO5>N*HQZU6iCHL!XWGCwYg z{U*u;`-lsS&Q>Yux2yksowwF~ldxq)+8OEO*$L*0n-kVNHa5#nD}1;_2i-TiIOJZ3 z_+8uu{ss%4W*8?TSW8{mjU+=GWqo3`nkKqiaPBY{3t;MVGJJo^I1rgduwc2+!i8c? ztax+?aGZkNd&7J5?M@72-h)vpmEcw(IJ8(!(H|N6`>($)*4gVLawIW4nTvbsHiQt1wj#8nwpyI zlp>ohY#v{A?tavX6DPzw08!^rOZ(EL>vZ0D2# zXfgKG_O-ReVB$_(#chz}b@%U&VjO}@l8{Cei3}z>(G)_-Q$nHT0#+X~$os$b;QMvRB0)H z56*bxPE0m+GvQx*3tE7-^0!#xKQ48AH1Nd~aB|TKQsH%n|FY}pA&1RT1v##FckkY< z3()&jM@K9*n-Q?_5|x#eQ|s&%e8%&ksW9oRg=MV-nmzytav?3Ib&DhbV2P^uOr7th zP1E~1%c^uCGFocU<^s59f$A=SvIL)lHAImdT_MBdk-78dM}zHW2if=%jF8RoICt(G zAK=kzbQNzMNy2~PpdGwK-Z>hmk}EQMl$FE-K)%7oaRtz()Gz1g+bB3z+@Q}vETX-% zTP#2$eB*VHLgUNd+dw;x#gRb?C`3qF5LxS>o}kx_d%Sk-7gQjfa0|K7%Bs28@gLu4 zdOk~FfB5{@GSSP%CWxS($U=x8zZww}kT(#qKM>poQD*K$$2}A@z?cJT7oMZWVH2c= zK;^af?!AT}8^mTu{rm5~;tzuZ17AbZ7{U$+poTmmD7BYXuU=hWclMeEn`V$fMh?T)EQq?8cdGDk{JxpI)o^7kw-Q`)E4VrKNT82618-;7CDBFcwPt zkeTXoul|pn=xfXTA@{+pjGOZ3IfeRi)wlLXM#P1B0IdFh$Eg47XcRD&!0%+IBgtIO zwr4vtjMjNM71*XR#R~?x-lhh^dHu&mdb$erS&x-300!sR#+S$0HkVZO-Y5w3_7}5> zANuSC^!anIy@l_{=l}EZ-zRjwp3XD*cmMmV&yVPTPvU=1;(r_F|KdKzNP z>Q;30zta|c!v||f2qYUL$el>OFdqOZPz~xM;g=cbxg}zNM>5JdgOC{;BgV#jzz`3W zbGphYof2Aw#G3`4jyU=jph~eBq>`YT9`u{ZSO8m?`+AdT`(ZD@&2+&BpHTn`2+-+~ zhcS>w{C5ZIk_xZp7ZfZ2C_!IS{3lx4WP53j6d*QXLTox<`LRWVB3qK<^6!l3S zrlqD*xJULd<3QLjzl1;e7*ALtH=g{Hz`^mt@nJg=<>Q8I$`lqEe5>mKJSP{dem!mN zsL6!lE(bN&PCRK*rUly9r$4p*4l8|Dl-~-%(p6)_Bfs^f>WO&bL9wGz3u!_<<_yB6 zfB_a!0Feo@KN&n~E&jX-?ku3!eBi;X`wt$7i;2-~?a|g|D}y?vn#WJXCPL{9bZig$ zCPb403`FDtv~)GyIWdDgCHIch!=e|4J?5Q6tZx4UrrMj6^_2y zn=_!aX%lsHn(fF~DESaP1Z*TXuQ`z#q;=)=|pOP5NbasfHP z4v6zG<~4(Xb<(r!T>Fij!alh{&(}aHz!s0ACjlxbp$mW{K|vs~IZSRbJ_bmA7c(5)l}tkkUDcrz)vrrq=7ihnxy zQ(k524rjI)2*tFQE?o-fTn|ttUN~_mVXu7%oPT2^n+f`MIY$644A(vJp2YT%>HCj? z1KU=94!|gAe)AVB5T&XxAUQc1J17v;0z6}Y_70v9Zh^@Jc`h{r=nWF2M93m00&jsh zZnaz=>K@D~Usk++7E>GW)2w@1V6mX7LyM*ilvNlVxt~W-NUZ#CzWJsKa3ivNMdk0z z+2Fa>Zk!{YU*%7}oG1Ll zF=!dvqP1|=&o7bdDY&>sw}uOTF_9;kRz90=Mn^wFqZKtQF_Nm2%+yX~oVM%j8{rrD zlf}$y^oQL?&xZsDive~e@D$9gPbS&YHs!+9hCl1?FS%%2dLBxw1$e_a*5;Wzd*bV15&u-0w^^f z$uZC1|92e=jRU$R@c}_~{TA3cb{7vWU>w(iMdnAhQV$+3M{%$zBa8*yVx!Xo*uj%e z7MEmz0*sqsXFzUp01*h_tq6JJ{+SCvyflIfF+oem-X4YIO8~oatAG1#4<76=<}t6E zGv|V{i#LcL!-JKYd`Q92@X(;r85>U8zIHvK&p;tSbk)W2eBeAPLtvl$3bl2ZPO(%e z9{n%HOuT)W2bCx6E@KyB{S89b_{d(?4(nIJYdF0%dxLohRvvf7g-ua}%3x#Y;ksq; z@kHLopx7MrEcsvnlvuu;=*n%z@v>FB&MyA;hoPZPz{>;xaKRsAfyoVV$sVjy&=79W zNRK0qUP)&-)4u!87Q)vq$g%u*GM1(~rUpm>YCxzbWCH8VgqVt;&(S$Rae!t!pfi+d z{Nzk~oM?Vu4d3%;(6BKRUIvX698xY+*%8f#Aa9u3P@3?mO{S>8*9_lyyCMU+IyYwg zV28>^9RDMlCNg}K`qI$@D?p&2BA$yr%ZvkESRg-qULcDnWG3^RgU_%ms%SOK z9oxxpa&lU0n6iaEh^TFgs4Ko|)kOySdL%4{C;vEu=?P&Rh}c^D3IIKH;^>Sc{xH4; z`&y@@xH#@`GdMMgh}sg!71+AikYE|vA<hW8mS)M-XTmLa6PN5rY{BiG+78VxRDsr!XyU*uAVd!ywWiC&4w^hy$I$CXUZwlNyDzu!|%E zK(~1^?rPZ|2YnnY|Ni5g3*&U8qu{Yx*z=`7Q`BfeaSRLaJL& zNB|L$SMHZZ(~L4zP=FYni;6y+#*kwP4%e7Bw4{|KZ~5r|Veh@8qCBIoQ4EPaVxmS= zie(f<#fs9=5XBKGQUs|QMQMssL_msBF-1WK5Jidwq=R(nSP_sSRZu{s3{8+SAZ6h0 zGpOn9DVuP7^-}iaWbIv~d>^+-^LtrUH_TN1T>?ir)VG6fkgk2g^_T zxHEW%=*;XTPW&w4NE}cJ&!iWQ*qi4Z2d*b9+#6eUS6P6miNvQPd2*~UJl0qRkIYwi zN2s0c7>Mn8=MzX(fUu#^!6w(l%_ z$*LcW$`Anw+Cowpnv>LG0>h2EXU)%OP=FNzZG*}P2`MjxRGi^Scs%kL4)d3DOdvHC zMMcFd(64~amEi_-$h)bee_m>{J}Q z9C7QHM?~{?K*CP^%q5pYk?mRO5wREB$Bu`0Jh+!0i&2m;WGQW!M5{#XnK#juq=W$> zgLdy70L2fEJMa~0s<<@7bvoU5c$Re0!153lvHzB1{!m^B0j+G1Rgiw&OK`)l$Zb#B zy;1Jlhk6Km$P61yKk>+AsDFeKZY-T!s~IBop}1gcf8)V3%-V@TPj*U8kZO{&Zh?l6TZYIs>sMIeQvC}fv zrHKXTA&h;>QzRBR^3)3KhPlY(puM_-ND!FouMf9;lop#j$VEEF)YQ|{i^=PR$SMV7 zoX&Kl;Yhc{lq(i^Dbm9C6@$W?4MA!c>kA$?1CZ-^{9dwsjL`(uUFznSB;)Oxf#bV@ zy?WOe4t3it^mzB_Vh7GY*_f2t2RMS}q2R-)U@-Ki)8P{m33R<3lniv?q8uC)Zpnb= zFu~eI(H8}wEd$;i@b>lw5I_0H$Ufz;#^FQB`WzH|zb{zuRmMB&EbAcT9wVqo3Uo9~_5zoe|(}3!JgOfmdkNgom%hqc#M3ZEtg- z5~0nTAq*g)tg-TfMCbTQ(b=<0KV5j|p9*ZBc&e=a*9~JSZ{qK{8e!k1f{_TCl^?kq zhNYi$p(?=F$A`hxM}-VAJFVt*Yd5EO7zz|u2v+MDiI!t6?h+rlZoh6_oKwtSE${T5 z8yd2lQ?0h#gl*JhWx?bv*xO4`RzMYMB_LRcFHl(nT)OOh<(*ixLM-LP5UP0-WG=|G zJh{n^S;m&1GlAlr6E5Z_>UOEBR-&XlI>EyRS5a#0;VZB)P%FmWEpNgTGmY0X+-GS@ zXEBrTgG#jO^Tq(P(^f}@6=M_46|G#hbm?XcrQcgSw|ZiOg<$DgqK)XuRpq8<0$GRd z;>w6<+eU1X)gW5iu+N`AFZGAmHpD3^NKmj8SZ(Qm%0W36;T@2M@*5f&P8tJnpZw#( z5TX|$p|tc#USuOLrKJ=b1wtoN6ItnnL)3+W(^~YP#12tZP~*lq#Xcy!^%Pa zSl)tw-wlciKStJQZ=pZ@hSExJ$HiHPKCF82Vh`kf-U*CuvpMvt&(WeWgwsMi@5Nb{;<_WNmtA zitLeUPl5H*1jT-zHYs@9_dh>OkY0Y!KuBiWOc~`ep}LVNFMhl09I|)tMQdNg!t@cx zdiDns0dDqM-)ye4N+_!<>Rc)Kc?~UCKc^IW{!(wc^N&Qq{-c4uFouQuX28j33x+C9 zxRs=oZEj`t0^$R~q)DG;>BZ*Cyz!)P6`s)+ia?N2-_PmKb!XnqNP|{Ld2OvfX?J4Yd6i!wnF$v(+XO)qGqdNi zwOnT{Xba8Qn=H;9~Nf5xd}FtY9|RT5~{3Le(>HJPUL@|=Leb<})|ftsA;T?-B^ zb%=ZG)cZAzwrnNA;4@9jMDwRWS9}y&;x;@f&X}0BF)=Z`@q8#V97gEIC#W3uUH@km zR3_6%cE-+-m%S-?XpaIXLfsV65f;q_ zxc!)Uw!X(RvoEk4v(?U|79MQ3c4h#yJ(7}=$Vy>|R7OW3 zW^{@bq8SllC;=C2&hZgcPl_ejb)h#nB> zoZNsG7MX%04Kc-iB@Hth$bE!rMg$c2mCP>3a5s&7zd)d|1z2PX4Jz_xMb(suN(qsA zIVk|)ErLcza>hs8<=FWm0+pwh=2eoP0Lj|se4LSUgChfxC}{A23m?3^>>AdAjK6+bJlPRP+rD5+Usa$ z!2GV|j~NoAJW zhO%JCUbzBS{3`oq%Ts=l!8hwf)|<#2=*kTaioeIWfYqkx!@yWl*+JulyfmfM1d-bs zN%>8P6u9h%idjq{4mbBD*1b*nOqL{OXVo>C39FeyoRQ{puHwvelbjDXN+#J(sqc0? zlk|F75vNn^;sV9fAFifIm$?cYU7Q^%#mH{clNprMzrgxqx z{RMmE_KywbC^8MRh4I&KzyG3^-~Sk3HyHx1V3K%r)dTv#?zfo}ClTK*(O76NZr-w` z1$(3b<)l#uj|%O<_-wS~?)m`WpErYyMJ}(V16we?-NFdJ;wx9f1}y!GbYdL1FHxVe zkN3B{|3&@}Z>GrqVd(^m*ol*$zBBxPSUUaxadWU6OrZ58r#N|&yLL=ZeOFH6yA`xEWm;*KkK&t@JQOmD{M!> zU1Xk$0s$h^gNK3LCQDGDRGUy-ovDIAnKx6Zvn~UQ>(IcFM!IYYOOhJdRD4pb!F%!X z8^BF2L7{1jvGr!4gRONf@M6d(f$5{5oI}99Y$COOp|OJVLd6 zCqd6)XQ5w{Ic(dfjzJHjLqnHi&{LJ{5lncyCUOt`;(o9VngNPkYJWG|NP`pai1~>` zAV_#Egvg_zkwtL*gcTK-} zDTUt~bCr-T*>oL>pv?f{RN>f7D&P8kgmZ=k{vJahmb?B)kC$5jiIfgK6mY!)mgj(n zn2f9}Ep!-Wn=oN8h|uqiz%1q%^ST`!n43J^JaA9_NK<%Zuv^{1!2yR1%fLE|=aa!| z!f;x2jpd=%j23^(vRALJ1Md6i6O)6ppwBXAz>+R80rfr4Gp4pW`_v1U)RYu*cBFGB z&uui11Z*O-#hJ7RS^z~m4RkjIU%Pe<3*IWX`tb>yJ9$gA4crv`0@w?t^E9pFU|Q1$ zAhen%DI@iPS81Q9UF}z>90;*=w;-qX2nI>iIp>l7J5Ajw8>U)RM)DMO)WdC8U=OUM zoe262*~Rqx#6T;NO|B0-Ni4uLPopvMz4d_IX0oDz3Ll`8ULeUL8v(^!Bazdr`ch=l+v7HtSOu zGBt5+evL(9y=gY$C4FS*vpZDtIC%TKga_WC8y$O_E(vZ}3aq{W18bOc_h;neFzdUP znz@`DS+K9^=HSJp8(>)Flw)NlMY?V9;q(Do5t^1J4H{cbma{_;9t_=XWDbQJIu4sX zfckeCGHonC&V7@mBruf#*;(4CMMXvCmX?K3tMDd!7yjN+5;v_!+8magEQvl@5uld@ z)JYI{;%{qh6}-ZxZSip8xbr*!D1am}Nvqnlzx5@FBn{8ocO4Sjtm;1&l!{^!!V$>} zQqVK(^WSY0%NRSodFxhemDMM8b*uNL)`2exu+eOW>?hg#K1J&LC)&4Rp*(apdShwUepHJ*w%L(-M-iAX@DPA~FVN}Xp0gveUE_gocj)A|ZtTC#pkR-3AI z0T!oMdJ*a5+MPNzuz(Ef$U@_iko3kMfBcbYJVWOVig@ny)u@-K;K+Zu?xyn{Pd3M; zaZy95u+>x<9G3}5R!NuK5zvlPo>%I*_WW2yWBDZnuZY^d4mvh#=8C}1;l`74c}!OQ ztg{#ULf5&p-EX9m))ijy8*nI*blZr|d}K3sf>&2cm2BO-xyhhmcpueWoeepPPk-M) zUJCWlF*u4WZ2yB32kD>AbUQb|*CHnXTLlZE*{It|7vt$y$u(r?4O_tvjl6o7Ak6ra zjco1f*L~_xwxXEcZHVKj81b7N&A5@?x6Lttmj<_k@|Q2Kx{ai|6{2Bu)zj0H5;I7g z6~c4MQFFuuZ!CeQkcnEF#L=9_-zeY^F$6G4f@k%dSO=cuoVahnwoC@@x1b#_(-ORf zwL@dp-Sz;hIzI?j-NoLZl}M!{1{g%ET}e+7;lUKS1gWME8|B3dm2|B3-OWFi8K6&s zmFOw^;UkgX2Y1%$fX?ADL5O0r4x_!3_a-GPD=RhotiGF^TEE%Nh7Lzfe(w1~(G??d=707P(eFFV#j4MK%G<-Xd$)O^AgZfv?fY zCzBUik%(G~x4HCa$@Tyz5NY$qtNT@AfWHL_S_PE1pk8Q+PAryb%A%C*G4zq>m$E}% z^4EM<>kc^A@e9aZq0$;lf?@&MDkLh66h)d>y}x-AKu1^jh!nZ^!0G_Ig)BGtZ5&^o z3vBH;bb?N}jaVh4sFrL~!29KJxbaAT7;zV*y+Xro_MA2Pq;`tiBURr>23f_>arJc0 zp`w>gRbVt5(N)pQvG`7K_vf3r><0_CfyCfu)I3t}ZM$m{#pp;VmTJ62o>c1Y$zpp* z*Pql_5!pI)Rc8v2)iE^waR!%(WjftLHz@Gq7__fD$!v^@rQnYiURb?2z7%kD(PjQX zDZ5|_Z#}(T4^RT1JqS+N=^Hk)K{S- z?(}>M!jdEC;=#Ztnn)#;cKSl?0u54tF@%C{)*xX3+$+bN(#xUgm0dClb&Mbn4-aqs zh6YcEd^e9v3l}aV8&1#yg+OmOA|!LFWVN z1kdzi%F21GBBi?R=lI@ITdYPN+`2mguo*u9Jl*-*_@lm!vk@%VT(u4&N=sgFOWiDhKh?z|*; zmE?r+Er3NF`jF;TME~Nhb!@SMu1Bro*fzAR3P2>{qN-PXju!4FJa3Y{qYqB9!8iq5 zkgU4K6gJImpJpi9Rl?;z2!Nl-B3K8_W%=bLbX7`cc{^1o3_q}fi4(f&XeKfhz((q1 z$i@?<1@|ckRaEtz-#o%$cQXDQX``Ev{Y}z-&FNRk@u8%Jcs^6?xPP@Gu+ZW70@|GD z;Vb^Wz726$1vwlVgJtYj(lwmQQ|JeUp*o;r7Lc1>q6}Z;!OvHALfm&ZMShZb7{c)y zNEU2#ilS4sG*{*YCv$!n#6W+KziyLuX7_+13a|6ZW|=XUuj1?uf*IIBe`XZ zi0w_lx3WhAPVQv&w`JqHwjf^u!T8UuyzbS^m-rO@qVJ#ApZ9q3RsZrghGiz zdaRh#gmy2^@jY;qBQcMHthjQb)I$J}z20EC%FP9Um{Mzk)-y zD}2Pv+FG3jk2da=G;j;Zs8p4;23|M1M)o?`&%;)Tr`Ji~QEY?;qYr3AMe#bE8Y=Qj z{)P$&PYidtpCOBZdMM8j-fQyS0A!LXE=h#trI)zz{f?M?4fg< z(V9*=F@YbS>UwjdxVZSzqOB5$gl(OjFEBKSpreCSSRe#D0cB?g*ZC1B4phY9`Qo#W z-G5ghg2TQ9E9NHoL*ZsUr>u!Ie7geOpq;r1F^DYD_Ji_5$$Lsl3Z%cNe&T2w(~S<7zhn|K8TI&`sij4K9ypNsft&B!1^mPGBUlO;_z~kU)Jbd z0o*|9*r+9WCk-Z%kxzH{#3)vhuy#}Op)Ru}zCp28eEpKIO8TZ`01V`Ly--{P$rFLz zhf#yXp7I-Dy{2HKNyf4)D9DiBEvKWJ4OhNHq|OS2he}wKYb79I^`XZ8c%?W(9-yT+ zOsm%D-Cv9fr3RSd3Vt#Ykhrtt*-@m@3^nTIRr-!V+(XinEAFl8Jhe3q@C&QorUEBXZVe9`d zpIhX_kvI`ZPRJm9D+jKdJ6$L8`^ay@KxDLLME_)6udTWIE9aiyzhKKZt%6(AXU&Y> zC+=In&BE5!_V1^^Lk%eqq{NA%4fy5?9IGHt?EylXX4p07_jyN5SI+r&O2b_%T+AC-%YO5T1Q$=asH->-?_~-Mgj##7Nz?oW zIuC(wNT%$hZC`SxWfM}IEF--OdJ8(gd2|Q(goKQ_<%-;L0!=XsEM;0!0|1Wdb)09^ zI<#G~&*Rbr$UJcq+;4ZCcvp#x;iHd-t}|sSV96dFgEshPrly3SbH~}wpxeZ^tNp63 zmn61+INr-;4Y*H{PQv(qL7u`u{Nt+c&t2x#2NT~J5E6916%BNP{37j)cw@)dB4+{y!M;hC^cz{gNaL?Z2g9n-`(}yy}bK$o~+$LQ;lyIs%!hS^H}Iq zjpM1PLF5Ui{pHmv_&*h4sOIrc>FP1-^*-~%=(FZdYi+ZtMc$Q~_2C#O3eon=tXa{_ zDf=ehP1m2#Hw9P@<@I<0Ef{|Me$uQZy0F;>pSlbgBJ$c$kPEB+Re9!*)>ug`adh{S zC7NerF{3T}0;QFO(R88T%~tR)xCX%1|K`n2D1L!c9YL>1X-lR*1LZy*@Gh*Z6??8< zLFKW1Xvx>n!hUu2t>w5`Si#iefC#2!Y`X@wNj?S>fFBN5%sh8?R`ks2K%901qKGM! z3Pp-tR$6)mS-mMp0m%~V>pRtD6;=NkQz=WAV&0x;gwh?@c1%Z{DIWL3w$;tr1x9Ta z)+$;?%Efw{WuCr&Yk6FE%`b#$;sb$ZlvUNdP4v6y3PXHM!~#pBos~epLiN_rKF9U` z$$N|LQLFEDslKGIw;#oQZ9odRzWd(hd0K+!_uj-sU=Q9!-&1gnM;E7N!7or|wb#F( z>rD3pNN}=5bjC4WmZGr<5O zz0~Lk`>zjb{b?bIuwke9RmU>Y6XR?@PTr4Cc#}ju(q~GY=UXkg0l`w=Z@t;fXAMtd zm977>zWC)mayzD9T(p{T;n#(WrmqrsAFi5asK$Ggybm=8ov~zzgQbF(a{d{ZUwx#y zKw!DSKIJQDsZD&%Vkc``F3+zDtc#O8EPNQ@iCW$^X@(t|Z)c;W=w7a66qsu4^>8@D z%zglwd8mA7<$BeHpaGRaGt@Sf*v~Zv8X~IMBM<>x4@f)x2D*k%^bEmDGI~^^j zn)?Tp(latFjf$7x7ixoPi_gQJha2IS*W{C$hAo><9WVe_73n_4=i*mLUHK+}2!)-K zy#Xg}lsyEfp|rvw7O~fKJOWpOZX(c3RNEs5Ej{$VjT3V;R?c;Ld<))+MX1E4?2t;r zo&^hsSV7&54>jfs?fN#D{Ti>g2f!y8;2eP>L9&Dx6ybTNhMj{$nBLquhfnkte^n1~ zca?f@(_H;xIe@w&U^UicI@(?qS0NPEAn%<_T>F!P1D}WEco!-bE;hS%&M(|&TeGj? zN5H$d+n#J^XLlGsJA}V{DV8aoRB+(igHx<6H@6i;mo{wvd+n0={|eGU6Ns2HdD*0W zQkPI@9mNMFJ_YJR?FniEy_x&=mfRC&C0rbwzxO2T)dzEHf=xj)(TO^W{|_Z9jwC9z zOBn{P7o2+k(O#_dQK}%Z{WUwjN|)g^^p;d94tXm^?Ecf9e#{$xPzo|R?fY<#yYIm` zjg?I>T0ITgxy!E|2KxHF%5MG2{DzgKz0`3WYE&F+)c2e8q-W~6zZ!pZG zbiJ|<9S4QIJ=!=+MwHvC?9FiF=(_oWh1GS%Mf&Q*hzed%x!ijLte3&m30w2T>BMPH zE}Lch`^wn|OkWLSdMv{QT!HOW*zA z+qb!`5wqe4@I+q}99W)PaK9gZPg3aA=A8P~QnCNGKr?miseq*l{Km)ylTQ~Wg@2Vu z6+9j}@ArAerVr@-he|Ih*gXQ64-#34_2@He1~VIjlmj;mfJ#93*JWe#mv`oST!FWp z9=9=I>ivx&&}kpO5^Mq@uVR-yAZL446Nqlzo7@0MkrEpD91{9l-va~|d575nldp?= zy;VTu?5L08kC7OJC4*+B_#A3fy}G!2XzH~Juk+o#Ki$rp)dXGsuEZ8(Z*dlvzdV@S z(v77{_Px{bz#>(%B<@58dN0(K8A?U>M!^=0M|Bnf?k>-uHDHuH{N*RzZ=2uxHTqH1 zOx^FI0|x4Qucb1WWQ?QGNR3NY6EPk(DF9@RtoRyZz-eHdGi@M!kEc~awSF+cm?WxKJ22zjo zyxt#tCXgxr=GD8DRU#iBuw8rHhswZX8tcC#xqQ_cTsS`e%VoW- zK&(|hgN70M{7!kugsgLu^G*oF4Kx)197&X8F3*o;G*@@~2@GT2#g&_KRAI^s;nO+n zo|nhHHdiMG3mqAKo2*>hvTH;>;82mM*V$KjtHStkPXIf@kK0SM;piw5ex{9CUgf~R zz_+(_wepNx19to6KeFwn$Jq==pq9}fw+Iy$;MKU2(`d3JCv)yMe)+I`Tpgq`cE%s3 z-9Z|Mrm2Fk9&XxcQEGtN)H;LD>&=*NWVbiC2hV*AliC~#jnsJg_F06UQ;L>9G^JkT z*xH#>uwJT+(dZ-ZY=SafLGy?$F;u_LS!?a665JEyNeJx3msoplaTK>k#N!|2)9(7i zqT`KjJU%5w9VF6s95R8C;XOeld5$j2aI_<)0;7yRQ_X;~?U^_I!d(w7FG&Ftiy#gsx0N3AxzC-sX3<~riW`1Ibe_fAKK3BxU776Pu zI7Q8UVx366}8`$t?#sdKxebT8E&Q|h%Z2m3OhqAT2amjAt1-Vu0=^UJ zFVFfO>?SW|g}xgl{gy>&Ta>eVh?&}yhq>r&*S>CKzA)4QYBR`|U7#(&DHA7Y0QDI7 z4S)K20Rh?2a9v6G<6r7$mO^|n)_&F3e_U@>QJKyscu6hEfclaXUni_&CdQF?f7H3YWseZWAN!L|E6Z$rt^g%NZ}h0)iS zJ@GRrVmC14b`*@{h^P*eHP)Eba76F@=Cfzd82Qkv*#rtaRr1sjAu6;&Y4(O+F)E!LodyH3y(_l>M}G9t~d~_)K}KZE?K$M8&3y zBk!e)9s|303tC2UT`t7lS|IOaM^kh}bs&hC*H2G_)^P%l?-J@~T>JW<{bJlDI6KWD zJ`1=>F@@o2Xk~>_#b)~DqWHKZ2tyepCjW*o^>Y*bCo$k5a$Oue0%8cTnlNrE+vyw7 zjSf698&Ie{2i0b>oqUBqZdM}prM{nrtt-*?cwg)7Xkd;zD|UeFb%D813?kOT#X4#X z!Dm35br`O#{OKYVs_wr2ZCzc(G~tNCrL#6!Wl-nK3kf~~D`8q3cf7OC(yEG6m)D~% z5YRd4e&~b!KmB%Iuq0uXjP{AvEq~fNzg@E7W%xhErbl`rBn<4FADE_}KUTA=;`MK; zEgOZc&Tcq0bwhDPYrx++bHiSo47c&ntgRQwY`gqN>8~Rh(=&~yy=x!;*!bGm&uC}E zXe=;uMm`3@9CJI6`m-3gL&Bvax68hd)~-PBECFoi-Cld&5T^(KwA<@z_|bk2s*!io zt($x}Lsv01Q8J?-o0K6cuA001DSqt3_1eGe0lViNPMY!MB1dy*NlKfkBq8l!Fk!%l z+I4cLYxw3#tCb$%{mSa=gTSHK?X}SidmMi{&i;CbZf#v5ueT`~m3Vy~s^5k8@i8q{ z%ky=<1VRMfKL$TnPzwXXR+hVxFHYzHrY}waKP(^2;aBy=sL`2?in4#f3X54lktAyH_{a!QJTr zen9w!fx*`enfnucE0cvwEIfwuqvvn2Y22Zv3<7SD1!-QMCn_+&-(RxZr#Tor9_u$Lm3`w z-4R17ajDqG<|6~|$^E>0{q-Yg=K|^?d;?TKLx(#11!O-R0#Jtfyo94L@-e0a*3E{u zgG$SFbe!B>1^?VHkg~H<%vG^8ODEXI%B!6#)G#v06@J|yS?TPO$v(+3W?K%(qz=Z( z=PhJuV?vzU#@L^Fyv|kO>+R$lwghx?1EY$0o|gek(sKj!NBph&Mgso8l1M9A7#4U+ zpV+i;=aFM3;K|c(kV>?*wdF(Ks(Ot{_NdlTsW&4RS-1d3KA0p9ds#sY1D4%*Lt~fv zXgjlv;H{9~&=Kl2U8RhfMqj$gaee~DI#W#2P zzi=(zt(BAhJ?8j!O#6m3zH;|BZ@X>pcmI~!e1HG^-&;jngjjvy0(`!?|J}@gSK0s0 zB@!9a&*yUzv!`Oj-d!#CuWn#x6dK&jUa*UFPXE07KL59Cz2+=Oum??l1`|<3_Z{== zXFp&b+Vbk`ysz)_e`>i!KnZ;b6%ywhEZOA*1_HtnFuzQEN>sEe#N-6{GAU@bhbO!$ zc=IJ7ym&L9ct(@(KvDL;%coayADhT>xBWoq7qMssEH8uf-ygfdZEWE$ne1QnJ)kLWv=$I&xI3N{Sl#q`ru4bbLG!r#{N1+#bv z!20j)Po1KfPND&$=^Dr&`3oXbL96=+6mfioXHR~JD|YAFghST=e5Q-{r$Qd!p zP`24~x;-LnvS}SqUkiknwN#__WJI`ZH7Lp&cz_?oM=j?Ss#ehnnM1CMxF&u z9|IYWCQ>jeV+zoSxXB8mA0I~>rfr0Byah-R0*;{H}Zw-!@Y&rcSzCod>v z-E0slwXcpd3BE96ehVh`YusZA3s$PcLnbYNQ^AeI#Kzcf0w%*p(HVPAlS&k!4?Mbk z7kt5-;mWv;==aj372e&sJ7f7Ie)ZgfCA9X7Ax@}ZBnybs5FLVu$jIF^IE}e0G)vKq zpb2=IHSNU&-=OR-(Xp|`JarCCu`+26lSmza7!X0Ex&7sRPv)pML9eHCke&CII*8dH zFRY`{I;MhC{j9_HgO0`p7qoWwwRP8?s9-%C$VnWQODq~rGP~9-(<$P&m4%gM)9rm0r z1AR0bTn!Bo6L*OQ@kTM8rO@hfjw9#H^|22x86WFskCbRQgq!%`LYgoRvj+>Agec^O zn!FuBQYA2*!BkdOCdIVFh-i+`^O-VIE;tu+LB-Tjral#uh0vpYdMO{@$_~uSb-Rp` zR1!_YV|s~Za6XOJqv)A$%nD`^IExtNsq6k-bB>Y@9nCfD-> zbH|(L26~@Kdi?(3%&NXlj#kxe3Zf0&ib{3wMjiGd$YLQiLHuq(=Z4jhkcOh3E;V97 zr9s3Dr8d*HpD;XCgt@RpoLQaqS+YbeMmKRF?KrOE2Kt3RtTAnSfNDG5=WU1Z2O+j=p>xO*5)e*SC>H3Zo2yS zBMJPgT~1+Qh)v5D4-i93^)MYpfwq@h~AI6zS zA|jLw;iU2kRD@8$MjW5muN-N$NO%zNk65bJ!)g)Q5_wC6m0-3y*Z-nm}3z&va^ftC(7e9ECqr%Dei;8d+S9UA2b z=#(mBMANz+A(97j;)dUSr<{QfqJl8dora+$b};Ma+2#4Y&4mJ%Svb_1NE!yB5;n-*NHxkjd+3NU z#?nSfeP;Wj+umw2t01CfL=8;@m5`K_Ei_|HQfw7k>YSAMQ*7YR!zKl}?mWfemtHh& zDb$}$G9<>C4+a~pT{;ZtE-9W;MS@9M2WPk)CMBfg0}fY3RaFbdNS|Yu`+>hF;U(9* zi->S7*d*LnStN{uw_=@1THOwLo)e`vhC94_+UxVYn}|u{K7QjwIL^cT`Pm8hqcDeP7zL>HcesGwiXUgUl+v= z4p_t_hsC^3JO1j<(p$Hd{#5h*ULThkvmg0ixMJEesC@loZ_%J^U*OtAc~N%L3kQYQ zgU~rxVRpJFC<@Mgkr-Ug6TOnCHK_+-ZLg_mD0vMbOj>}DTASezCp7CK347xlZpTQd zewI`6hb$;$C}}F2W@~Iu86I|mpzn_Ulg(#QHElEkH^Rcossb&~`KccxN%iqbZ}Nxo zFfWM9!cZ*!L7?LPCmk-HgWPhAWz=D?QGC^^s|<|G7JN7rm5`w6>+1`h^-4JO*kMqY z%+4_tXmRWqXNoE0_#??u0JD?b2?Jp4+y!k#n}yls5Zq>RSb_s7UhXCMOvk!6`TjQC zCnh`;ISJ|k&pSAv5t}1hSqKqn#I4&N9+NApsw_YU8*2~k*?jW-Z+N)*?@r)5+o4ZJ zTJMlxmJ?CewuBEHaow-xHNJ$*f$&}4O3XJ0_Y}IzYJR8u3PUmOXbH=Rlxioer9)|w zw_Xd&J8f4{FLj)KKvgI%#Anw5 z9c^thq?C~n5igO9z%w4{QY$9qE0O7hld}|*yK$Q67#j!Sy*bFi%)sx(b56>-x6b`l zMa5j3XltW}fL)m8*@-)~*VZef5lp3JeZwjPXw(MJR=3ieaV7jzz`OBcJ}o>v zr>G>@4lbIDBO2>FE2I2SsD2Po89@i%5UF7~Xmv^8em?j>Dlq<1C+{GqBrDfrkT`{K z3K>gc7FE);V6H*O%tc$G3r+UO2+blZ%~=$f5+t zd_S`M<<|`O)9Vl}!n@tZM>foe7m>F4O+ew(fjw0`qQ+ujWGWf}Ha36gJ1yq~6`5tm zBcy9hk_BqV;7+Lld%DpJkx+)^kaRzx7=AO0aeVhfaW7TN;LxGF814XBZXNC)B*M3} zijYQnF!Y4S)D`O!O#k_1ov~1l2E_81Q!_btfoZa(pL8>hR$1Xn>T9mB^E zLbGnO4IT-=3R=u0p?FfjXZ}4TR_ZZ5ZnCHM)cA#`=VYDTv%`Jf_U4wBc0^)bJXMg5 zbR4tZxy1!R^cZPbC6-0gsSF)`eR1ZP*B(WOEBP7#W-eP`Tc&b*?KUVN}>E$ zQCrK~;TYuJo`))BwXCe{9orvZMHz+)!Wj1$r_J=?pZeOCPAnNHmz9D^!!3~)@giG5 zxF(z7U?F=?u)WI6iy^p>Y}ckq+A|uM5g|QR?97S=6JuiuCMoL6UeFEo9KW?8CG?!$ z=qPh*w%hG0dEGvm-Wm2bc2IV_Apgs-@7XV0fRe$835v>M8?`VkFNNW7=-4dazMr2nwWGVOu&_{8 zN8SiR%&sU^qhe##pv6lDC>&%bJ6JHTjo$IkFKrhUM{m20Lgiexr~#tMSOuNqBW9_u zV*mh{gAjGi`9ww?xyd6KFd`a7QzZ10b^%vNiCgA_BKwWoD3Z4}NI@~f#-gLwj5mBh z#;S(!Sq^GR7~mTf76>OVmxnBxaq4l@*~aC+M(>jQE_!M^()>&)rjtKMpn{7`=Mc2o z;TD%dVF?5qGiX8~l`2CbC<$+3)j$~?RL&&iUbZTF{vJdUw+|X;+!p`#^V@|R5C0j9 z($G;(#BJLeA567aKp|jB9`Z(2(7=+j{D7~})zfn&zwOt3n)@^B*pAb<@p5dGsfuXavqa>=0Z8fKN2`zqSaJ7EuSOKohAuW~(Y>qOhC%z3s*NLQH++3V zVR&;{Sau&>6-Z#4VStf^f^2U$DL#Jw+E{}qn+!jK@xIPZE1iA&+93<`F%^5%WXdd| zQZ03PQ|CHV6GQ*Zho1ayQb1L-e);NEII&XG-~KUU^eO97aJw`FE8VU&A~jEk0<^5@ z52)?5jf{lt1jwKTWPQon(+G*fLRbwU!x)3+zB!)H!6L6vC@)yT z&Orvc#D;&E<%>^j^nGW>&$4`dO{Jgdaw?nKM;nL0#d?X$sD#h}r4e*^1<5-jdW(P= zzGlV94CP=fH{T~)Yag7vi>3Kf&oDhvpVK)K+0OAXF{(fr(#?024Gf$jD+O}YK%^Ay zN&5rp=vNu9$3HGMgzO)z8m|NNxD7}E34%Gs!y=(P(EHQRU!EO)9YH~Je3-cndOtC) zsA~(`>~^zAuI}Qz1Hy3s9zTsl``*(>2ube+?*B4xUIe6r#$G&zh?eyD0~Ev;j9S}O zOomy<0j`brQHBrWCTBg%SMk_2ZW6Z;bSN`r*lRn-#Ku;E{FV&e{_DZjyF=dTh+?O0 z{w{hw1$}IvO1DgiZb%%mv9V#;`*3D;QesevwSqVn6&<|?wed?}jy0j;rpJ!O09%!I z>G{V*JI9r~85T@XM^#xe*b>#wK9vFAtU3L6-@1s-7d_4w4=>d*zJqXv(X%}if!BeI zhOeB6m$75>JOfeZV2Sq}1&2KDq2&Q(!#lD3QAvf_;Q;F(^%#U5NgOXm5ZfU$D6nI~ z;7-4O#YocQ52q~Q@NE=Ti44mg?|Vj(RNS=4f-z5T<~5o z#orcdSgmBFzpYW=K8%7Y8bp{&;xMmzzq}8Sg&7cugK={TP+o9AJpZj>xGJ>*nW~#J z-5?lx6-GR9u{2UgOpBwu;i*O60(P!xP@{{o~tz>dK3;ex0H! zrXEy*HpFclJRQis_v)x#`VH4i21tm(X98a|!&<`GsonYoy^aC*Pk(GH0cu_H|BxkMFk@z?1z`^p-~;aZ2HjrX*#@ zjth+aN8G>L#3$mVjQGk?6j&p1WUJELR^6OoU)(v-aFZNYRtQ;)gI8INUdEyU{o9#X zd`?)cl1E+$LWs%O&(P*C)Zbxnh+~qS0~WoL!G+PK^P)aRmY|EUB(6G&ipLEGbMBwx zTfGMsvOA#mF-_*)ojbqcPHPz%1p-jYv2PpnohvX;3Nhu9TV~+yv$z&mTL(`T5Q#=r zynpg+I9;u}`1m$-@AW(~|3IX@4FA&2@Io_k<8my_%u2C&9vh2k;&{+Hc`|+$oT0I8 z?O!{3@1O%F-R(URQl6Rd>5sSST}O_o21xD2t5pya{Me+b(|W`r(T${eK9fcLtoxBUyM-scLVj;T1}}=| z`e7wRK}XYYtm{o;rn9ET-!YJ$ zlQk)1oypTuq>O6we!hHWd9Ig`blLJue{b)*fB!w*?R0+L;Nu)T0OWM72}j_jyZQJV zDP|ca&6j3-U=E}Wiyd>Jlmj>obS~)8ee6*I^EkueeoI}3>br3|L_K)$%I?MaX>%A6#2ym z)2H!y#(2tms(6jBiCAs7#iC-R3)D_~6iwhX2wa?7f*>P%c~HlIvmcf1_=8)ww&g%? zc{4ULQ#knEFh)|CfXg^uj?f5|Eph`qE>koPk(oAubHgwxnDV1LNPeH+M)f*dkq@|?=)*|(Mz3R#$y}esLYWZCR?z(EF&|l-+hVe=)kcEEh z9!0etkI+6_xjO%9t7>jGnjLLe5LC;mZmkQ!>1`tF(tmYaAobCsU)`o1!@5W6;@}?) zOD+<{(wMNYt!@*D#ceP{QqRkkGP-0;O-#;RGx{(Qad8Z*n4X-pTmgzEjNHT zaQw+4>&CSv*>A=jo>Gd2TsIm=OB6O4it({zvOY)ll2ATOhRUFa-^F(rvh4Dg`9n;J;Wv?Z1nY`{IjbJ!OYUph0^rc2k)nkOB$c5F(sEcNFMJssQ!u6&+Va;91$A2 z1EH}Jp69@j?)@W?z6&-VV<%DEjvX?&Eg7*aAOn>PnX*&aiJ`5!Rh`qH>?+V!*%QiV z8Tpsa+byQ&GN^_?wHpHUYG#%brwnpJl1N~aQ&I{#IK$%y0G(7~x+X(=`kGa%_F|nd zC@Hg%5(*T*nvI%-e3vK{r_`D97Zkj>5V45HyNM={o(fm2O-CIBhn72N#J?5TnhkXR zS znX}XDArk|5z8h%@ zuOpLud>ixOoAbw*Q5Wh*4tjjA`sZv6c4}WmFbpdMj^1S1!5V#7f({evPy-6CZfe*> zvN1jA0(6|6BC@{d5D9mb0Ziux`*+yM5G;djKYks#?+-uTPf1Pfz(`V1kjub+c>L{R zk(Rp!a0Vxsj2tskUQehJBdzW@*^t5xrh8)xM%=ozub#rSQVugZ&#dlvD&(8iFae7% z?f%Ime!9)QJ&QM2&OUJ2uwb%EMmd1F{_31D9n7AT0an)5)($}$OtmW}5-2Ig0g7{{ z!nBJjdgK@p2+i1R-E$RuLIAUnFCCRd6n{~vU~5IBr0m1?sm2olLiS5yhhD>P$hIsk!W(CJQjDZY*Ji!-0@LjgJt)Q@M9nc__R75P#@Fec`6@{0PG z3L+RQkd;^+u&d-heTwJoKa)U>yIdVk( z>@#Vm@o~^y--Ad)4r)kklB^pPpxRs3;5OWEUWdxoA3jJ3Kd~h)UA7CQPTZpFLVaNd z@NfHLf20jBw`TYJScK3+Kounvy}dT5bM@(;P$PzttYrYq^Gw+{WepI|)51ybgUXT0V|cPULEjYSQyvn1@EzHHtUhx;gyRws zegR96Q7E2Sjm$ch$fWA2q56EAYPlZ%-S?$Z{5xiDXgFxL)p=&+{7=oY!JBTaU43ia z$HM9=CDtKi#ofDwMK??gch8>HpqTP~>AW24&l}|Tyup!H>`--0<@HI%EcR%8-p6L& z3fHlh)p70$jecuH&T$sx?K0wzIuc>sc>O@1QqhmP1>aj-p0wxRkj(qt;@EG*PA2~C zmcdtx^7l;?F@f#GqIIz1rNJcDGlCOP(bFTUbE>Bn5<#W?iNV}xgA(e~<105{^-F?K z=u7h{;yPyn{Zdi+2Pu6B9#AVbQWacneom5Iynz-k5}zC`1AGJ4P8iN>Jvy^VZv0lA zOAEZP67clfGNILs0L|>!s-P_4ZI#RSy7~V{T9KiTD4n`(=XfvyQoOQM<6_|;z z+-VI~KP*aGaek+B2VU!FXxyTj9EH)eI?;DJ6L)-V?l`BfpY*I|}XNX7Wt zsp#0O0sYJH48z)_dw?f_+P6o2Sn(d1j@w*II4mRMn9&PgzvZhb`-sOk8GRAH<&d;n7+ED23I z4}nd=BI$*iEikP97;6_52r#Enq`=0LN2`cD#mKXc&cllWqSqKWs9pRO-Lf%vXa|PF zaP`OJb#P8ZYE)jGJs?S;o)BRwFwtnTo1QHbs76I4l3&=_rrFrqCc|HuZUco5{J!4I zWXtE9zU<$dehY@$ZbIU@10Ss241lDJv4N|RMIzdWlDJ@bNbBpT*@RMDM?z(Uju-(U zjC`~~KuZ9qWjNe24na~a^n4ikC;$MYFWhW)h1xiD1_pk2nk+%VdGqo1UPhDz7K3c@ zkT4t%%bGt_sq2NEOGJr^7 zy>+`810{o0|Zt2G|a;#8^GBH@ZbG1i8zzGv&3i3{Ggq9BPcN|&|l<;|%F z92E0YtSA0Hzz>NpB4Qgl?mmpl>S{}fY;I>0RY$|sH5+IT^>=<0T)z!idIjursiV~n znTApT@pgc=&%^l{RU{f z2F)(y0p$NlyN=A>(1UHgsw{Gqfvk+l0yKCJH7>IZc*SxisEgHz2Mi{3i#6@-lab0$ z#ceNRf>~JdKR`@+)^IH_aIIfdWAz0HpzZ|>Xph79Lw%M3c(N%&k&DZ@z>qu3T6#|R z6Dg);Nh`UVYbq~)PgDNa7%rd|;O5i$`pCE&>2;uZ%sw=kWE+M&@u?*qy#0=l0d#?Q z_N9O)E$~7F>H}t;Wy-D0>;jHhXUoN@znevQenwPcVeQ0kQ z*iza8OvV!N23t-Oh(Jyp&<|D!mw5FOw+;l~sr8kg11m@#8H6OHXM@Iul9 z3R8{Wy7E7c%1)^^aWf*HNa}LQgMvr#5+ExFBW7&?IpYU^=VK=)C55M_>q99{6t=a+ z*JF(U>yt-e8Av=b97nmJ>j91ED}59l$<71n+mFRfUAu)_j|Ygjjh@8MQ_3<7eq1aM zd1Fr?INJ&q2Q0jxJ>&k*f)mkvnBD%C4YcEUIPPb#6x(1g zY-phk@Y>uEj}>eI0>7~m%&-xWnP}nhf_bo(S%zA26q-Aq4wduO;m%uq=t#}s#=sjV zlpZ2-VJ*B6RejW9MowLd7VEK*g;#HMWepmmRim8;oqN^4MBu_I~3{`i0>zBCU~rT2b6aIV4=14%ls+h0!nQAh~F)g z=`xCLiZPwQwCD#`xr>FCWzF(j0Qr${TU6ma87Q;6Ew4n$9feAjh4beYvdnOpz8c5r zk|OYCzfcGd61a!LYN4cs52%il=vYTzS}gbPD`5Y{0;brxxqALH5rs1k0@RL{e(Zqi zwcSAHe%OA46UwA#Bl1#uS@Q8Z8NxTw>_W3U-W7T)QRs96pN4MDMEJ|SS32$^+*7so zucHm?oP}pie>E}YZ3nyTUznOO2}F9=s5rp&JOZoA_PUHz>UfiWjNN6d(A_N92K)?c zB2?=pDUpja=`<$SnFs`7RtQ=Us@K;)+_yu8Nog?^%P5DWg=S$N470aLO4ejqEnaD& zk&LXJO4b2@hP&IRIyRu|Plu?a+t?Yr!0p0?xIM@%u2E#*xsalFYL7FqeNn@worZ&o z_&y`de*@;|aSJ|dYRY5*lWBB1&bvx?yOxnGb4GCcoZCK;`}{q_bN$CMSwbRSVMT3r z>DbrkRLsc|oA};KA5qybSqTXV{a9YA)J7hIK$02CwaDn`3gi&|=n1K`Pi?|hkvLe6 zJ)nVWMZI=|@;RKnkr=Hnzm7^@lfpe%9=}pHhwZ9~q7`R<(+MeBRPESgQ`4()q9RSu zKs*`aesVqdroKKFjlJb7;-=jvyI$dj`9vd2I-LJAxh7)*JDL_5VkZ;{%^(iR3TbIM zQf|-tj0g~PZm&&!bB7r4UCt$l_Q)dEroLVq(J}Z}+?|aRkNpvQq%J(K(OkCSx7^J| zd(TSR|2ACI>dWxTD_@y!@?}J|ClwhUWkrP6A_*b30q`PfI1_tAEl?&DXQK<|`O^U{ za6lk**#8(IAHDw8qI{VKm?CslBS)q}O#6c6pfe_E>(UjK_o`PNqKx!3&NFa>; zi({6No4h_CX><`Sku+1wg)kMu3Mp8)U8>16lL}M=((6`+`v@M%21F*RQ?a_Lz-NSW zvd8tHiLJia`%}WP?C6_!Uc6W`6#AZ>ubja?(0AFzbFoYImZ%N0yf-|{%XN*~Q0&fD zdwjS1)u3EqX^W4~>Q&Czgz9tW&b?%1W!2PJ&%5W_^x(FNQs8iAWTZH^KTOe=Q3pcP zz3sY;XV|_!XZ;{Z_DL^6`Mq0J1ulk;JzM#++T7ylaDj$DxW=JFjRVBc?_lXKmsIKf z{*2@Den;rux!?caU*G%l`@Qq?zVCC+dCqzE=RAkv8g4ABO=r$Yh*o)@8j@;ius2IT z37ER1I#A+5Tf&xBg_I-kZCyd4faf1r1FN4)qz(b8jI;-;?yhBRJ!Ys;>ok|2r){B>N*6TNKz6sD4#Q<=i#+(vFrhuIl)<9nO0QvtqxOOp8az1K$ zQ9jEsOqV(u*K#!wRH%q>zJBBdzt|3h_RWMjbfPWXV3%AxU`1~C6U2=?(ds}1c+#t$ z@>f|z7hr4~!&8tSf!L@95k{k0&cyfJ+>Ib{Z5vH&sV9~`;Pf91aIvOSK=?~D+}QFH z$bYE=nG3*d>9|!|R|g8D{A}J*w6(Q0t!3B+R6Ochgt$d{{&vZ4U5zQ6)#Jty$JG1e zt?qD;assrl=KPCm+kT7-yO9awf&_v4CkBwUK&PG0ALKTySX7o{Abl+XSp?(($Xnev zc`WMnaB%GxkgdI#^1dkl0eb@V^tLS?5q$D9?N<(NxChJYdJj1 zq|ZA`+XoL`TWef>P`#B*@K8SuJOFo#8ybF?+XLzpIRUMJTe`n$xq27`=FWopFd4ilQAvZ}RGJj6-;DZB4JG5={Oz-2*VbDA z1)H8f#T%b4d|iz>Us&E6IC`G}WYt1E5@-rrz^UU&f&X%20_ak;AV3D5*{8Q1?PtvC zywC`hfQ8{|s#GL%nl^`acks5x-ZYjHvdtYe)k%(JRb`KegjYg$p^$4E53@bfFypU;jI!B}Hl1 zkMF?CaoyFnr1;x+sZwOh&I@Ss-yGvas|Hq=?^RQ8x!JloLx5J$BeD*UB2|dq5mr2C zo-lYcphEPXNAdg2*TC}^6bgj(1+WhRTgN$Oj|O=}ORew&XA$j}!)W|Td;9DKxBYoL zs~}*1US_8qHNDer1vk*Cd0I54p8k6S(&bR~9vhakzaWk~+h5cS-GN9*437NyX$+NE zz{VHgQjl(7kB&mL3Km#RKxN8sTta9TC_RP$RdX1>ALxc4TSPrH&g}(Y`txk*=K)w- zA?zU$6nze&cTke~OeDUWnmAimx|IaXELh3nV{S|i>gZTD913rHa z3|2DlqlIRXb3qH-G$*h}!K}(4B?wBA!dJaGs@VtyNXj`#pftL}UxdI~wDi}N^4g(i z4I+@Wi>5l5&Dqg6Z@lusu@QMWIUo-}2V~KJzn^S0>M6+JqAwqF4eH2^2G@cVxf>wX z^g=V%7wO{H@sy!qJ7Eo)26$qY#P*PqL$z-8`5)ie$YmsCUk&TdME;Q{I zAa+L-E|Y=vZa}m;NX{qJKKT0ilj4eIUt@s!!|4RN&*mWp8pB2! z#<7R0Oqt`^EM}ancU9MM+sDGV1NTl6Y5eJBCCyO4-2-W;NfTU7FJ-H1X0J=cnlOR+ zb9R+QBNr}~8HN-tZDw6*iw~WH(e1jro#bYVufkl%cm_(!E6`#?pSaCQ5NFyaagBL~6%<<>9Z3Aml@Me&dHUto#!&tiYV-(yEX*Vb zCF$iqoZa{fGmAe`En%oD;YZWLiQv*n>_9PKdHojpFp)C-HD4#&B3FFnlmR|k&% z#AsZ+dTcRaTx@!%&4eJ=g^vtNX0;tzmx>yM%d%m>kH$N747D>xc^Zi7K9VVI02e|} zvrqdfI-rC-j_9|^>OK$Px?m0$m#7Sk!HLl)3mXys@!h!mE=Y2!uo*#pfjfbs-=vmu zYLZJ?;m+QnB}~Zdf;D>n+ejlsZ?NEL!g8$Qz_j6{iEAUO+wJ9!r_H6<`SPygRlRtE zRh6dd>+DZW11Cl3x6|#Ksl?sAjf6v%?0|esB71Cz8OjgSc6Or}i13YH1zLM~*Qs43 zF`9*E?~lbeNytH&bqQ{)HiEH@!g$~2H`WD3$VIHA{lbdb&}pV5m?Y4CnDz)t&{~d;EQ3!S zh!Mg?E?_bHSyn~Skwg`CIB7Qe~)IqB=+x`>S6I9M&gMswyl( z-&>6}#NfC|QRkX-VP7v7q@Z$b2X>Yik3Q{7i|K~B6K{P)VV$|kxkn=G}WLakKK(M0g2lyAb#Fc zcZ>@fn`?|TuP&KO=3@ON%#t-2kOr5Za`8$@K@0AXn;A@Zm@0ZO7NHn$78y9~n!&Sp z`6$<2Fphr~d1s3cvwh(PM9Q?xHZN_kq}<|B>7hQ-J}CGTqV2hA?Xpv2xphmTu2`yv zxn$3=00XgWOf3fD*rZ|SaHq}nUE4(HOyWIU9PUql$xy}8ziM!C0lb6HQcnlrp6mVJ zgRBdQAu(L_YP~#m(1l~kTpY@+Sb$=+{msz+;>uP(`^qqtbK4o?LGDVN(o?~pKKsh&_Pc4JX z6!McaIuO)mh+ge0R;ntVCAG~dL5hSNZVS?;WRvekcvm=-02Sh)JnxsU`d0hxHDw+P zVpBO=Gff|#TjuHQ7?@rQ_P1PXr0(&(;k(BUfZ*Kv+&wHKu(rUtT}i_ zBBkJMyux1csc<>HD_feHTqVlp=9=?>dWNmIL@RjP=Vj`V6`aCDwU)HMv=jYLd6oWk zf{yZ$^IV)?*0-Vt1R={M8gpsCNV%ysZMaPgOGb6qTE)Amadz>vtb8vkej6ZUYu0pY zp)RL;t9ZUq z?o^d<+Uwzu8mh(G%41GA0Pscg-fjZRB1U`mw_oVVTWo7{I23w~i;G20~lR-6~1{5#hEbnb;PIqX`Q7+>%L%VRd`M2JcM3B@9k( z2uwufqMGxRT0>Wz%aFqI@+QGg2t~C#rN9W<=mpbtM$$G;*QH1ll1;=yvOJ9k3w(B4 zz4s`MCsE2FotQhVGTy9rc%7z}HLWrLb4r&{<1|^;hnI8{UR{o20f@lxLtK~A#10no zp${3?`fieH)6t>%ywv)XkPG47KAl7BC;q8IyNEqIi867w0WaHpvof>W zm*?f@Ez0R?qONb{XcDHwu-mg4w$}klrJX)UIx*>p5F0mcjQt>^!HX%}#ZW(#;s=>+ z+`VyY>K)!n!R#R%cSrtzWP?$rL0 z-nGLP$=v*+)er$PqkTn02CgRdQcc_5k0*riyvB!r{XQWCscPpC&K3rq3j1Cuc*=8# zS09MNfhAi1IhS*BlIkod*K)P6msa0S3bUBtea}*t_*>h=notcb8;5X|xS)($#-rY? z?r>x9b{@oA66vztPb=E##Wg=r-Vpkiy~TP_~ASCC!}jS^STZ_kvt9Z#W?l^5zEK5-DlF$MbC8J{iKG}d$ChO}l^)gSsw+NQ_;nV?&sQ5uPD;9J zbWN*wd7}|3jeU;HUc(Ku|4Q`+Z$)MLieJ(g$w#kiVt%#j=|#EE@~-BnKNu>Vz8ts5 zsvYu&TEEX}d|rzAtaOGiOD(IVpp|j=kG+X{KhVRdeevczB**v6R!h+Oz~PiFmtXqK z+TZHknK`qZF|Z87?p)DYVdq=-ZtKKc;%H+IeRSm*{{p}GLs<`v63nK~@7p0LE33B2 zd-h}vFY~bc@=WDR)|%c_w1|qvzMTy-@57yWAVjrO2ptBSO1He1HgRG&otD&pvy%t+ z%IqT!Hw+Gx7;KT&a#Cch-xR)y2Y|ALNI=-jP&@uOp$y57ykrD+{RE*dN?mdCX7Ki# z&nD$1B%_MV`W~Lb1C38asfmr;YoZ@I>CMv(J}E>Kd#&YWebiI~?}Nz=R`8YtWnXCI zKP2y~9|Lc>#OFKr@*eNh`tn=B{!tx-Gp{0fr<5WK9wgi#%#E1yqLHEs9wY@3-VU4d zNGLv}8b7=tPFJml_uqUME%B&WY414c|EwxyMG;za3SD*lr3LRO;$rDqF{;-R{Z2^o zJg_9HQZ6M*TiBSLIM4e4Qlng|QN}0wHZLsY=ByxcYLBvFHYw0wRh6l2H%?3P{c%N)ROHi~$)W83>Y5M8XVFhn$q8 z1QBqC43cxs`Su#O>`>qN)u~hWRNY(k%^!O^Gw;0b3f)gX{d6z9WTmg}-9@(xgTd^* zeoaCSgV~je!EEc8Py~ZHin%UvNx?pRq|GTnLobBuXC{toP?}ZusMk(9R!Z#A zW1H@||2%=+=Kn_zH@nr$(NkBiFy8Jwx`Wwrryn!^*fR-zhD&}$RY$!oj%) z)8nHRtNO>q+-biM>JtRqtaIWMlM|EG?G$Z9Yt#rv+6DRZnYek1nTA3~yFXx*|M&I( z*A=Kvifw0f-_}#GF##h^#c>KT7RnznFS3pxlO(^M1|8+xdr9Z{o1Uf3zdtiH-JG&# z=O*#QUb>CXXd|AeC%m3G7Hb~y`!b9yMW@oU12>Nc8*g0Z{^sb98=D4&|M;(WZBUqw1VIGOvn5){+8IO z^vT7;8>10h{6m%gwfVj7sSg{Uxex73=RJDtYgxC!#^f*r)-TOsPfpN#MqOcw+VcCJ zMc?=T9OzQ`y+3NM!o<>PRU_>A!d&|IoiTgP@J;X^*c{E$$q@SNd*_4^sV4VCKjX&tQ`dX* z_`>u@?dmD7F^E*psIm^VZ9E$z8E`LOP*sse#=R23ZD`{gXzVD&qscJS{z3;f$ zm(Xx3>b}&&!On|EHU`GhVE%+(e(U?;gxgE!m_HJ8x3JvI7Y{FHR5Otjq4|AT^zEJ3 z3f{|-aFJ2Br6T-A-|mjemqAj>N?lUHI!d<-{Uup5+9|{Kxpqc&hyZ_$qT(Q*la-Bx|P9 z3@gr!CG?>v-5eJ9l;87h&anA5DG!y(W{VioYf32s;;^pwbKLl}m zACnR<7$y1TJk7t$S{oWu$1 zpSVNP-2RSRC zNN>a$S1}~}hbmZ;@hvRRzRuzmx^sDIl|PMmI!TvXa)N$80wd{p`C*lFW#!I@ zOG?K`0+a#_h8I8MW)pMN?q?CGm$&}DSf_{f^mEnwuL%LG6nZ>x=^bYK*GY$qafBVo zq_=g6#v9A5V|^-av+?vGd+-=K@$82cY6`bF4GO|-0!`J& z3KDsS#POG(xI9gFG|Vr?l|D)&?21*QOWc@nv;~oQkDByr!jGfF*LI}sN+soP*&E#i z6Q)R3qBG*0ciu2+Ly^+U5kv+3Bt5jNJALMg?!||3x1RM$#3p&Yx?mEO%DF!(4aXW zFMkPpk-)CK#B5fh@1AO4=uKDCYGMMc=&BnI{GM@fIUIn=%Wh|kQU-7QO zQIvkgk32?@-~F+n;gbR2qyUtrZDE>QXVYbQ`b|uRLIpdgGnPk|GWkZVxP+ z-)3=}Z?W4h8Z&BfD%lWz{4`>FL;SR)G}nE7NX#W_((cx$F5@@jSsG=-$8{doeDc%2zk~4IHg<$n+nf-G zgRm=x&G2G#F)n*k{U<;5u{6p0zwJV3ApHf#(^a9lg`X1BcBT1YV%V%zhOIbRKdRn1 zN(j#=-5mQ^QKgzDhtt+amr7YGp$ZXd@(Y0nEhC=Um~B)2mk&|8mq>3Y(t_xit7-a@ zf-u87>aG!$D|e>MapA7O(0^vgniEuV2@Wdx7o^N;I_8W)%p~BIk&9=;tIAJvA%->18JUl(hV&{^! z)-y)`dm!#FIQWX_ZeP5h7XQ-d4Qzq=1GZzNPn(m(8Fi_2IP0(NOXa;WOOz{)U-Y|u z-JXZrvyrbm!%-c2&B|8;+sVQ?d6&-)`5w-AN~{+P$~RTNQ^b&dCqF_8{%0 zzR9UnN;q^GueV=^)6K0{Nt+RGIjEy3C)H$@&`ESwRJMAIl^=KdBZ}U z%dl*x+3j)3D!5-swR$h1Z=33FMN{AKx$OGbrz+EmcGZfvu!`=4JtnhbVh0m=|4=ox zC#bZjJyBlPe!NxLswKn3&CCl+qNRPpDE%nm_q2-)mHplC>Q7j=%+24Em@##$q3L<> zRV6ZnuW}DQdrTbAwK;gxoWgk2gshmAXAT7gKhP0>kS#OZ=4hI*42I zbY7^LW?CXH`x0qwFvCZA%$2)kUupk_$BE58eamk6#t63x7bq7zOZ*x>ST*0;n_XWD zP9;o`oo&24otR4T;swJ2d~bHI(h1JYQ5~?qy(xVeTzq+Ir?Z+nl3BENCuc}VRJ}fT z_nWlf=*Q@on7h(WPRl!i5aW_n)9thqY9Qpls$9sR1Jboz_heJqbvRNxbp>8%peNnAWdYDO(`J5zaI=;I1P z!!VqzMWJRbtu`T@KUyb@OiPJ#1G`f)Bqb_8-miZz6Cp6$lboEK&B(}jcO&>#dgxvhrr$5HiB*!R-dmFRS)l3< z6{(H}Sw-!nlX;;jmcu%o#31IBbG0;DCL!nUmW?FH$3+s`+VY*&zsV;k%*@P4n3~VJ=^ESpdv`I<4Da9fl3=DxN=m9Fk*G~fOloUuDLFY)t~B#LXq@;y zM8wgEEcU#bzp9P-z{;E3wl_kW9UTFkQO?wcF8uMFZG+#sWvL)`jRuV-)_OS8kl zT-pUIA12j!NY#|J^ox%Z7a!qQhncrMRk0F}??r2`8*{DY@~Gv`)F7SX+f=R^%@QGU zS>cj1u1Y9Nltem>IW(4d9jqA}7@(!6Ommp-Yy5a$9%kRizhP;ZFDXe$oH;o;Z$ErE z&&=%T=*U~J(B<7Py72R{R0dzuAxiZa`>iCS%lO1p-Yk-%oz9LQ=Znpp4k+)RZ2?AFkX{q%32O5 zV9SH%B{rTPtpHB$T^+`EmH7pBZfo()XZ@VDgW&^bAGcF`hndPp)bUqJrS=rpg5QX4~`8A1> zr+evji=XaYtl7U|V(dTa>km>=g6-EfHSx2smV~NXoC}<6fB7LVe82J7l5>4&b0D{9 zxTFHDlDo~sYCw98+n?&yD0LW}MG5$V(3A@n zZw4hE&MrQ}d2Ggo469`p`g>vLGV@1GJa3`Bq;v^X_E6qfJz68!FUneFF9Hr{tYl!& zf8LmccMw{d0>5%IBpe7)&2QMt?k{Bs#x$VYUD+L4u%3ycPz@el@ zK+pQ~^#gqn1Ez<*{}v%QpZ?`b)|Jj^qkC2TBE5N}!}*`~D3Z*77~<@<)3xf*++?FM z<2+O6oG{V)44=(sGKS-1ZU$FPYd~%+De<5&^-UEL9Ass{>d(P9hGu5|85tSZjyrQv zJyqil@o8^wZ-lLR(3Fl$QEB`Pc`3JVu8EqSnmHE>1*_HVmb`l1N*(ae*G8vvb z8N#0}A#waXuZ$jEO7C<{Cf?0qEM3zEmrsk*cb_^zZOif+=E_hm6x1XS-ot>Svwe^ma&u6b6 zKY-A#t*s4xQMNGI9YY`x+S|zdg_aULRd>3tnvyb2xCOQXuYTficI&K12HTJ1fLWr^ z48A*csv&tu!HQBrUO!8AmUuZ(MV;lXOY_J3W@BSx?ZV8u_3v*5&NE;z?sw{&nhpz& zW!<&5wI$_ph-I;om%=DXw2}m1y$lxJ&fv0%M50|u=<&Fm{30#yQ1Oc`$Mhek$xV3Lk@TTZ>r%~e04gdX8e zH&FA@q$Vr&yjhF#z99eM;E<$BMQQ02rKY0G!&|j759%cO%W)8>bIq;HDlYTgSC=^c zUM5Ne2VwdFd*A^b2+fA(U`^~PmtWC}x;lT%pr$`aj@LS8)iWM=DX>$a7#at^;aE!d z%|1rb4axp;KEh1IPP?@ET#4jmcft`GX}0pyaX%(>md^yyaVbz_uLokWK@qmigQ-|- zWMt&79H3%F=2I$`hG)jej^{o!YtWKm&{o%!DU{;svFmbQa%Dq-LTn#~o~OL=JG$%b zL%Foi0_n~W_E@Baaap;TR^)Lq>jKgEz{2e4!qv_EhS`Ji5b`EOEEq%w|_gRgVYe_yMrbvCTh9Jb7EwG+nTx#xRwh+fGvo zF_s;hU`gF2`M|Fn?KZ``JCP%1w7_ap#;9uMWku!XUXF#=I2DofaE1<91s$qKdpD78 z{FwTjz&ogUia(M+0wxW#hmkVPq$Q)m5m^*K(eH7AYrAIjioLCVyEfx{*$8;^H#WUb^`^JV zE%$Hd@DggYATJY|o*^^PB;;J0nwpB^xcq$K=9ZSbtyvanK;Rm)EbfZ`p_*A)T^P$O zI1!@$f=5@!p2sfCx%?D0d(u0j;rM;ALE`QNi#^oboYcD28d147?Kec4=&!zvg1kAo zxt{kr;P$mdA{9bN07r_i=h&aCU*gfGBI$M#b(g8QO)xRSMQYcxKD0*P7b%ToQ#JyL zB51Zys1V%p*DLxupjat@G!P7zFaAIV!DkrLAaD+hjxtVl?`5WJQq9sO%6W5g=xH)D zZ{rXZJoKsYHsgCL)6;F{%G{i+JUjBbF-Fk{7(;(q;(0}erZ=Om`(o{5pT$CbH!n^P{KyHQd}*#sXvnKbjL zBCj)a?(Ie@MOzJ^qzk(+J0|Hv&zBr|jN}>;l4X=`)5{R|-PY29=ZDfb#f8_pGz~iU zM_U&!LvE+2I8FGv_Z_wIE3>fHQJA2PL{wszn5>Uly8tm_s8yWy@JX3ShPX&aqr7g$aV+3s zdPZC79r0F&{s@c7QkwEm9^&z#FA~)nT5~sf+0j9+o!Q zEdj5BrF!po6rK)DE4*C);+(djD%-GRtUd)V>Fs#z`EG78jr(2;H652Hl={^|L`0YNEbriOWg;^Jfx5Z5D)vFK( zBAm($^;%;c<=@}*y5db;YMMJ5WVg!VFLZ!4%GpwAePz11^*pUAn%DZA**Y~4%VAt| zO*6r`yYa67>^RaRf5?KbgCV?WZ~J0A+Ds4^+19ac_fp*~e>Qqxw_^bv<=4^ruRaYK zqm@e?%MDj0m%pe4FFq3*&o-G(8V>e(u(&xPVRPj)A>~RmflWNk>rV+tNtG<%O{-`J_ty{5j z7EOA=J5w(oT%Pb0)wqz?Y}Qv5Vo`Oje2=)lPLE@`V0-QJWe5T8wWcGDX|?U`TH~gN zezdnA`4y45zmD)^XE@qLUq0h5BC_3(J3)b6%XP805pn?*=C=d_5A_)hT1ra34reRj zT*&hG_7*d(nKQU9bXu%TmK$(JA)B>pci8e7*Rk9_-$hb4V;nQx%roDXCFjecWKyndLS5|adyKhqL4pe1rsib6PZnT zEns6rno|9sU;5c&cMJ~4k&hS6Thd;i)h=$k6P z=~68&ney<0@m5l&0&aH(iKc*l=hN$N%rGWEjgL5uq-71h59@kLZ;DM)&y zgO<~%yJ!YYeRDG%jh6kLj{tYK_}Ua+xo*LTofqhPeYfk~D`~n^4SOod0?TdrVb1Oh zbR?ZX^Uws#YLEpE88;-GyfZpmZ1gco6v)g6AcCsh9lpshY#`r_*9z@OIZK8~a}5EC zw>|3(_onhXz5Y1(8OPUVEkBYs{cTH-Sz8W|Qj!{#jOeQM%9vfDx7%{2n>UaPftmdk z4FKRyqXgvjpsJXNl`Xil8RhOlXAFyb5=)WSdBW*M0 zEIXsiOsxa5;f|F)zPrFI1{ZTuzjvC_i)ckz9`JjSFR6Q^(d{UvM5<57{K^Q~6h znT4w+?HSt{%*9S?DXw!LqDrrd zOucA?>Re^JGCR-EnmPc#MdKY$sy!)^CGHbLdcm5!_)cPkT|2)te{aBRVW&BFn}e*< zK3)e|%LjzxQ*8ozo0OtbaGazP~-cj{P1(PmH&@&XQ89hc>nj>t%@ zd`BCh*&p&2KW<;;X*OYee>q|8|5IX3Z?|3qjuZ@Y-o6z=MF2;#2 zH`P3SW8k9yE&On>mgD{Q38Q3)Qwy#AB7FA>rx`6uDAUY4KdWS!-&q-7UoG_Pp(T7j zz51lK>LL}(rGm*G$mQ_7>Y1jDeOi018#L|os%e%UkAex2p?KV}A$J$}!Rj2nxsRlf z8=%WGux|u=v#w}~I~L0Lx}J+uur>CXK|tw#wEN68Ph}ijaKuZZzHFb~ESw1xHfF^F~d~yxkT&-LNP@r=$ce;c$PHn=6A|tHta{-*e!8 zk_^`0FTpppwdY34*GCLQ>7&+W;(${HYr8sVSd>zUr;j^wT!-y~p==!{yt4b}S@=WfY zoHkgCGkLo(Me#f~Lq9g9$g!s+Yvl_lrDzF*gJZEW&Rqx3fmAiK0+>o~5b2=5veZ!M z2PjoCT_eg=xHg;8y)s?nFU6IA0XNjdD!TX;|C0kF8zEQr3RK;$0C{PzY^(k z!t)yWIblIJV$%~-$H3(WMNjKj>`9%QnRyq7ww=OI&}nXDhKT`qZueO3xU^Y=VL#Lu z#Vkxrh{WiX&V6pLc{(8YpmF3aw~b442@XU*?t*1oa=(!R&z4CPuqC)`-$d$qifg`K zudJ9vA|#!>BkBoy&D3^W0*2#))Etr~ z@C=>T_oy%7N?x9j(w*!oRlVD=dW5UwkmZ2_31 z)^Eqg#j#Rc{OO*!ET35FO>(r~Lk~f}5=zzlcVzFB&E*@RoI|m|jsj5Llpy{&cTKPKU$03m& zCYfzr>6K@sYTSn8qn^b@xq{@^R};k)7h$VLN&}*JFtgQCN@8YJtBENn;-ZDFhE+8W z2u*;%S;NV>UEn{yF7s`Cz?Xu7bJ28ldNTQ~FZi$1PF(Ej9AUlip=vUbY31kkH2cY} zi)flCW@i@6l2v?vp{Z-=hH2J=b#GguEXodBw3uX;?qm($zx{~4PTp*inJ*EiTn-yT ztE_3GCj+C+_|l^+>&+s@1k8PLAi^7abGxJQzT750`A zC5VxzWIRw+$~77*yxHp`o}!Y*jH)RITx_n)L1fLE{w7#IJm2BAK9d7kc&Vmc8x4XS79=4ko@1>-)sJqS@8+_t`*NnZ%*tz6_ zr6GLBDm$@f6G`r)gv44Rb!<|~?4)FPEv=4;K8wH}!8@Oy;1_AMoh`(|2J7R>(L_-e zvqbsI%&|VKZp#cvd=^WCapja(8D0?D&g709K*?NHl&C18W9ut5>)~3#*N%6!bgbFt z&F7CZn&%->VGHyOSu2TeiGyD{fqhWsMB?7GT`5Y*FA^0Iam<21P+_!Q!I4rDsH}Au zg1cF1dAP8Xt)l?scB}Ipq654DsNSN08ENZl%U30|d9uJ}ArVi?Vj^A~ijN`hHLMN< znx&b+b1q9WuldZhR_aApnd&AY#JJE8Z^6+DWIG$=(H;Ly;Vot z2{LcbSKt^f-3^uNChbZv&*N|u^E#KHvYA*;=K3BXt6R!W& zV8-oDni@bujdS1m!H(&vtv8LSw0z?=JB%Ml7>r2LZ6fuZ>oUV{-A(;24goL^9Bkb`bOy5g;vP<6xKzqh@aO zlrE10LhjVEM%pu@hz8Y*XM6>dzULrdAg4)BR0(hj2TmXobViddcPz&kQFY*0SF1bL z*X9RZW^nIB0~0TlutS`|?8$^eSy0;=3Jm@(BX_BotiU;M$cRGbd%{yzIY}*$BK70} zFZ;G(EgG)E70c39?7;3`pyq{M$j0c~C!WFwpJ$YXIeugc&$pfz&W8v{%V(xSj9z;5l(^xiZ{z}BSvw=X7fWfzL>%awIfNVz`dS0a02crP$FC(x4M&Xess%TqSHGK};+I{h)g~YTbFst`6{k`g+c9)pK<#mD$PJ18S`PEAeiEmQ^}nUyK!?+=$(TsNwfk@UY6#(PCs zSy^JHjftMm6s85bT#$2zX=Ca!;fU;8eN&w?xgD!#&g9S3Ep#)j(?Sh(a?;;T2pO-W zM2E^Z$j%GicC&%)t7}--UYUd;f_x_ls-C(Q^w{db!Gj3uaVgXnAxgVEUMRXYExLXl zP+y5y*J7H>Dg2tcc0Oq~YNdyDa1mu!!V#*9UD1yzp2heHu)n_<@=^=RKpFT?H8=d_ z6D^nJcYD)t`Jt%5V+;{M)(py{$=Q9OiF2rOJ2TVs^_5in7}PXfNGlM54%AQASFIQFfg>d6O;sS>p>7z;*25xtKN4+)9M1N( zyAgf%Aws6Qz71$$0dVGLqnS`qnVG4Jm8!2tS{g_kCz#W>;6Zv(PKXOtPAdQ9T?Fl$ zRTs?K^DcJ#oS*VLLHPKwge@-o0Lnh9{gf*U8otI?j`7e@sobZ9Rd8LKjw*k9#akD0 zkF70jPUHCw!G#dEZ^^j*+`@$2=lpZa*7?bthWsmIOntoh3VsXa=IAQuz;iPYnG9Aes%}|%vvnM0C zi>7el%2I6`M4d_WsI`@T(T0!y->Ysg$|OsqEvJM|c7hNB+NIRE6H3jo*OXO#zfh!t zH-A8xMrm^H7#*dHq6z}-wM_1in`IEp5(OI6{4*gLKUBZ&w7&_g6si(R`B8|=7EA@E z-1AUg-tvBxsG_c>*0o!E;qn8JbW95t`x5;_Zl1)oZ;w&`;9{cPu|Gwn*RYodA zFc@ew%r7l5P5o*5QXZERKjR3m7OlcA+?ONc!rFXcp`Y+(jC)_I1a<09Pinr6gp*^o~~@D$cd3n~&s4VA=sA~kNp0yj@~Ry|9AM8V6?&#%#K zeHEl)K-0-`(Y13p7kw&{UBPt3Ifxvnz>CF-u1)%@YG)Kq8{iRM<`vW z&d5NY$s-f1b$f^gd}TGD|A3xji)as-tsqiKD`@*bLgKVa>QRUmky(>v^f&?Ogo;6# zBu)^dG9EO&6yfS5elh`Q2FbI2`W36pk%{u3uK#Ck_4X^X4A3bER`YFk<=0sw0wRG+ zb>AJVi>+;GQ8y3U=Q{CN)nB3p|27B*HA&Mu{;fqr5X^UFBpHYv4gtkHgN%j%_!i$U zZ7&^Z`as4P2*VeFQQxh7d*vJ~YF>*7?1RPBSJraK0l{yK$}eqa1jx?M&u1B8V+~mk zf~o@OM_XHRWZ0C)?3LCJK4wSd8a3;L=r?pSXWloiDvvHqO!Zc>Km!jHyFj?P2r4I% zq5$tfSK1V4j7SecULe>VdGmSw!h<%YYoak~#pftc!8XcBJbF8mvw1jV1FBbuatR6= zmS0b(ssjJv*AqKI+Dp%?!1MlO5jfJ}%Y_We@lEWh6me=#g)`Gvnq+mBjAV)(Z z%S(al_cV%tt3jGVLxxu5LkysQsJa!km=&%XS%$lsn3PU;$Icm?S{b-1`V0a6AWf<8 zWXVC*X_PwOj1DZ+cXn9x=jt(~K$T6H=(Lr^8aF>cS3zM>V0H^Yju-$M99n83 zg$36d)|a#g7YW7<`gAY&g;l(roY*iINXBB4Ls3ke_aIepUE#ZBHQN!R5fG zJZEUDb)nX>MT=?ayJy|7Sf}WT9!0BVGk+ zh4_pJh$dwqFppYqB>>tZiBjoG30TQVw zC}9*RX$EKqIaAXa^fZ4vsNYTc+2ygIv?>d?*qav|jkL z7sFlNT+*J*xHQ|*=B%EVQbylnme}UkaQeG{{pxu9hs?1FhFKt@p&h!1eEC! zFp(K6)C|!+8Bdr%rl!cq%G?D4yOa#vp&V*2hk#C)=|Z7vvX{$^Uke7CzAWxSzR~Jz z0}%MVe69Ph9&xxg0-A#2==m4dN}x7ML%Bsf4T_?2c+k*`(!I~*oPszFX}R0?(U#`s zE@SOwH4XDmTgBCE@Ex$4j7Xhvp2cb3Qa;s+QeB+(s?jGC0JD|K!j($*wfu?CyZ@pD zl#sAo)qt@;_?AyiG)@KpJS!{=IYSmO&o`>)!+61R8PK5!*N-;r zfzLpf6x9qN9ESXXldK#8g*`AjIts<^K&^Q&fU%RCl~RJyu5 zALPdC<;oIhvq^Z>gP`_4K-KBVZ*~Re8IN)ip^vK@{N2Z!tKg!R^JM9JD zn;{t*!wxL>Emeh_zY9{=mS$}zh5_K(DcFQ#3(AGtK;#)L7ecl5Tu>FUSaQk;^~G@4J>?~xM^g&$nt4JJ1d9=k)LR?>xP|zTVtXQNZI203B6;-)%2HxWL-*;;qslCeN z`|aB|l;3_@T?g*;?1WTM2`ZmZQo?3g6m8lrA)y^_2CTrrzooA3Wimy}IBYUmVHv*9 zG&{l?Q^N%flv!YU-B5-@2!!NGa>zr%N>XM!9WV^-oX~M38Z?5WuDiCfcn(_iW<1(noBi{Uw z5i(79R&_2g%Mefp<#Uet`RX^Mn}s!|P3f^+7~?kT<|I&`twvN)7!FnJ%WssA*_Zbd3ct6p;skDohZkF9I>?{`q*H9~v++-p@~VA`64o2V)`ROhB|2 zh$*gtt|bm4`$SjF!>#MCTR`o!OdY5MlA|Dt5+WyG?e=#WprSSjyrIBQ8%YE96Q8!D z!JdP@M1}?808~L)}kAnAAjU-(M!xId~DJo zr<3zN!|PIp*;m!bahFt^kd(FV6Wl=reSD?!EEhc!B_}WgZEDJ`Oqc%H6NM@TkaCRQ zTRms^_v%}DgOhNmvet7+- zvOc&d<1!?V*1RF@YK*5va0T?ou!+oP*OWpXZd=j?l;0sy18PzD`%Ic5kW1swx$kos z5T9J=_J`?} z!ggJYm7B~TcY$I*j$Kuv1d9BWD8w%jQ}h*eg@KNGsJ!`_1eN=5z(*G#XJi_88F%V- z-$H>!%Z95S&FnY=Jj#r$jnr==H!w#(hY|DMawmMR&yUvFjK>r|fHL#o{Z3G^Y2!sp z93e>WQ^^G7=o&O7lpQvJ#=-gMm&iey8w#iqafZxOxVTL-`Y8%Yh%lkXq8l{)hXU36xz+3(qQ`QGH<&aEaKMZDoK0agNRK6Xi|OOelwr z&!dKmd?XRosH>A3)Sp3Q1>OakZi~4|a7orm8|Aci2HDHQZ!St2j;*9zU3a&6 z8})IQw+#(#4Z}(EBC8R0M?Flr-Zgg1--T`Q3s@{G?(SM8+Gvfc+;l&Vs0uD4fS$%=ek7n6pXzXYlWfFz%sgPV-|( z$$0woX?#kGOm8S8@aW#~nM|)^fW}GYmpAxy&*F=qOz`K6MFC{j3w(U#evE<@u1So7 zwh~rWA12rn;@?w2()#Bs`s8S9_Ica!c1F~L0?m>EGp)I{qt7A)?IaBh46fJgUS|H= zO%E^S0md=o`+2e~r2I+GY%=}-U8~5I0Z$lSJM*8_tFime!)Sn+~gWinWFah*BE0pd` z^=mm;s=!q^+WyelG4tyj1g!vSe#X$=0eSvyY-}tHZQGmJ*wP`WjiaCL0R)5pZ60mU z7X&tsZn>NaMcKxDC%f3NU;CkW-5uZ*BN-2?ujWN184tV+xy#1)xa2x$m4QDPl7Z|2 zRva}A!5ILKHimeIT)S~Uv~93xv0-F8$0*+Vb;B$W$y$y4yUTpNmzI{|aX9Y>r0qDd zY-sG1gr$ULv@6EOxS#Ck-k1O^d4&`}S)*W5{nesd6t9zjT=dVE+=;*0gjgbZxBvX= zS|It?f4)l~_s9SF=BOfh4gP%h?gn{mzuvhk?EKYxPJa8GoxGNRUihCLrl=W9FD3vP z0~IAD7%<*k>dzkmUZp^nvtrK9cVBk>^*0?b?<#iTdAgt={tSzS<3_Qc$p`dx&b~a( z){=cbNH7TRnyD~Et#mSh&^DjxDrFtQ8~ zqkjDp{`((oXXuxI12h@JhF3bkhO2%>vIqmUR8)yVL#E_qg@=|BO;%34eNB zj31v5X3IJ9!7HCVO*eiWz9IkKy;*lF0Gp9gwo;o{>J-IUdnF9nxG>Sw|8zhfBc(Xh2Jil&{NFB#ezv88Fs1Q?*iU{ehF0L8yZY;$ zEN`#cYC}aK`5M_aGVr)3DkSUNdt!c^{GnJj8dbn`HJq<1k-S0haXjz;X-+T_%4ChG zy#1Z^j4PsGLSnr;$o6{ZXydON$g2HobbpVyVu>3@i=nOl z3#M)@1`OMM9*3=vz4cF@*?70diwYg2JQegCk$nz4iY@Lp0JC|X{4b07MbiNM-2<1= zsB|VaKt1|$-cHC%)dG{Oe{DQ@)bX7E0P|liEtzcT^5C{ahyR%y!z?eI4%BY7S1Nl&u)|se`|am-gf*@(R0m{*uhq>Kj`Czq$4&`k~)r#2o*AZy#x;fB5@f?-HfeaM++>fmKcK7d2oj0e-MhF~A!V{wHhs z=OYqve{Yax!q&XV3fU7VqaDv;*IuEzIWh!c;)xxFsG9K)nSa{*Z&FBpob2e|@FGwj1@zyq|EZn+1O5N`=>Hj&{~ylt z|32)0JN^2H|6(4$`irvDVmBfqdgHGPLcKL8JJ38MM*lC>WsuZwt-rM#LMH^Y9I8g zMdlj{@ARM=6%8s+3qhw~8puUZH@NzsJ&!-RaBb-#Jbu@al&In_ud4OCq2565Rkaw; zpD%+mje+wE`Ob?|E=N!;y?<0xmWPjTd|C*}#?V!L6wag(8b27wpeDRDP{`5A8k#12 zoWHCODn^5p*$o9#^w&4ap|o}w4j6brFI*`)ajCsj7px0)`z=Sbt1hM)*1o;uOW8IH ze?lavlNCdVO-nmRZuNDAztT|#kT(q=CF4iYCI*8Ny-rzCgZFQKn6sFiWJ1a_CePi~b+Q_g$*-l9u zoD%C>J);TJaGA@79?7Y>`$k4L3g0|`baN-WdUV-HQjTk4fwHeJ)*|1?**~-~=HzJ7 z(|jI&=D8O2ZIa|L97CS1gAw6Q~ga_GC296 zfd?*pZJ`TYJdf#Ea`ItYsn#9X6syrQdr+f?fv6xHK#6u}*-dlC2YiaBTK`ft|4;WVUC{RJ1&>hr$e6z@de$Db z2jMkydExxAM$q)W3(^6)?fXvo%gxqw`oXfEdT?Rpm2UsuhYzXFr)c?2>cK*8@}OE? z3bEK6eQ`6M#}HcCEudGlY_gn*35qn{#rs5s&Sdwz1WmPilzeIxS~iy%a-l=zwWyn` z=`uP5b6P#)v{JIhVY9qR$+2bBr$UDsBOS(fq{;+qSY9U|4fr)()Xmp^uzonDP{a?8 zE~0xlLrZS8i(B2h>!>4OmS0QMb7%s!2BS7vtHyFOXiJ0YV67RdcDl?(f#RL+2kO6zfJ(TecC#;CO)-DyyyyrL3__i>}U~M$#^( zwN9okC@@!ye&}#ro?X7!UN2kjg$`{MS=@m>4Rmt4XLKEEU>Ji z95xzidF$ozwZW)0HdI`FecnJC_0^pzT$zGD*)r_jf66xelz#g@+VD=mlbh?OOBZyV z-9O(T$~;}l%ggNaIbZsX{&EtnG<=ii$j0R9xwOReBeYYgws=$wS=2ftpjSji}3?$k`9;d-o48W?X*4TqZV(ztkz%F zbX|ng1E;f`7a&YTW!88?Pg<)9D)hFSpfg?U1wI5hf*Leh7^XvbIDY+Q4=T+6xVmMa z{i>LqMUB$EfJ<7(yz4(&>waS|Ma8J|O~9S)h=a0rJC8oo9qlvj^K{?^fgRy)tt z7CHjvo8lTRbhQbnpUx@*`r-e)6xy=;W@Di(F12G7j?C7Nmv5s!FAaa!hA`kD8vCP2 zv8vmgZOPzVxA)|wgwKl4T;-~!r?6e??Oe79Uo-$;bo+=>s~3gB8`c97J=o_gJ~lSg z_#8C)*Z_yKr(J`WoP}?R6DsCPNT3dttpNUS1b#F$^cT27TjjLrFqB46B|Up| zOi|VG2o54R0a`CqphGVY`n3|Ym!Z%5Tgw`>cZ6oHqLyK(<5;$MQ*+*k)jZpbxBwJM z3N!y7_TDqB%53Wv#4=SGkEIw;q126ms3@o)V3{|F0+ORBK|w%3R8T^dVn8u$k^~7V zk~UdDGKB%jNR(Vkl&C}jfjj25>XhHT-M9PR{<@$3@zwJjj}qSfzUy6Ut~tjTb1dpP zN29V$9ax*rgrh01Z<2x+>NuM^618$V@0c;u5laiF|4_LwnwIvxz zi9K8L&YMge(6omRKhjg9(>(gmEo0kNu0z1llG!`4s1dVT^y;u*)7SNV=OdHSmwO;A=#kV6XPj}-4}mgxA@yuY1-AHbLCB40K!t^ zFq%3m+E-;{RgW(ZO7HCIYNj@=edjVF$B5`ZJLDBGXc@Ku$wQvQ#M`@$+cF{i$xXK# z_yED56E#t#C~Cr~qWozJ4sule}0XYuIY0E zVk(;V1>4C6SH$!IgprcqtduxbdVfva1R`76%bxGvH^Osljb~)`fcr|R( zJY!xlHX&Y8Z)FWZD59Qfr}BVH5V~N9Gk1Wwx2_}SB)l9^%fQCI7RQ02?I)o>;$)D} zWHwXVC0r)9S_WdWd&Iom%|~7aettJnN89|yFRPU9rqQLQR%+P24Nbs}8>Cqz<-eQ$ zM5lTjvf>*zNOgJCX{?;Yf~~6~1NZhk*le(;@%-MsdudxGMI;Gq#=Dy?^>03PoOiIG(#MRi>r%|bPT-xvz6lh4hV>BXpY>N z8V#Icw$^U09bDk1i{L;FrMYNJw{G&2aj^e7q(5cLX|TGoK=M>zyI|{%Ee|ljVzbI+ z<)t&{4UH*wT`TA8X-iyvwqMl}tC-X*wi^n*E&9S?V&O*iJ4XxupryK~MGztMY-1+l ze%s&iw-!L^9@;1m9y@j{&=*}-BuKRzAHHm}G%+~(lgRD!q__S`o(hHux^`_)neFIH zA9#c=YRjy~f(Lyy2^)}X`1oyQzmo7q=ICY@h=&&Ej=T_I*(s6Rg zGK?29#R1Ii1`@{XTkoEi7KJNiesU3Qi7Kv8key9R(+f=w7giy=vE$o1m=HK2WSK<` z(a7P>Kr4*}y;6TPUwzEqY$Kl)<_&F96eA=0B>GauV3GoNmt$!XwtqSf8{lonsAc#=^Wo4o$uOUFxQQyJn$mI@8p18sd-?n8*RP+T*t~f|r?R?w11a3f z%AtOBPd-{Qb}Q@4t#k)bWYCPYENHFx$zbN^MS0Xml8B1~J*w__)5?ez$d(TAtX%1ib+iG6K}uarYG*|H z$swDNh)9Uie5?832`bZVD+OwFg;i~QO9M> zBpf@KWag6bu|Oo3d+k;U)3jF+uK1Q`kw?RZNVTZ^NNRMk41D_ZsY8Gbg!@crD=em< zxD)P64CURKJoBxmgOosO{8^jFf-5iVJ7?7D`$$k~yI^Ykx$7^}MpIXOw&=C6KWFqg z)yA%2XGU+m-i14s*6DtIUB%-=g&*$|BDB_mH$7GLr1I?0zu zhVD8JKHf1gSbh>-0Mu*#rDcPxPqHOK9$COF71Fpj9xyq7T@xgm)WMt56B(TF%H6+kfXI*WOY2c)vtD}v?TaER^>4QN$StzO0+gD1F0pI#ETrI7wOmF z#V8J7=L5pQP1592dtQAec-OH-?VEiwu{Szn zn^CMQbz`@UN8;i!(D`D8zUy~ef%HJ(R*tON9#@?0@Rd4Au=5v09Z5GS3E)&^ua@Zx zsk^Uuze_4yiBy%1VufUaKuY%UUB>ufyE>{v0v+s~Vn(*?wj2D~kzF8~bvbaHCd^$* zjz52Tu`rhew2P3#T_K|vhy>{S$5gd{fzZ1(a}p^LA2c%?kM0dVfW}Bc-pilbB3*B$P9lp-=s=6J zZp}Z$G7QW$M{nNw-g=)pncnBk{T6&sH(ma8g|E;&>r>8Ly?56Hf}LKxsUC0ekq*4K zU@(L7*vzVu;H1^)WJrl|XWS$ktW49+T4hPobRjV6Ps+W^r=MgtfkeWt zac;euzRL$dd%2W%*AF90t}x*UQY|lSyqmk|%E}Gbr21xiG@Ttc3IDbU7IO-)J+2Rt zJ|xFXYDU=E-hHvznw#q2%@<+Dd6&{`yFi|Pw6aR~qE5im-rwz<_?oSiC_wfG^~01T zexV+Qj_z)ui*S9_rX4$Z0$&y-_l4FZS+pg$O22pb^8UJf`Kh4pLCfW%_E~ekLUInj zTQZAm$a?o^DazYB z4tBtjg7@HRTb0HhPL(|j1?$7{)FsXPwg82+w}0=7qjbt z6+=eGpX`9#Hy0gzW8I;cFT)s*mk5oE$prDZ|WF=YbjL7B-~ zE!pe$&EDs@kbz!%(xuFGQfoh~;~PEHC}74>+rn~&x$m6A*V3&eyB5>UQM&LM1WE6WX#h^<5IvQ5)KQGmjpwai+GG{`w!VIqf`S6g`t)W9`D>oTg+bmr zFxbl!M-$ZJjdYqNaRKH>Zu_rMMv*GbJn z4*KKTvmxZ7o?hXOW3I?qqU7Gn-ttiwJ%4%At1c(SxmW;#!$Vt}XDm4n<-|J{bw9G4vnpf^oTetzHM8}PzgGp2h##4 zqblCS2u43YQF^x-Ib4@bx?^<3o2Zo*&kaf^q<{>e2DIpfSg?J;*mGp2{6j-S4$)aC zbAHe5h2(H2>KMVv1my^xF6uWqC)?BAeV7c$WZE|x`*&zkV`2ZW6gCRM$pIzPZIuA| z#lmD#ae?$^*VP+n$**x+G*L9ZDP&gk3Eu1Sm9p2RGMDpt2mrj{ESBNEiK&uChl84` zjhCiR9hnyX=*Nv~UFDXk%y@a~#>^jhVui+ac`nIs+yA)w`J*;BrI^nS?q(-$$E|ep zJ$2%CMzw}g+&-Z&XWi3f1)E=t&%RJ>WVrkIgPkuvjk0a4{4+)dx+m(cXXJ|CZ5rrK zy|dEZPQ0?(_qlABShQZ?)M~w&sj2qXM3MB)v8K1FlT%x>Hl+KGbx}s_X7-UKFQWOh zsA+OIna3PZq1wrD0FL+*O>%KxPzpy44FT;H?X6E4_yA$2=#hRmp}b6UcYe+1jhZaC zt^j_`6bnt(!#W}P_;Y@3P6M_N`?FHg+~OIx)E^c^7JpQ2AC9oOY(9`Rn%SA&RJI~J zB;hyxqWKaf@uNAlVmB&BU&a({iN48h(Fz_m*_UIjqN-{H`|}duM#=ROWY%#&1t(#z2ga;YUBPsqu z&uNudSl)||>{tUp!zrVi8k5A0EfIvYD1_VZT*{858Up2rg^Ri4M3;U$s&D9t^Ic5w9abZ%+$tq$D`R1T_B#48tuEZ^tH_sRpSaC z|K_&4&b@ad7o_4vrc=P)l^kI zX?hW-ML_ht6=IBslD7E(tp)(AwEz}VCs3C#u7ZZ^2TAvo~ z@}AVJORcT-5J}XTaQt}s_X4ll;mXrj?=2T^7fmuTOL{(c? zQp|1fxV!f1V?*Br)*R8m@uKhb4?(|v&%l=keXm(MrTD!{VB5y;Wg$Es-)pw!N2I@- zS-Kg8CyQ|!x%hp-X>b2vuzEd*%cUSxm znuJ;ZL9l$~dlkih(gXa*k5kp_{=xZa6q_w1to7^=s9a?|y?`?16uT;ERaI5ZXQz|| z1O&+aRz*#1X&NaPHOxFbJ&n+fBai+wH_^D;omSqUH;vJM)z$s{*7#L!t3do%sRo97 z=n*aq;5QG`TfJL3s6$R(z8v5o%sO_V>9H6MLSmPO&rE-XUx@v|$jIn45>qXFXt(mI zmtMRVkU1-$ZXs`2_SR;R-o1zlf`w>0pB?hwI4+?`dvT_y})+52AR6e0+qf zE(yZ7Nxt^h(4|KM9$j_QYT3w7k!HH7NAayw^}F`Y(s-wU zCWpfEwy2T`SY!qK)m8UEhE-tf`fWp`!Et_l)R|l3q*l_IO}A%9h9UPqjmE6F0{o)$ zfnZ?cblY(SK{rp~|J_$zpx+d)%OHv63sesj0d3jIei z+Y;#(hl0Z!HsEV)=@}ZoiRWye47RA>OaJcLRdao;%p*GL={b>YBGJP5n(MF5++hjv z@$qbwL9axnSDAK2B?oZS@ERtbo}M9uU5i{U?c| z_M8gM)8YF3vFo2xTG|P`^wxLZDaWAMRw1hU!I9MvJ>W3aJIRwi)!Bi4 z>HPz^v@$`E^RzsVi~zB|N!UDn>gLY(R~KL9bh`xIKi%DoHYToYUs{}8nZ-9Z1UxT1 z*>o3|NuM0++8+^SLA&I+-g-NqA#QH&Q2;{yu+?m#5*5UoFP7ud;GD{8%xB8lKLP*( z*XvKszKho%-gsU!Q4$}=Vo<9w1u%@bALZGJcbcdn7S0~U=qc@o@nvh^)K?Rj3n^cn z6Z~0gY%&F9?*R3OnvFlRXplq-+*b~C=&+9%KY@H=C_L?>m*9dMCG=0umY_wV0-UqI7t4^-1! z*{-x#uYe&60RzBSMdvOR+IU7#P_Te%L0oi6+#Zc_RW-FL4ZX$9u7rwlk`&6xGchLB zc20B|UvvR&GnFqnZiNhLS>uJyicK*46gkL1~(MG7Nj6T zXDm^caqP`r37+MaMww#=_H-)(Fd+^pfMs2E%j6cFn2GCqwZn0#1V9E0J|q0(V~4vA ztOri*($m`73VTCcSB*972{I!i8$uuO=&<7O*0x9qDIV`ed+T{v#C1d1@v$zsk0*@w zE{*d1Te@7?{T^Ok#xHLya%n{>zZM!12MG)tBaciZXb!#-uypf-c^}?F3fWE4yhuRw z-M~z$G4^9a@8g5--WU98k9?{SJ;6%dVrm6wX}`xHe^*x>3P7a~iUOpi&}kPF4|*?D zH|;!=)!UG^EJZ*gO&If#=rB%H<>Gm;LgTjsW`Ab?_OUd0FUt_j1!vNue{@;W!j%$2 z{QUg;BcdmfYqmf&5g8YK@GkHE2;+tm>uKLTZbaWe9V{YL@?gv38hIV?8LVNNF2i~1Hv)bRo!Q1Vz3%%6j}cb_BKeNA|$h24**Dfn?&_f^nbJM z$&y5Zo553no;96tN6Ol5FtL_;U7xpt6%i4UV;v~tVEtnL_9b2mcedP1N5z@gYc|;N z)@8r~sT+UK4=`OWk1bu*X(>2D@vv;w`U$KiedHTw35np%reUS57XV9v&Vo#MtM5#^QE<9fS0`#xyc&PC?18 zfx~V+B)6Egkk_9<-uwsLcs%p-^Eu^)m!CyycmjQJ&C1&EQhAnUIe{4v*K(pn{v$qF);9M>P40#vI;8Dbl z``Cqq%VVBAVO*KLkSyceVfzsR&A=v6(GuXClvW$U=>ooY+LU!vnl3Cz7_<#!khy1o z)8r_Rx!SOO9eiQpdBM>Do-M!r@e+;f}qyw`Q-{iI+Fd^)*WSnI~z=;JfKq z!YLr!1`s$zlN%xPlBm|PQ5dc@i*5JP&@sWA*(jtw zTO$`?0Hu%E$}_RQvM5p&%#X$9EkXW)__bu7uJPd>zf6a5NAvl%J^IV2+I4HiJgVyY z?3IM|(hgXz2#O=ElM~s$P2YO<&+JvU6-t`~1tSNn4&3E^xEcrcOrO1g9p?zeRv}QE z2ej^>U9o+5H$jpNQz&JkaC^)8GHx;Gvj7H+z`bXu-mYc#Lxj?bZ6fS#8>Wr$3=L#6 ze(<4@z{p0uZ9@ya+WQHT*&#<2vSE|cD^Uz^!cx^pu2j=Dii}Fik2QGF4|@s$s!QBt zh!wQPL=a7gp=txB$18SSJWB?z{$L@*U;87K8-S^+wNG4Z$oP4THu%XvwMglT{SJDT zQCf-la8U8e7_NV;#}yke zjG_ZCDYH3#v+Tq&E=51c!FEy}#!05BIASr7nu;5@t&+KX5i#AgAs2H$wa~c@2mMf? z73up^w(qZ52I~%O_JKqgJuNEAYnz~~f)wthR9NI5DRNbPnXr}z%54dHm4r|+-c6vZZBfNF48RD6k{a{BUsJ@RAovdGaqE?bzeL^5XaCKr^P-3=L5LfP1nOBx;`g>u^+9*c-(6XZ0s{;i{uO zmQH>pvQxVN_LTsK_HaKUxd~Yw#Ubpd%Ij`RqOv9*COa5>^kewBt3bPqk#=!z^AU2m zm8d=SI7f(mW!8LwXBmh+19TvRc;`kzL3z|5a|$ABc{@+2MkfQh*+L2e0>^<3Ph+wG zdcbfpa4MzHaW=xR(&GdCn$}GLaJ+EITY_~(vCRZ8V$-Hgd0=RKK;MK{jgh;O4o>&Iw_5U9?AJ=JF2rg5b)`G8V;Bv`Az&>v zHhu`4g@SL+@vk`U!y0->W4N6aL}A&eSHV-y^RK*>HXa*%S{tQRX8;sb+W>s58r>mi zhTNb)x(}klHso*)B=Nu-gzQO#xG6ZwctDri4qa$5%*M3e=@qWfhyi0o#|7+{qVB!Y z9RMme(a!gNh*p-dG5b9Dm#XFEOcp7_J~^gEcC7eY3y@GGQLt3|jFN`l*vIYAB4vp| z6WYo<1&wk(OlboQ^W5z%V5$YkXu3CYR|PovnSYbjsSIfkjcgnsYRM=~feNI`;G&`<)OrF%|r za(1yQrbmT#S8k!8V`yWl zB>AXT?oZ@qM8}i3d?KPC0MC>d>wq`t0~MEn|7maC^LbE-vMT1qQW6oVQ;vDBa=! zqjl3%qvzups%HLx8Jd8J7_B_+w!Lu&GU5W{R(cxMh=V!fsGXy%v598I%Q80e+%$!%hkn=DX`!>L7A&iX)DVq`Zf;f+I zS|X37sX-17j67tJHsC5kQG0!C%5q}yH;W<=d==nJvp-N}3TFsWoB}E*XN?mlS`nm= zB6_RY2NJ%fm1yb-&@%WyY$D>`3TgXuw0F~J&}j*9yH3yV2^Q(>vNx+s>XA!+xZSc* z?z+1Bhr2d-d)c+Sow-k`NYtNw(T$`kvfdJTg!m6^>=7HUDsD%@q}r&jJ08PE@~{T4 zP&1<^D?RGoxiu@>@+=L|X}!5ZVxPTVwKlQ;DM_lc@B`B;1HIef_?BDkc=<&DqcgPVahvV^AV!jCx;((hLu%!< zwRp$L6!V#JxXlREr9pkv!VWl!zl!8%4YVa@YdpAE; z$LO;Rk?!TsT6yLk;msjkVP;b&5NeLNwPI12V4@2)IN?XB9%Qj~+cVaGTON_7AANp_ zjEE4!?#NRYdgP%m8MacWModjWiD3e372z{kuusVxUXCfMZ`?rJcFs8EcJv;E)MbsO znUe@GZHQgbZ%4ZJT*NZ9Lxk){vdFL5-!T9ZKH^hIJ2JN51G~?1HsszRHR-mms#IIo zyVspbP^d-vh0|-E1w_oooXm`P_HHJZkU1JAgwmbbd`u{M75Z(Dsj5avu6ZgA#nZAM zLYe*G8kaUEqps#y;$7(V=Rk~S*>%@tLhG{Q3sErhfF&))jMLU|gu$5FyGdks5uXo*VivU{WjM+r@^2^pSDxiG z#mIA>Hr*OYp)piJr>mnItY>#dR$`odAW*}3EIyQEFs)JN8llui9dn5TYrx2=0P#Wh zN1x%oCRqv>=nc^5Irtqj_h+n>3gy)-l*U! zwC_dGBMcB^MD-@|;|%$LQ??{%5AoK^N2$lc0ZbtPNC=XlLm_}SNktA2ILB3BFiS1y z?ed-0hVLD)ILMorJ824=_yD2@x7YRgE7g`e>*EX#GFq+%(Y;#o93jiJ`bjWa&~QO_ zygHP0XD%aDQ4vdYn@3zAkCi$FMPKA=_Vm0d8Pi_iA%!?_SpE4FKHSo!T^h?q{OnS< zE1$^!OO-Sw5^kV{5;cRK@P;6N(I%47%EBv1oSU|-cQMx4myoS@rVg9-J;Ds%C-r0sXiHi)4>ejdX7rq z=b%rSO$)_fe5Gaj{TBuwYn24TqimW89 zg(P4oTerT1CjyeN>XX!rg0RH zyIFLKv5zBpx^6w!QA%T8gJCE~N$%n8-A>CLPD&iS@$bYX@=}H_G{zL$`us;B3|TRTTW+oTWLZ@lEQ#{P?$U{l)v>805n7a3dd+IhYizU0*o&my7wroTsMlRnJ_9D{pX!*Y= zLNI)=@p1rMjYr{kMa==Yq(H5ytd(kbV}#l*=Zt(GZ(&^Nw?$DaJgV{RumE9N+k|aElX>Ye*);l@M zUN+olLVa8$rl@~d+b^arQ>^NxOsDS0>h05<`Rzw~b$^Ump9iC#TN*{3rwhq!j4S9g z4`8%4>5{0Ei7DM5{Ug50EyAV7YR~2?EE?yWE>9kfeMtL`f`wg`2%z@?r+JXAWC&Bf+&ND-=J6& z8WGWHHcSY9ti{T0rxX!Cbb!46G5eMVWu{!)c)3Yl=x70&QDH5x#B%uye8l z1x+k^z>a>>%o7My@+Zg6if}@S7eyl1!R_qD6YI@zwoSktgwOlXh1?o(62Jp|%2F>ryOu>qpK&fUwI+Mc?)mtsBE$iADu>>M&`+}~ z;pZJdLT=A7@*t$tMp~6NCN8&wr{g&OF!T>3UJd`jn&bZgj~G;ph2Z*s&FR#@bo~Fu zk7?pve8(l3BF6roaY-Ql^t*o!VxASnpu|RNp|+2c54veKr&{CKj@dlhtC!;vR*u*@Lf+bQU45`@JM$a;!q7myABDM1Ejr^K8L%JmJk{ zCO$&PsduF!)GSGx;T!h!oVj?2O|X@fIX+eqZdlnoN}8HJi0IsD^E3o0dUw+tVh?~I zSHFq9Y zEDIf&{DU+h^-78E@{ZFf07EuH4uziC$M zptqVBE8~)Yo;V#`CU#Y2vpm?=BiItbikjU=X^uPF*~J-@%0v+k*SO6Bby)_+tPnen zvYMI~iufmZXaFKdPlw+O)Eprt2vQHqL@=cD=fRUBTaJDK?Tc`S_9p`JbYptTXMQgw z>0VL^qv`GV!Mse_i}z0XPbOsV#+PqC41<5A0YpheAgyF8O)a)ZBP zP5pn(hySN>hMe1{KmPy3_W#$@(Hr^S)_(jC^s?I<>;vAU%ps=W{3g0O=RZYDqS4qz zR7p{eCRlkMWor$}V`XJ!7Ihv>jE|HMt%5$5*nmh*45#08e!bt>GcgCLerH7%QVz}Z zi=TNSj5XolT7obDnH3a5E?Ng}FTc;IahjT#`Hw@QM*EMkIXq{9^R_^@suP|>TMlJk zsN#voZ5LQ=0@VKv$<7b^@7O|T-l&JFe7j-%xiOXS_AX!8nYTj(R0yJi#L!X7O<-0H zk)0Lbd|1V!m9$0S$4K{1!YMN7?^agJC(?p8Zy-`4-$tV1x4)D#>{q07Lb~SYQw=S) zKOI1T_87i+G~HrvfATJ5sp?Ssxj$wuW2=l)uJ2i!a2dsC3IxjoP)(BV>6HkT(x(_S zuAKiAFF=1%fMCU90Jp6sLPNigyV^T3vTmcO`&re%pbF_{_X-8=X;C1h)q*?(= z6sVYeCxZfsrw7;-&eHqJpi~~f$5x;rbQOG%E{WeD8QnlU9zlafcPcTdsJ<+ip^LO$ z%V`5AH)C6ot1*E>)PqJaGzQ2I?{F)nS#k0wS0{jHp);$XIKh3LGMu4dF#jC}!CPvs zX(FH@X}lcms0noy6+<-f6x>*}&YJj3e5VNTU2^>}^>1-lZ_qn=oR(EoHcS>E*3AT_ z5wJEjGBv4B=m&Nl;c{r#N~naj1`G|xV+*OT-oGX3381xh*gq7|JreZgt{{@ z(Kj`6f5NgTMdADGOpUdRIT$0JCtd(4+ptOwBORgs8lD99kw6(~@<13H=?f$}4j9=< zqPLBPtpFRfVj3#ohp$v{tlBDK2r|lJ`D}L3By%C>*8umboT;WICg+y!0hS>^iDJT3 zaTHeYfs2W?#6)3TwLCa^hY23Vbbc%$nRFy2Lef>D;h8J|@9bgsM>G@2a2VLAJn)nO z;BjpP(}B_V;*>;_2rP$z_7QnYhx^iK+7Ea8pk!#LF$Uo4fs$xFw)}{pi=Zg-QSAFq zPK=un(n~-BiID+wXhw}yKNC)Rx0Vhs#5}l8s46ATL_DRV4`dX=@q5_WBdZ*#w519d z@gxKQ&`wZPTThh+QL_puBykKw(~??GZ*P-|Fr^iM2ROi0$J=$3nV=!mmylU7mVxdJ zfUG6-w!o5!07NPRE9OJMIy#`_`+-5leA-1HMA}Q7*~f&rDN$u@sDSgS<|d4*YD~So zX^4h_ICf|x+EE+m8)rd9Pz2xkhp7CXLf+_u-a%sR$wdUD&?P`Z0Nmhl%z<|A@=BM1 z4ud+t5H$laJ=Pc>BSIK=nc%eqS^ev{%lfBy*uQ2b+`yyE31VfyvtIs6C6&8eOLBvL zyj&4B*kR1 z&?NcIcop{w>e$3`XB3JK&+uv zF##Ve$D$I0-W_RKFL!A-z_OCdpPUu+^ zqT&F(I@+!P-v!d{hmfs+`jWU*N!j^kKt(u;;TUsRF{ia!tVDF5gui_o{9p4C^Jot zD0A#@+7Nu^Ls9|IswZ&l>u_>b5uW-ODjmR^Le$DhJ01YW&Fc=_euLO$)_sAdBc7RR z5!$E-8lisSbI>)>Av||*SSmU5+hGRTU>yk`tB#mV6Dc9Ei}n#8%t-RtX@kJ!AnwqU zQFE?bVE{)dZUuCHhy}`W8}Y$lro1@17c_y*9Y2klgZ3@Nh*7hWBMJcV4a5g#Gv-7-#Dm!(ADB~sDrK}?cFG6TOADf95y&^CA0=@RmKY?;_AD~Q zDL^uy)3F`KA3B(fBzB=7$X1z1Bt<9$qA9f#?uKXx-w8tzFU=`JT&b633~CV)ML_aV zNFZgG40PcEbkqc@D~K~^1t&%8uIk4aHEo=X zzUJjSkO`@oP2o*Z zKEyI4?$sgF33@iAQ;kSB)V8HN@3`5GS=;-B%HhyV@|%Q+bobk9tcZMAJ$H= zSG&qx^a$N@qK3dCY4;=?n((Y4<#jY7rC&(ThJ&Y!(YNeRA4ka8wNOmh zv7X?}p`r7Iz`xcr5&JXiC7?c*XBn-R3Y)y3`?h@-Rw|{XH8|m^EaTD$g;haSb@Qp{ zf@8X5o0XzGjw~w820d7$w&bjCK!>Cpqy^DWhsabAch3R3c zok94h7=#8|CchwP9pJ=GCOQ{Rs2(+)cD*vn9#DsD$aZjw4dP%Mz=hX)CvLI9*&QRja7jC?_kMQ6Lv7TcAO&d8&zi9sTp48BMa>PR3BFAW1P&Iqr^ zClGrfhO`3!%?8q&_yFOD+FV54_V{3zOnc|?UeGIDA$K6EVK9jg@a!Exe{BmL-sFgV z&;&1|1{H1sX>4KSo`NZ!khk8i1u~r|Z+j}E#3PB@oazFM`3A?(2SDhuRyXw=6Jc0c zOKU(v8vBLy=U2-pD^)#fM4hgzHo%-STivdAAL$h;%k{*=l1lI^ z4t0fu=A@s$OacE@IhM?DJ>P#7|q54a(sPGdI!n zPkX2poOU6=_a#Id8r5ReN9dVptU$nW;K*SUEiAjI<aVcnE ztGKpcwJ+fpr0{?Q&KpgU&tn}B_L!{Srq32BzX0=wov78^g?wuIO=QP4YoCoybvM}Q zcnmd8eI5~ik$L0Hok8LnvJ1#M-B=`EwN0~ zPM0!2<>SRXuUt@eSorAruq7g4VZZ$lU-)%0)@S#ueXET%^h$D178hQQ=^MG^5Pdq> zX0&bVG^4hw*RMx{5I+(=^y&Qzxg$rs7)1}Z?8OUE#HlF!Oc@y&7zTO+Uhea-(Osb3 zUi$X&K|vXrMj75!tJr8BKZJE|tA1M5day$YXJ2ZRrIgq~aXe?v9M-vB8{VDPPoNFm zzy!AvipoJn*cO@9LG+ddGfrcA@$5Kz+~tpvf+3Q zA#aD(DD2gc{GS8YdkR}B&vpxc2%#cikK$8gjF(?z@UF^}a(~-@Xp8l+{=` zs>;fbVq-UJ3N4*Lv^Fh&>ZWa$elJAcI|70o9x=lk5ScHMM)R1FO#9cbm+2hJT6j(+ zR(*y(OczokRTLQ8oF*@mJAvHMqv{wRU>s|43SLNPXcy9gDumUF7=2lVfL)r94pgFb zz#}j)rlaH3%o#H_%F5~k(g~}gpo6e8@Xgzv{vNd8)4+gxV4%KFTzB^wY~%7DKYp}F zC0ix&vbP!J%m{h~Jyszy_Jfp+~mM3gc zjgL|KFwL+cTE}3aYR~f#o&WUcH)AL2)j} zrMP&TX~iMdGgPX*EH=xUUvu)J`OZEAPnG`Mgr4VexK8bGW_-KrotokMS3VC^t8EK? z1>b z;doDIB=__Zn#@B zNu%(W6J!Hp<72scL9! zM5ulB>QzeWzP~>9?msuadlLlvEQ965m@nYn)p7QSl~o*ET}+tDh>n5triRD}y`8RJ?EOVL84!K)b_3a8lrr&?+iMfxLE?uf7DGHtTWNmJ4 zsFvBcu?sW%{>PLR6@Ou35TnioBqt|N47sFoQhMBt(084_AzxA6v7R_PJIl3?j*rW; zgqGd{F?y`W_S@{K;OAgU-|j;$uc*kAF>}@|HOZ2tXN&NUO4F#})NkMH{Q3LK`tPz+ zW>v%+$*;Jk^gjK;gXPRJoPVUF{EgS#t-I&@(V<{YLqd4n`*f%a?TGv=9Dwa9k$ZxLNl z>id;-94R({5g*hmk1#TS?d?83K4Sp6J$!sV_Wpgx-=EvTy~D2m3H(U9dd2=4@Kx?< zbGbTMz={Oct=qd|#R^I)&Yq1;laCOe_o5VTjf2pSg`qRMm%|)=`!)Jg(G4@@$hK3Z zzc5*qrk>ZYUx#j`r_I&$E-=&+{Yi1c4!dsCh7DcHd2LjL;#7&{)j=V@F)(T5HlQbZQ^ z3{vR~7&)Z^l&F9mH$u}#pm0Z|)ipF80Qm_=$dI(vzYwn#g|@b|`hS{CIhV|y*^xbG z$ITwIKIASKyKvmhn==w!=&`i2G5Y6I>2DQ6bn~A+eNx1ItLo^mA?%Z9O{73e)+@x3 zzx?~>oq4Wv3H~`_d;QrfNJ0~>nhzj@lpougU5g2VoX|tNxwSRq_U(B_hK3u3gbLqh zf_G9naNrtVhMI8^hMvLv{Q2{+w3wLKAkH0p^}fqe8yt=H zAi0=G(3}u={6_H#@UR&=<9sE|eG$io5dJ!_7S277h7!S7(l!F#zpEXPC)FmH+(lSR zMDtT3lGdC79NKt*CV`xs!1hU?n@kq^0oDuarmEm@XHTqzC=ZV%(ooFxfBF z<@`l__D#|3pFp|@G3A)dxVuKi#-^ZMT<_jh2bM#g)CDqkD@`lGu5d3|@&wZsbNw`s z`{CxDJ9oBL-R70nf}|7Fhc|A3;LumEUkgY`r~y|j{cCa*oQQi@{owF=g@=-=z{2n6 z8M0oTc#F)sGSlHwqGgjFNE&4zyMrj{Jf-wOc?)s3mPW>LCnRlLs9j$farr>A?|yBBoz>Wm3U_9~H3tLW%lRvQ01Tzq?K zox2Oz*+z&F6_DSD{r>w8m%J5MYA>q-J0#Vr1CEPoL2-yxn5f`=aqgzt_(_0hMs2t! zZ3sP7kjbK*m<_B$i)KG`dXHNRym6}yzzRs~0XhywFVO4Na(Zv)qRtMS{`^Y@GW(|(4A(mKknF)I)uOYtk>2%hqd zU2qbqMjLF;IHqqHa`z*V82-%u;o&MEG3S8gi{+k~R)s;tQ0(mSSAE~!9*XJ5WTA!* z0+_EpIy%aF0zEsVK=NpB^JjEtsIxPdZEyYPqnOhuo*_P;H0s-?je-jC+H_e)5(+1{DTb57rD<6AD(&azaqN8S9n=$+ z#1>;3q4PW1pO8TF8;{OZhIDNS4^IS4I>L1hYWl&Z zKt3Y;`E%+lbZ1~m^gpWBj#9hc42KpEMxsT-7_0NIY33Xes}-ec|LslunX{{2m+Q|r z5N{WpV~Wq)OQ8Z22wvSvA<|Ii4Pv)|Yd~b-#Un@VAW7))kbL~;QALRSGG-ZU90s8) z_Vz1}HQ37uxI+MAcDAOgE?T)#@T1Q5I@gx=b~8*)^#1rQS-CQD{z{2=S3*3a(w5^i zMANb-H!&R>W4WcbUTv~P-t^9K zy4bE=>18R1ex|k0!V&-ct$XK^D2hRG-LqKg?4QnzO>5WgVRbi{iav`LGcYiq5*(y+ zOl)kdd}C-t$Ek0h%#~eJ+!tXw_sOi8GxH3^KB7BzcsvJM`C}-Zk*HW(TN@^78O3RI zoBf#ZZRkB{MwB56Z?hjfh1hCllxkYLhmG@@$C{=l^sk#i@)nN61Ya3k976S50m`lK zndI#GJPaleP>oEqWzK2GQP;{)Y|}&;M5*sBrMG&!i21Y%IvH59*m(M7fHTlr|(`Z*kMM;KB9E8vlAI#fCG#scNsAp|7uxj7xC+ z`U4<36b~J`0UUk~4!ap084xkqoRX`IHAWy?Z=&~$>uF9+hxy?QnJD>wQSwaN8a@myPzP{YPQ z36=s5VGq=Mn{~?}R39}X$q$J=K_(=#F58ty6sXqYgLkX2zzS}!ytc+Yyt^rfm)FQ| zPMu^-v_@P`xHw>``O7!&W<5i8Hn(^R463J(&n9MPQ&yJ4F8n$R>JIJ$$7k5!|Ai}A2)`6Xao5t!bT zRik=&oSweR<@$Ab)`C?#esOY|vc5$97ocjRaiqypAarPTe>2@nj{7G60yIffE`NNPes7J8&zqaQ=vS^-^{IG{1KAN`7HJZJuVN}&<` z!f<`b^kUeFc7Q5UH8gxeH3CFvZ%)J^O+1WgkF}$O4J2~V=dZ17x2?eH^`1|l8v_8V zcmMuKB5b_8WJlu zs;CYSZ;v@bAbP@NDcN*Mo3_J4-8JRBdQl57ES)t8p^&a@VxHqTe{gXPX_=3C>X}s7 z2TR``2oTgZQ`u~M(t5MrSk2r28K%dZnbd{*4SA>$DV09wH259L!%D=CYjJ+_|enV|sTbW?0SiCW^gOWTiSuR_F;Bku>R>S?fC zY~Gb4h|fW*dN*)!bt0qXVX`DF8|!shs>;!f0=^jGc4;ccv3 zx75j4Z+4ulb!}657PGGSi$b;5=el?*JD+PL9bwRg$bui8ov40tK3{Pl@+umUbM5@gw=rN$hX*`MI$Q(keQT#DNTeZDjEq#eq&*7 zRa^!}!xX871!!g3fk4_n@e@Rx4wE{(EZ~QV!*FmfMMfT~?=+!`HD3;7`KK7kw-AQlGsrK3zI?feMqnjm zHayby&(QO=Vdl)4A3^!4Ve?Kaz{ge=EP7Y#bXxPyjYXRB41Quzkmq~rx} zrFN+H?!?A;uvn|fO3VU&{q<20>_57{LxZMM(**o)0AA3uhJ zkvB!1ONm#_ne!Jkv5#CmylYB2fbblbeoF+lKY)O|fREyaQrMBLxy&4h?Qs1VwRs zJC1jq>O>WWOloxWSor=Ee`^6oQ&Jwu)|ie#`UI{BD@AKvP9pB{C>W9Z3>2qqor|`> z6U6+AI_r{SP;P9y{N*h2RXOb5(8iMEn}@$Y`@@G5*Du-7nYR_{e?fk`Gb&JY(AKd~ zdhp(!J$uM#1+?tZ);5anaA&{@*YXLHKYu=HBGF(ukE~-llvD;tS3r_I1OkXTr;5!E z%-IJPft0N^zegsuKX~u}M{8xRcV{9=%P%fYnyv8@5AGyl$lYRY#F1MVSgGrETcW_`lEP}L#zM7eibcobkyop?DI;LOp+L<;J`hYCU`S{jsUiA9bF(efVO>z3#+9@?VpPI#{u51qE@%67z|d>oAyF zYPo-53t>)d#Afdwv}W9n%rU2R)wdcRVc{ULqvoWYGMhVWZIY}3zMGKG8+o?h^WdS>=~d8X3m{*Q^fy$(Fwhvsg@K+UM7d8VFB zwf!@ERTd`%T{8f{l73jR(ljwOZY>vAeE~90)Z9Qg&YP_!#0KIV!#IsWXu-l!H{_&n zPjok;hmsKva&tJ&_cASnY}J3imrxW(5OMnvKnF2Agd2k}zXT(W0y}Si5BK85>zHGB z-w*ZLTl>4tdjA;x16Sum+27YWP4@BWYDB3$l+j*mGk@~!DKQ`5D=V;DlIr>H>(-ij4?( z7CVWk2S`IuI4O|n1O)$7CxuLMnfz1WuVBE%=y?~nmxa>EL8%KZn*7XEptcW*?l|iu zD;Zby^ErL&5ErPC^W$2>C%{i{77CX?~n?UvJyvJ?lZ{njW zQK{+J%U}#(aU)OEGw5UW2B3oZMMbt_cBcIkgm0+-O{;c31H3S|_+wR+AJ!m06aC{^ zVH0?(+5r01u9ORUTwMM+O2g%w887Z-C9jdk`_n)uOPaDk zxPKaND_}blyQZ*4>~81}E1(3ULLVsK$x7?!|9%QdnnT2?1=4{=1i8ol0|)ZYNFdpf zhm52eTOo}a!i2D9{65s8X<-u!`DEBFEr!f8$Z&{=7eDh(k=25ljp84Kh)1%bBi_h9 zJ2o>=;oip%iA9Dp!Bw{_N2xJ2ck;LM#8+)ri=?E-J#qcg*<8*mX&IwVrDZH%Y|@o( z59f<6e1SG+)Giw4?U8vS1R?6YdeQJ#t*f%kJ&%EE4jbAj@cTU2PM+8_6d{k9=(2+# zdl2e#oqoP~q!9rYSPn(!BhVqIA*+xCL$YV@ULy%Vl;aYRVC9{zw%yXdut#MwIJe#! zLs(z5bk={P?#<(B&j0rDFf(SD!3^1#S&pp;QIsXjSWZOZv~OskWGTmpHZz0y80(=@ zNtUAhq?}Sxma()blNJ?XlqeM?wEwQ_U19F;=W&1U@ArOuACLQY{`fFHb=v6 z^?Y8}^}L=6(4!G|^n>kMty4GLC30ZGXuCcGshWu_y*Xh|6;|qsAa*k_EftML zh*UL<4Bc3bw0ARf;}&nU96KKMx1A^OxIeC+`ud0Yp~w#*MmYi00t=Vrd7zdHL2^n* zaIl|2MPpU#`d?5w?CILI>#?m;Y=~6@cYTLDg7}9%%dsjd=?_MFAA$q|{~-Rv5J~iI zv<=>~>i*ehDibHhTulT#zC>#@Z|rP$qkw9!X{YmhR;@ht*1XX4^e>Z!EFal4Sb49O z|7w-`hi{5jR9r~RJ(ttF*!YC#he?w*#jzaEy%N#|WpXf!xy>fuwNG+(=w{a4@cI1- z@y6r&@7%S^0kWGt`}c2IZCgg@9>qM40v{mkX|KyiOzyKrc%Hcf_6^1aFehZp7ex`l z=3*ZmOS7!)#v{F(U#*)SZE#aJHU5(PMdGQ|@$RM8&CLqs+hJ?07N~7bRylTVfnu`7 z*7pL1*;RHucRVdC8w>cs)zx)<^s}Yq1wUE0Q=YlqJNG#*I&iZ`pIjStHc>)9Cjr{$ z*DI=emBJJyK`2C+aB-6_E|>gkqAHdi4#SHdNKCJ7w%{O4F+ynH=eq~*I*DwLq(rq^ z`|7+L^3jiKXHWcc5YUsfU}Q2akckz+*6U(M4$y*nNR)|gVW^QM3NpNATL2~${)Yd_ z9TMNC5}I=oc959->7*En|FzsbUU1U^-ea{DgjMIus{#uk($LZGZTwAynzL9_JAeD_ z7B+H-RJnhDA`9D~WlzuD>`~SJJ5uEj0;k!Rtb6|EQ@tf=lWvFjBHm^#G z@qOwVLLQ)$EB*KeJ{{8!wf~Ege}Ony1Mo^Mf)JKJ++Y&5b$__k{!A*gKd_r89>#q7 zqm#u_rw7JB0;^Gd1+5&2^TpP(crLKFwh6P~ zWK2o`^2acr!Qq1~N8akOqPIs%S4H=>WL#QqZ&B}Mwsvu(3W%D3^95l;>l%GM#1#C! zw5CQ5Ar=ZN9EKM!juXCY#onCnmKkkcCGBS^UD31S`_F0YBl#P}FMir}`}T`W>MKS< zW`NC*j-h`{%J9;6)atRP=myw~iqFsa^pg8jH=3Hv6#g$IDH2EXgZK_zyLEd&Uh!bR zfdj{QdV2mWI3O#{j*@79>#*HvyJo=cCB4rbA7QC*zn0!mKC4YbcmrV-d4pmfDe9&) z`>Q84HA_dgdt9si8o_G4J>OB8@1?Aa^m{X$Ax`W9>2$vBWIGLhVQb#7RUnHGv_ zeH_IX7vbH#AKABmi0|2?xse0<3a%2^9da}{0$Lo03l+Yl%Hygky#ei?dhFJq@ACin zO8$*q`~Ij`?qWC%2gZ|XlzFq2UrrVty;sKaWhY)6eE5Fh`;}CO0u2*#h7&#B`3Y3$ zr=_3 z+dgaPcK)u`{nMw|Y=~Fxf=`SeAFO&h7?)Al@hM()=41Xe)jp<;pQmC>+wEP9CWwma zX@YM8J|;cy%tcXFX#L#n1IuR`#pj1wXWl5aPJSJCdeQ=y#UT%iEdz9iP4(3_Y+N~{ z=Mfvxs8Q>Ef&njRUpQY&A}+)giCjx~W8DL4R%F45_(ltGu=5LTGmKDNeT!2PrJrF$ z-mLWlcU@|7c0pejf|rL-;=-EBem>?*qbbxT#|1 zy48}x4pv>Z8w`HuD|GF;9d~mq3>T$N4Y(a^oTXtk$!~F4zU1}r_Ma&4O#kqop zcxU~2A>G2`C#s&52%qZp$48O!(Kmg}+n3gb&7*#9U&HO+jsNS_xbuUYrsJQ@)0s;6 z{(w_r$BrFu-ipOyCTFYXefTy0?a^GY`2YMTrT@CT>%kguWQr7WoPbm)A$N1qTv z3%v~s=To5Ie23_`H=f@=RO?h`=3;c-u7Ow>A#8o3^ z@I%)~uf8ZN1u2rvz+J!m@(a~1U;z!7`vJ?+Sbu*S4uGUYgYs!eu>`TtF>u8fLb2dK zdd+siGurqIRjq#Z$Iqos{qjekn}api9R*Gp0#FW!Ye?p?A_h|F(@t2u;|-$iNsL&4 z^^(4Oxe^@}`mj0j5wSh>w&b5*S${ItOL!p!wIjs<-Stsp+&BNH%0a0b4>!~f25A?A zT`WvoTwEUfFF#R^W5O#b8r;4t7(I(9l2bF!LH%q1Vqf3QEg4`%KWK)*cB=v=#JO}A zu(0a=sgouxgVcCA;20W`){uIHJTqp5bpb4E-|Wk@6C8L>?DNo}E+-WK<~g zgHoDn7hQs7t%{o3mJ1IjekrYaXu-Ec^@s0^8L?eiAF z&}lA8aR`-`o0}h_90ut^$;xREScCzwjLb>OXmFcwHVX|BYatGR1PNZD_Vz4yNnnDd zfg$Xu?Ou5kzhs$Bb+oOz-;uz;D3B7*;2mkex2>-T0sc`5%($!qbaO5=wCHKt+LX9X z+MbVeT>fl5te1_ypk}v#zRvbWyCeg$sn>8?euirt=iV05aDDZWsfQ5C{^zr!-dI_|gImGT&`7gvN1&8)cDN&l6vKh0X*Wl>y_`dg4raT*_2}6X1N|TeM*|yzXJ%$D z#%-O1k~0jtb5gia0ae}P&^57uHvYEEX}bp~8`~RdTRbH1kljHen4^Vdq&z$T3MBOA zt2S*%j)!~k3?`j0PM#SI!O6pwUQ)R776J3~&bO#2-yS9fdrSUD#^W3+=;%z#1^b6C zgNJ;JJ8m(Y;UmZp1!zVs_RWKm#R99|026F-foNlo9BFbKEylLIi!Tn?sx-!lABm_yDkZTastrBBCWlM=L1$K= zbLlU11x7%y{{VeT6?e}b00vV}=~IB`b!DS5+S;ZkPo6|}DFIPEGR*ueAoG?LXbZYX zodDf-p+!3jS}79Hg##poWp6IsYpBNF9xo=&)tD6Sk>a~;mRX!}^*MtBzpw8oNamfe*vaC=Hz8 z>S5tLHmD}VAwSYDSm#>Q0B2nJLhS)IQIS0(MYwGihEDIlApfF&mwE>t^=r|s4vj;~ zwLTHxUeUxbbGPF~OpAi91I;2NAtDr87VzCNkq?zIq7^j_B@(613`b}a%~3Kcyfs{Ulbl)lLzOsU>@JLD5xh%ZIr zE?v4nf4ix%xhPnBR!Mp@NFrobgbAg9nyfaqLdqhfqNj{o)^Orx}nJWj6H^`tNY*IoKyr$T=3ti1~?g;GnU# zx0$X17P%C1hBfe1@AdWtAi?UCruEnV{PW15xA-NvqD&POeK;p4to5+i6o$1&4g{-Z zq`0l7twjgg!n2DP=9iSDE{@TF?40`{*k#zp(KvwA4i1AH4A|Y-d}5g&UK%@?$A|xo zAes-pPy??0DxMFL#wSoTX2BA>GK3RSv~lgq64Wo5kY7rT)lQp z;nv^`?hQh!d3fMd#z4#q5-ZV#`v-55gDpkK1gbk6U}L~qwzjsaj2UwW-ci^{61bI` zfg6)=&Vo-YIG#59nye=gDmBeJJg=sF^64kbX6u{WzpVWBtH1s-41T1oCaExux;XEz zc!N2P(#`k74c9_as%`4H$?^KI^HRBK_W>&3{{6d;MgEvRwN2N=H;yWGnY;eZ+ot+- z)wjp%W|X^asCHd1+pbftwIC{Ii{ssjR=0vb^`<^J0;_S6VDJEc9#n#Y6CFCi=~RhS ztsE5OE%*@1L^Qs}e6FJ$$#Qe3%i><(y4cW8ms=8>5aZCIOABdB9H@2EsP}-)iG!aQ zo7hL{{;p8F79q|-BNK?JQ#r9<^>GqEOhfW^kgcY!I0RLrf^b-{2lAM6`dB>NrF0*L ztITLudU?~<1aXySAuDXHga*-6w2>DA*}03OhmDA08C${Sm)@ANAG90;&k7t8a~M4ziaQlc3E7!{`Nh!qyw?32n-$>K}PhA5)f4Vh=vka8+zUWSQb z^c)Qg_Pms2o2OX&GNh?2VTjvW_iGcPnre+2VhzQ6z!uldmBA_FlK*Z)iR-O%vx>lo z8x33)Rf!I~ex`b!slLVNT9yUthIUk%NbhK)H;L%C)E9n8VTMTCPt%TobL}Vv= zfs62JT=IuQ61O_f2h)H{!TTe{6FcQ zggi+(=}Z2r@Um7uy5s%oQ1a6LhsRgoH`X6Q-H9b1Pe9W@`vGP{O}+dBf(CG4?1zpL zAWQ$4fF}Ki3)cVgaUrHCgH$(v0Ziy!U}wb@`Nt>5Vfk=O>1hG9tDA>?r?9^A`!0sz z3e4@C3(_OktE8~wqAn*b^zwEfbGcKki&AKp)VPlN&P#eoNi`3mjN3etpQ$T(Dbreg zIffbIKRRB9eoCqt3QWD@yGDAIahDUvkKzzMOvs8aFRA6}xdSdIokWcQ z5gB@DHjzMm=B)H+NIA!)ApM1;+Vq)0`_IFP@Tiiih9M+?*luSK9_eXBQ5lQjIoDn-iFw*!N~cQZsFu!T%f&Emsih}2we|DkI6Pakm@S5*7UOKL@Z z6etB2Owd+9u`E8hXw_G=_F)@3rUa-%_=eW(&^wSMywrG)nOt^o1hoTWm^j$3p1c#H z{|9MVHc3%(0sNU}9w_~KlH+!Kzv7I?gNMvSpMuFV_0Vn8V^ol#SFaXy0HoN9rNT(K{6GOSILKj&O`-acd#~g%L0LRPh zgiV!~^w@idMk61E=482yCLDCy;PZ{V_WtXIo62Hy><+b4$mIUWQL|^bklbS8^*iR#oil>;g z-x1@pG&Di3zgf_EU95^X;{czoMxVMBVm^)F^F*sJdMkOykC?RTCwfZ^POxu4x4kof zurui28HBkobiSSI`-$`vR1AVwIE0VuV$(*6Wq1%}IAhYWnF8pbgXf~U(fe}IM%ZE5 z!G0rjQxiyTRpdU+ru=H59kDQfEZkZa%h>RXovQWh#ILoxb(&9JmUPMO4QbBpF5Qu` z4w|y&ppvT9cCK!y1O1)i3(u@7#JP^$I7NiNP59s7MQAMTIB$ z&h#Gq7w!V!&am3*G7pbHgRF@9!{R&rSArR;D8xs_m~o3vM# zW*&QoP1i)?n9k&8?E{(p*7!* zSkdkB)J$M&K_XWqOcCvK7aHYrPWDvF-w%iAFNe>V28)X2aH_Ldiv>`X1HT~}Pk$N? zjii#H1u#eYSwK{3*eo||y#(j#o#?b0;{|gHkvJc!ysm-u9ga&$)B+(_A zNq}rZS6ZChrhyWT@sJ+Lb83JCM1P(-eDj?-TELa=0`7+xyPRg}&~?-{m9)(g=O6$d zL!KuXiJ_aPoM|2{FgRO+Ga-6ZRsve0%^VE`kvV7M_RD~Sm1AeEMnlO?T_;MQQE^Wf z$D-V}2dOHFpNb_o6y_p{faqLcoNc&m2C%!u=qS4@w@T$mtLMl=A#DkOaQ`U)q)ZGQ zI)trfSZE~UL;;vEgkJE>5sxl|J4a=Y5kvZ!Vp+KGk<WLm++M}P?^f( zOX#|Y;SXoAy`RIbAq%?`y#=F@B%=$tV=4kEj$9iw%1#>4HNXWdknWl2bi+;Nw3&4&4Nt`~2*86O-{Y1=N*1&Z6Ags1 zNKZzzO+&?>hFt785M#l4aa6!M8LjPk_Z3%;l>X7@S#OwqQl*b%#gBGzu=eA##D-|V z{q_xNd0}sYG$*Qg9Nn(yw8Lp(G8?QpW+J>Iy2ERs%cHIaCY&Zoo7ZAwT`kt?4=6i5 zn0`QbRtmwU{q=bIMyqOEDdMs%r~MF)2AK$19rX&VG_X}>bRV`^Uk!GHm^%<&)Cv$O z3-Cf94)!y+4&{uDUtgA0R95~OzW1&FG{iP_EPTj`WB=Yn|E~_$J*VbCnmH}wR@sejE%P-!PUYI$# zC-o0NKUR)yt5JA;_j%0RE`t3Z)bht6p%ng(6GlJeHtysx$k#csPw-(vSllB8|DDF6 zlsNlF(Rv1xHIBmA&<22D0~U<&t6fEK%Hy=ia*SDm3Fiz*@BCNzue3$wd>f~gN_7x! zC#}XJa$|v`Jw;Q(5*&cEyW%K6*M>4*`pZe0=0CzaF#>Y-0d3IG@+i!b#CgKw0bOqX z8VwwR`0^{5Xhd)>SOcC~c%~X!q@FP%Q3SKzOGC`=2|WI%n4))!=QZU}E}4@W(w2J2 zXgf$_IwlqO(P={4eIh5w+Bwlmhy}aS$HnuW-H`H!aFPj!8(Pr4quD=GkM;x_Gwn<4j^j*dKzm zW;1==@bp~Z^pIQr52=+(K@zH7OvbqtQP!&d~;BYCPJ_oyqgx% zCYR*~M;*~r2r*<9$5S51+RY4{o=}t$p*~!uG2$kD*Z3eg+{+Jm1{;Yt01>CLQqI|> zLFSwPnwN;75fQJaV@QPHl1Z~AECrRhPZ)mD*Wv=fcR8npVV95p^E2`Fe~r$luy06ND&IH~>;j4C4o249D0xI`D>s5cV|fF7z8V}9Gi?Hjy@gFnt4 z{Z$VOCAYrVr>p6g#*RgEXcDn4YxRd>t|9jw6HZuNhW4|Z$?u05h#W;jG=_81AWpFZ zaFd1XmZK%gsuQqwHzdEBf8FmM7Z4ufvRCzaQ>*^ivq#l{31=YGp?nq-f|&`_-<1cPC=CQu>eYh}!;_$0bb%7cs9DDf zRWO!o==Xm@W}0eRJRmX}8^QkcK26i-MtDzrEkLp3;Bd8)D`d}02N?mg225@_iuw{7 zRc2#%ofDSLTJ(e%5^k_Pz?8hKS>{$&qa9W!BYBw!h;)(6+&OJzBI1fl%a|tjnn&T(X(#(*z4jSOc_Q zJf&%_cVlG5*3f;M=;OuVeO#)t33i8vLx;g(d!jV1wX*ut5ZQA5`;0S@#bs$n0!sHKo_c1<+YSJD}I?8WLaHepf^EVm%IsH+&5-XLtQ?5f>MKhX? zf965Tq4Wy`55eKh7LRRz;k5vkDuZ37tIP(S z*{Fl`uNQFbhP7~@Ad0Q&%v;dVe+=W3Z7@A0jXAjvJjhwD(+NPO%YA2#ltF3~c+B;w zALkdxBDs6YVo#;b4N?3=^N%G6f5GWVxVSN3{|#C8VQ)|Pd5G1lIj=J;arZ@HwwPJy zpc{0Lsy|Mh(>X~T+JkSiiSMmDVwPti&oV?NTi~GCNb*zfHyY;E4$lTk6C{$%ov8mg z;8QC+`g1vQwAQ#sRVk7SD=0a6kTPyi zAuA}}_<0+X?<4pNp4B*UBi~$VL+(cpY_SaXgsVahbTgJRN)mc0{bN%zrnrW$vMc9) z;blN+5VhwG3!A7nZQ(eL$^pEj5lZ9Mjj2bN?KYa?c0!`Q#DRS!6) z5>2~jndG3)fpd*kge&f&o|WO5rOqG0n(K1yW@I9(Ff@8X>I|MM-kN2T1BanFZh#-c zCEel)IGMDF%{GIW_@gXce%%b{pUT6b}L$%T3O+7 z&*0DGq89XWB(1t}Pp%R)WA(haJJ+VBA*1ufD!7;*Ux379PjO9h-4dn)Do&hJ#GNbV z_%A*O2ArtZZQ-?j?VvxZoa^PiO%5)Tb9p&Cl(TIka#7Bvu%Pgsy3er~qJRLTN72ry zoczRTR`iVJS;w62D4@fq2F z&@g&qb1HTCS26nsYv^)LotK6t3{?6lE01jW+x-`1y6K|_LWVFEbE8(w)J=nmxpwqTLB18vk0ppWrG`WxeXX3?;>xjZ7* zyvHF95RO_BTk&M2(}5?%HqzQYwa$Q{@dB|7Y5r66rdWhHbyche*rdD~J~{Du@eQ^1 z{wVnUfT>5-6C$48#jqlTV*xS6Q7`1>S`27u{ORL+^u(9pkYQy_r06wphQyKIUg$YtMFb1ez>BXfv? zVWhi`U<2)4U;q44N=0Nf4v~NvuFf(WxH2xrRqV6#9-n}6Qy3!wzs|Z5ZLdaXVJ{2I zfrAXeof@q*)Bl`2L#^kIJCb3&9k&nl?d~{w$uZ-#t_>|{jnQC$`}|>7Df1xahO!Aa z9AGEN!RoqBtg81E6H=ODSa4nkSNuR@%;qloflS0%ynB1zN&hi&G)h}%#Jl3DsKCt> zkMjV2mMw+HylI%L9w$I3CoDw@0SL-y?ef;RdwAXz!DmP&ie(IJK*lT{7vKr&kJexv zcAFyuL}`2u=&@9eXW#5$x3A|HqAJbb<|Jm6KvR+kanrQ=%Y(Sp*{s=-;?V(Gobq{$ z&u)88&Cm{0%t($y#41Q@JrTbSV5L}w@#ZTorle%AN>0K$twN;akOVrd!g=3wU%V9a zOh$^?Q-+A1H{UhJ)WNyg2??BXsw0h9MG>=xJFFf$0@Kpg=7v@z3s&x&TF%6eYAe;K zCID>5p+%=pKa#Oqx|N?8J}_##IVNbl;y#WKlT8;M+8)M^U7kk#Q{ov9-W7%2i4*N2soGb*04A zh_GNh{3+dwwUd(*;0mqnx;&-1+YU|ALbD*rbNM9rOoktxH>~6$O?JFt@ZSt5^))BTYOyaK*XXz#0?=6LSBAP0>*@ z!b}zTFo@$5gQIK|7SB&1waCVZ_a=5|f~5-kd{>l^M?vsWav%N=oCJ8-?bXj&5XuBX zA2LeJS<$R94T5k|8oF6d1kTLS>Cx(4=3}i_zOWhiPManosL)nyY70HRKOM5byMSLr zX@pT}#JZ}5>ynv9fw_ww-;sF1+B=W_IB*{m#uA7RS@qh4LQ)k0t-f8*h({sem{nP?Pk?+0mbUW0K#=Zcy@x_afE!*>tC zrlc7^v*p3{uGoRB+c{d1aizd{r`0>;OMxgypW-dEIcorcXEb6(Hiz=kM*=&PbE^fU zxP=$bHNqG(fB#TFLV+MoX@oAb!6{9T>ZrU1tXNrWmv&kz-5AX_gGEIY;dS^grqa!ENsdQXf}?B2I+XXF+rdKc49?% zL=M1;8Q@ry+ivwAFu4tRgo`nHVTOgbdcq!c+%t^^$|$M&gS3Lh18|sUqzbeC*t7; z@^N)+iAPfiB&wu7TCs1+nC6p>0tYfm49oAJGQfCC;HLxugfG&j@5D4^PsVU7-s)O> zh`io^r7I9c7t9>T)j0Kq&Os9NAZr0bV)wx&@kC(4~bIrK}9n%3qnFCyEC^!c) zBTUF(*rAG=ZT4{#k;=1J%V`h{;GiRvnm?dYT?nA34it=P?^*AxY2AEss&O~|3`c0< z6DAYY2f;#p&z^dioC$0u$08B?#xLJRa6obQ1AN++J#?$P?OZ>R%5dQAP>+fn zKj{FZ4`1Krq2j%b1AQ_XjZx$+sS8k7Lb&)vq6%DD*)P}E&) zaIZ9@aO$uKm~s|D4wi64B}29mqTmMLq!*Tn)N^4bQ|N`E%MuB10P$SH0-WR1Q2xqM z#gZO{{1-Xs#TD9d+vhcXdg3MO^*=;yKMz8|4gJS{OyZix^}GbW*q|)q@087sdWN}R zkO~a1_4`&y-;6AfD2Aa?FYR(Tv$ZaDo(`UFgcXoki%ixdISi|@G_!EULjO@9Y5wpLtw ziym%{mt@sv`4t5LI~2ps3KvI8hgp8=CEYhj@Jp}QHORO@TfLiV-lT4-xJj9pO;6Wr zoLiE)@Sb&<-U*MfLI0{pl_HN_B8)%hy+&4~)5S1foVU|>XGe1y{>}Qqx0lnkX`Zfy z60Z*2svRPP7Ha3t4mSSKusee2;T^^j`=b)RNcjn0D_#ZGxShQ-5`Ue2$@a7MPBh{F z`9IQ3eXNyuuK>Z@e5BtAJ%n}jZ-phqrvI(51W9VYf2TwtF!^tPfyXwAm7Qw8Zd-*v zIcc8!y7jR4lCs(RV0D=I?{qQu0Eh6Tg)U|XjCCHqh=8C5@_*rGfDKP$2E%cBNniG` z0jI~|)Kp+8RZjcxLxmuJGXHG+Y6{*6^lV7G%7^#9<85NrH{$m=3(O8V&mw4sdSIaG zU&xrb)C74_2!%nNUGGYl9n5eQoU_JZR_MuC3WYw~K9DE$OPZ2@84|rX2*pT_;M8V^ z*NOc1k09m-5qfY}7m_jZM*jzb{U2T>A6p6kcO-M2R|kCa|5l;5g2)|Smy=FYMuw-y zP}D9XD_;=j%=`(b59dBG|3P#dzgZml*^{8WmCc?r2ew7_deT;T<(<8BU>jJC4!xgh z9?p51D4`ikb@SNBU*TtT5H}7<)u^#*YFS{GeE|41e!G3xN|+t&ZIcGP%J!ewTHtg; z$MNdB?yw2yQ1zSylz$d+7E4Qhs6#x;gBffR9-yjq^YUW+_U>0pohG*y47;JDxQ*Yo zb~S&3ic!g{%;B$7JA2Db99g*GiS$eQ(&yScdnfhQ%BfF+6lw3|C3`*dM?D!Kh*Wqt zPnaUUErtH>WX2=MXix+A&k36cx$S(l)M8?5<>)6tN!HB;OK<2%ui%3oWwd|I&{Mc~ zc9y5II8z6@hH;w*HBZ2g+B6qTz>nf{toC|V$X@kUnyuBoXv5b4nmM`X(U2RHj6Aoh zg*xs}Y`o?&$HFBuZ^ZGQ75=MxDS7=QXu!PWYXAkn4;-qrchvd$nH;U?@+4?3zE1a# z|LCH$u>IS-+k-5$f6^x@Cx>p|S*~?L|3Chrq}1L4u8+r|*TbS~iT?geSL=rAkNFRO zpy9XU`hu68hUjm{hA}rSAG`J%)9*k00Re2g&}~J|i5&@h$9(x8{{N0&!jH9nPjiX( z*Z=jJ{imuleA&sKUK*1?J93V&@>?LVfhe(+V?bbZysT|ICz0?UX8&)rtvd#j)rb&?@BVIY>Aa=F1)fd$a|4L*x-xDScZAu*#X^oT!=s%R-u#I+TX%6Fd%4B+gw7z|kyhDVC7>%B#PL z(pXGEg>G0_4S1gVE6(ytgr~Qv&jyrvS{0$EW04XtOI-_|h3XN?h6bd*oA;1a&bFcd zF?EtL-mlGFQ#L^Z)ml{SIwW?&h(;)o&LY8e1z;vHi-bRcH%2`01Qf^dd}Q_Ef|drt z>lma3tfD|9I2u-NdVl5m7e6sR>BYdrQFR>5#=oOhvxR*AIn*`i@AF1+qRv5n)PxjH< zQD|G)#+maR4F$l}NFAk#$STu|PBwOE1)&;}DyXW+=!gm;1X~&`w^wnkE|RfS;MB-kN+j~*DIyZkVa$9|@u{zVFdZ0pgtzHoqH3_q zZRk-9-Xl1t1*JS$Pq7S{=v0a$t|wt}J_QYOi{LmC>^##zaV_4i3_DI9>jt!e$s4CS z*`V(xn@a~(Q9(sY1~dOeOs&kpTuFjle$zIsx}JpIAlr}FCf&G5w2+Jj2I>Ll&p?!x zlR$eeB1WN7>Stxt>6gh^lp)bXc+={6acY3r~YxXep*2e)E?{;rc!)c_HpF$0@ z;h7Fr&NuFysRkNh#Sr-RkfKDYgFomXuqgFp_{*xO7d1zgFA?K1Iq{TymL&fzs!lPDi9vvz zDspP)qENId+Q;JwtHu!;=lUFIHL$9h<Qr59t!=;lnl|-{qI#YSPo4K?&R9#8p_m zR;j>e3kor5N)7oR%3gtiQA43!yn%9ARNCV#lBOU_*@E=LC`8Xy7z(PqGQTXW_Z*w| zOVu!tA57*KsyYpdZ7B)%@!f3z^%W$^(h^kf_iz6dw0j`W}Rw)b~+%rRl@ zccPxmJb`Ne7zwz|+Xvd$`n+966A%)&DO>8v040uPxA^_UI%oSCXpwGkZu0fH&_Y=STRs>kvxBsmowb$x$rgYgxQ|M--d_4|@s}LR#K` ztC;nDtV14d$4FFX;8TWv|BAyZ`)crtS-+(YjvN={T91j(CY93Ya6H*^j4rU1an{}K zPY0MEgfoXoj0DbyAOYiu;e~w|L_Dfp=Yr!xZu}4{{1`A7E$Dp0UvmuVVNnUhRB@2Y z8jah4<1$OTGLpK_j0Yt+1!N+GS{J?Ht7JBWaCwJC6nNlm;;+8J2D^>za9A`taI*oD z5yO$8_puOP;K0_1et!UZHQMH#S@v7kK^+DD-l1Bt>0d@o zP8=c!aPmY>EY7L%B(^x<9gV93VUH3j7IB9eBBju#3F|N2ce2D|;*j~fAoGZyu`Pxb z5u(m$F%MIoX9hu>?MlIiX3?6{GhW~MkuV!%O+J)57P1rXbX<7#r5&DqKbzCbbTqWnHrR)ifGOUaov!tJCvblxy?;_I(T;V12g$$bFJgXtniUuT{yl1ohSB?_rMb9kU689Evb7hn=xOda^@qXfoRB69Mk3zHq@zW#K3A(?fBr7vds_!X-oD zM$r<7??SQB({?}V_#5e~1wAhIU<1@_EWqyr6$X;A)KKe8E>_Q7fYd`tXW@ZUC<+_e zyj=^?FMqVOQetbA;OzLkA})jg{tSqiNiouE0T~Wu0tEb_gCwtDe|?X#GRUir*X3Oi zC*pe=_sm;X>EAf!U4D7qFf;ut@di7~*0nt?uZ{OEIP-EyiLZynyL~Ovlyfx!BSMPf z7aPRjm`pk9=3d;m&jO9KMnhIbJ%3rzn9KDA-2|B3qQOR6KlMt7?FAIgxFHJIlg6Ax z0XWaeH)dJmn;~&N~9mv@D19+?ktBr3M%V!sdPr&mpQk^+UqA31$0ry8wN z7XBZH!^*zacaiI#K^CAVNNuxlR(*^x{a}qBav()WHBu4U zl{#O>Jq8g*PW^Vs~{_y|* zZ`XfsG2HVa*TyNOnBSCA)ZtE-AHc1_*9r+#thJ{{w2YySjx|y)I@!^K;=$6K8Wmv5 z`Py$E-~^(Ip5l?%s`z4IwmeQE@`+Rvgxy%MOp7IiGkk8NVhR4U1Q3Q{r?yt6GWJCp zpF4G<^4ERKz~Q=}$;1|ueRWaCuvq8BcvrZ!a^(6rG*w15Izom!63< zv;88~Ixmu>G#HPg&^HLoA^2B+)F)&`NuXeuMi3sHnyTezS{hBYHAw$Vo21&C6p43gMX+cje!(;HMOf~*t(F@;`5mU z8bpFt@7J<(_wHTd+Wxpp?#R1aFE`9<$ba{ll2?(Daq*|KB~TtRD^=A2HDq2apgoq^X7!%fPSXuU{6kV>*Nnheed&aJVx+P|SWH zDr{2UU7sKmK`U63esHmEd&3UO^KgIFU3!b8nRSxD?5XjUUG5!OAx+Up=>o6r_JAL= zYzPWItTE&26cilH)WtHSc1B6rXkFAs^PH~iKB&F2H=d}o%b;{v4C$W-|PnNmr(jb#o}H(S)us98Eh#!b<%O_HA@ z-y!kdB|*cPS#>K?8}G+QA$j3bj?Pa4tgmADd1P9}zx!1Eg!rBePhRyjJr;vFmg$aI zo|N-9r0qt<$cm3=VDI|@6_QIWsIA?vT@gy|cDz}9CP=%Z6yrcHXjPe#5`_X@EW?IO zyeg^mlHWx0*HD?Dct#rnO1@=wo}7FQ*a1`FCpQ47P<Pz2Z9W{wzqg&xZm!zk zxd@u4{Cm-`ansQMD)(4;`~F)u@Dt-5^>!d`3E^c;d$QL%K@IS$mw!G8H&GfE*YfA9 z<01YLr9ntwRJ8sfvn(Df%pR z%KaUq#fUv|tFG^1*lj@mSjV;poWhk)zPmEYURviSDX*({ov9zl8ly+I^`vIdI9H3L zreKYpe&2BQlEEb?eOLCe-syn34sq=EBke1cuqf;>7eGR;8xM|~fL$)|Ov@-zW5>1T z7wjD7kD_75ChDPiA;O?24IObt#nGER>1l-~64ZF|b2Z5Kr!WvP*g~c-Y3a=R6|9xG z2e2eJvei&GZ|mhQ-EFYI$HqmSIPon*3T~te8aG&@dRO$+l;Ch!3Xb0ya=r5HB~6y= zVV{wVUKe(-@zWrwQ-MmdZm{P7w_-|%N-Il7hNLc)*#HmKlO2P2iY+A0zzS_(W}f%f z%erse8P}BXx`xK&;bWw@k@hTqS6^f!*9CxFS*kxb5z1pzCnTd!W`-5$oi z`c+AF#johhC}m8-k`4eN6m>rZ!E&7<&yZV<9wY?zm`|c5N&k;L$}!HIgs7AdqpTE1 zO*U#Q!{@8%o+Wa0>sx_UlvG=ZFCl-WbAAZWRuoYq#T+@tb|Tfc?m#ekB^)8H+cJ7H zGGC*npa+0Z^sw6abAzqM_Rt)~96)dtVTH{bf~rF#v=RatioP507gSWo+TI;#yG0=a zbO&6sYf%YM`w`S!I-2`|oeM-(*hi(I^ZmUkE9{QTE6&;(7I$g^+)`4ayQhRfibpMd zNU>4Ap_!96DEVG*d_c+%0;$EqASRbyY+8g!_Niz`cLJex$ zHzT<0naWR0L#iNRyUC@ZEi~7ytxs*E7+d2_F_1n{8pJUL;m6Z4Y+KAW2O$X<(e@5; z5#2U$-zbXot-Ep~5<|L3eB8y#nt`vSg@sy&uvLzR7@k8Y+EYVD z?UOxvp>cxMH(@p=m@M2C7BHk$T35RT@=gjNF_QQe6^`t#i)tFv(z^-)IXd3rdDH?d ztw2mxl%FffQM!*DEkEgu0!~*ix!|#QN$=!0HCV4^BQlz0wysKp%I&JfJu{sVtA-tM8Jl9 za2&Wd5sjeA&9Beu=*d7Gc^XHU{Z16B@+KE5m0bZ&@g^kIfFVUK*P${3Jll zXFywtWz^l9HjV>^PK_nBl)Oz@%pH-+hT!}yiyr~*ka{zb81Lzf2ra0(pct!zNQGR( zQUEGO@gvaV2NJs$Ystv?NBmPATI8rz0;MDgmwzvbT8)^U1!uK7DB7dkBAFc1nRmSv zX)=6~K%^~bWK<)zL+x`Z^1>`Mpd}kBfC0ojcEFM(6A9kE6ct7`DEa(EdCtYiDKK-y z2dXCM;W+CBG)|O;*kcyvfnGl!5mjSQeaB_hOAMcDJw!fL@1b_@-jUV^>+}+Osac$i z0)CY@*m^u3`ZpW)?$$N+Z9i&~h8tUf)H;H#!$z(KXot-s6qk3MI`!dDi98LEbF`R} z9%SuWl4?1cB^ub7E%bC?Su!C9m0AW+D$A<1)|YLvWhvdxgNnyyNuyeqo)v{iFPCG@ zv4q5|r7X~>F|`L?{V;#;t=h5-p~+{fV=PjN36QeiMz3ofB7r0^r8d%W7+kUmI+FRI z5|0s49iCZ)N1ubbV6QIfrIh=v@Hg}2aWM$Do%gBp>;s5r7Uqv7jMN2$KX!=_+Cc6; zCGyJ&m0_zBAlG^Uc;5EmC#G1Y99JV|$B~X1WP>U<1F=N7B56`G17XQqo6`&kb_)&b z)fb+mJKaU%r(3TW#mo`uO_0bBWv$}%7dZV@eK9?2B7EiF-JU#2XU5DLiv9!2X$1ldizl+)EbvFY&~!IPw{A+8 zcg^uq&R>T5S0=)lu*JJcn?H(X4ECU;;ajn}n(PzFPk6;u!&$Zzkv$vLmwELo-f}F& zWAq}U`V^%s)w!Sc>|Y8Eya$DdB0<)}h5@lNq>J9g1?-|Ptvt9^n)lYJ()1>4Vum4p zKE>cKkc9|{GR{8&jzX(bYHMSUU(YlCk)UQ@4%YP|aKO$$(2c^;qNJp0PC+8nzcS#@ zrJ(z6vwabjo}}U)R%!IX$);19>~I8wv>L*07GA!JcD+{q-}Kq;5uZe<|a zhUboU8-N?(La={1LIv2cuY{g)wv62`LC~gy1H?~mFlSA1e&G}T?Ck>N`RdN4x7evk z$tFu&L;>vB(KvT*1D3C2*PYlIW!Ipfn9n4B<%h$w%PXI3JCVe35`t+7CH#>-^QKz= zXf&)Y>J^-}6!L2SfZ4ZU+hIU0qlhp(Jzk!oEz10C%9|3;w&n_>R9yrVqxF?^hk#K+ z$Y3@Qh{9@n9LJI2%JxrD8rwV6YaXHT#g6}w8Kk4bJ`AiFLc!$-GpcuQva=lpNOZFY z7&%uY6;w@Ao=eviJ}D8Cz*qp=qR*~nQ`p_*Nke-5>>9lBcB zcEG+UxMSGcHX)y}MX^s(DBZe>b(vNUqDd8YvwOlOlR(@?6v8ETNw`cohQybl?V$5 z<`N=Y_ae-;k8uvkr_MCnv(*LPT=MIIfts@O2{%uIwDUfqewHpF+DC``T|up{m)3Xt3S>&Kxb1H5_}ij#WVPJWuF-@*f&_1 z7w~e}U4SOuCw)YPNcjrxwFXcD%qox&BTk#tNayKUpc>SG|C!SFh0aUJ9y4J3R>y}1 zAL`1@l{LWh*&vod?w8LP+$86}3yms>fthTCqf90ux6uhHhWVfvRm{asrgIElMC$m# zis;^&Bbn_`UoFV6aeb7kku3uIlZ}l%8C9Uba7^9sQ01oK>!v3-w&?LBq;6o@7ttyh z0u(otkBlYg0Iw;%*#a4UR&=_9kIRd;^*NtFD>*fI=25J zFYm8%kg6L+U-lRAbnIv{C!KHL&MqR__VBn>FD?fJ#@UDI8d=9@P8UNFX>KR=QAiql zXCwSc?g{8CFdV99P?qU_`ctaOld0X3d2o;*o18W62NVu!eTU9O6hG{CNxPykdV@vf z8q|~+ifgbw2>U}<=AEz==j)@38(;~+Nax*%a_-%Myy`Z@5f_^FJRe%-iiSld<7i$5 z!V~%O0_#}}pZ`%&&@CVw`7b-20Z?U{jxhVH<^WZy07Dc>tA@A@SaEZPRd{%vtJJD@ zWR;r--*Iaz)Yqv=>A&pL?SyHMUoBEoN_U~**sH&<+s4B}v=kUc8oWL(+<2negOg^z z$6Vwx?cI8*VXrlZQjv{^5uerKRUNB5`D{Eu;&e!kwMq$qdUVBPV^FVXF7SdCF;7#W=RjXvbA?Jw(=udQu=eT}j_ z7%2*cwtiJmIUoa7TwM+Qjvrw1sQWJ~kP9A%eai_`2R9UZR1t{Mc<^1lDjl*U@5^BE;mY}1dhZIFZ?duK&#*W$@U>BZugQuq7>O({_sv5f3BGSC(W zo%PADZs-@r&P z)reU$Sn{;Dm?1ge`Cay&#YZQ82l>iEY%x`HlX$d{Gc%xCjWWE{3;7kl|O`dsWK!U3pa#$GHP#5SBKzBC~r_b#lUT4tL;UsuQOl(fDkXD zsKNXBY9M*+$T}=yYZH?%Q~{XP4QS%<678|64YxPQM1+3{^ErgIAdY3z5C@#^mxI(r zC=mxuTJ@(&Rk%S3j{CzRTD5prQoiVny)aUo1w7Im1y{r;M-%W&@$a)7>)`p*@jB5z z@`1r2{Y8L!1R93aAmyety1mwb_t+e45ucHB7gk>;j_+Okq|1@tu`z{H+4oC8?U#KmazLeUW` z7R8A7Yf`CFGRJ8^O#krH`5N`hUPfg{OpibDi&IFCjKbF2*=0_ua=ph>Qzo<|y&Te1 z>9)FLs*Y}glV7kkNNBf7V&t!qtRIUnK!fR`_%7eSm%Quc8)s0ziEGhDnddwb^+h$`UU{7T9~ z56qa=sJ(If^%w2+ytjE!Tg-FyR*Xt3TJ_H#{@6M6e-cao-=m$|pV0qY4Z?r@>N*$0 zy@5mr^NOrc_=YQVtXn3vuIvz!pl7^3yGP`QRr#MPF~YgF`5N*os+im@U(6o=pT3o9 zOzg6bqA|I)iPb(l7Ze}cxsLj$0_8u~i@Y30ik)_R@HZ_Q(4w< ztA^Ii2K?;LJ{Hz5E zCL1PQaaOaO$^FT7MI0L?sD`JdH3GDwH*DBDUlF4(_sDxha0kS|F<@S3uHA3qR7_<* z1r~rl2~H0VKUnb^3fw7T8t{Hc@y2+g_g5bC%B02M(Cm;0sLT>UX}VAb54B&}uH{HS znn)v(MZ=8Vzs%u;7jd3*j!7Me(wL^BX)ZFy4pI%F_Z!tag&G#Col0Iz7Gqr{V68?r zw*t$(jdS>7Z4-(b_ApR+K~hAXBTOrR@xV~{*wS#4-~yz$;}6WJUC4#iqY|mzFq*Uo zpc;H*W9fuQM`Ey#hv=oU{LJF9Z!hqjLBp{XI0y5OX-^ckoF)YzzUt)k2exvWWl?*rg)a3G%k|e2h8Z`?&eD0td7dM5PPc*K%G69OhPv4 z77wH-u)^T?!0pD~`G&s^c(ARWqKyfu&CZa`1OO=*E$Cs9@Df(13*ux}$52g>Yf&}t zvK4QG3?`FQ3=w0N`ci-g zs&_qzz|jqi$W4@~BAqM;hkZ@RY<+yhp5oE|YC>*WSbQg_Sz zr<*!g%jGkRp-V^uH-4D=iabA6|D=7rHA5og58)o6k|f~hzC;Ya$s+nu#TYNtoltRkpkF=h$c#-8$5`4C@#)| z8)cd1(qSD}c08^fC>Nu{Q6>TfCT?l0zYFS&Ksh}i&;W5k{kwd;&zA!yemlTo^D=_{ zu@9jvI)mk?{F$W@Di}DTxWU|^Y}X$JhNyVzHo&2P%bns}S}KF2U>XS+qVB9t%UDou z5{{61dI4SaT6h~h=%@~hs8;N6w(bz5C}&UsG9zZlW#K^lg_q`r&`W0<0W9l1OX$jG zV}x^M5z5utn>wwN=q)Ow}0WKr}^(=sLi0~Ar z7N&r0XBPlxBLsuRM+!v<|W zWNge>0!ZG_BeF_27^8R>()<|J3tZ_nu)P=14se`R$_!R62ztqq{eqJ*E#rVlt!GJY z0W&(TQX;bSp5_*j7+H9;OJOTDE`b+v9FPP0?$X#3tEIN3##4uH;`fH{&U%nw z2!K=Diea#}FrE3-0AF8RTb~^h&a$%k?*XZ|Xfnp#gdIec7Mq-~45#DB6WmBZ*86UE z!|JUC(=!9z4vuU#prbT4R5ogJ!Kxe_awe7RBpf(LnU~R4=h?dS#(@z*fNaYVCH1gI zRU_rt$#h!_q>BJlBYFs8{ComiXA$;-oW=h1-+mLXANi2B))?d34AdgIhM~<_!P~>v6|!@a*x(Wl#6kdO4mpC zPQ2Nv1+W^Ho#Fps1)%l&Gt8h9)1eZtR#1oKJaWnfuzUun0@Wr}3-?X#?4C#IeFT{3 zB-*d~xeqYkIHv-`vpw#%^F@b|x0W6JP+0P! zrb8{-U{m%6!WHga1l;xX1YopNKK_B`Gs+XG~@#6DTk7$c_YO2_3Y54X+XS(Gj$JmZ5#dZNs zB)=)7adcmY)P@6YLJ*8APsY|V9T2Bj?o=S2h(a5l!>>*b|*FjxnF>6}Mju;M}m#>aXl4P*pCJ(VQI0ISkREp+-AL zzj9y5m3te|hh#2vBF4mQRAkp7G!pP}ep`i&OvoHl)sK=h@own=%@2!)X>T@8yfme` z`PUK6f?R25xn;qdyjRJQ)$dO~C94Q1rDwZBMrCQ|oy)@ns1YGv?A_&IvtWaNg84$k z{qNmr!}eKS_%)K`OlNTVrGLF(=pjU?acq_&$x74i(_rzWOzx=lWUB-c4MUuV0h&A? zP{AL9Dc203j_xwK(PeY95Y^w-!#q_rK>=+mNV*2YvpFux0|uN$tjC})7|bccnFa*Y~=v^ZZQb6U!|KQpYx2U^}iLZb$z&ke`{3Z<`KM#2t%f zh)bj^(>)2F121SF**LuInT(3iKL)R`EE4yMw;$;Jo;`X@@C`4-Hqk-h!LWgtEcP+L zp>3C#v6xwdF+xkTGr``FUVS<@W1=+fVnMoUV@i1p2^B3PkkM#gBj{?%E*b#MwS8PIjT0~+o z3QfThqg}-j;*12Rf%>DSqn~y6js^5t>2^fD;Dkc`s-a$r>|-MUdB2IOWWW4x!0FvN zHQ~J6Y9en**^C0syt6jx1~fY^2?r%iL05%~8+(&=s?}^vo(@Gadt;LJZNPpIE${o> zJUrM;URiS0pt@WE9l>xoVd3?i-%wLuVPFj>q^VqK#THqN#*cpuz+u zThS;u!3a^kPyHc9I^O*{Z=mOI%xK;PA`!%i=ps;j1hfCivSjQjKyj2f-E+&3APuq0 zRJl6gH5Iy0N(UIeJ>)_K7pk|#%rtZwz531lmGJ-YqQvy91_f?Ymu^v9n|DAAm!~A5!eg?~?WDXkk2}n+qf(!EeK5_ZB(gAN)!}+SakO;jF*07C zmsqho--kV=Q2QT%e|*w^!TY(oc6u}p?X5~8B^c9-Qjdmm+4Xw=(T>|esEBTm=bKJi zJ*q$k=b>TR|7@aD0s$CqXvx1O$M zapj)4rteH6p+J6JJ3+z6HTwA)8!zZ4Xe8BN(0Px+tn3^qtm?F~}{J~>q`b)4>66BmEjhQe^e9v;M8^EI-RT$k`D)m3E96#o(1MOZ z{$;&Nsb&Jg&~~75aFNVISlE|hvmqU{v^LK3-B3Aq74;zXza7AdK3B+%lZ}7&qR6GkG(kl#fzOx)|0&zsIR`DUS(#= z7CS)49Qjnmdng-vp=HbW04-G1vlb#<>2k7-{A4_z-LGwaTsJI4w9^_O3)5gf&e zI+*)i9lNMsebek*DeRs;tBi-%>g4bGma=b6?u0-2y}$Yv)bgpnDhvPgO(=iq51M)I z)0P+~ARFoH`y0(XHNp};A-$@5d6MVhcbr(zxFCp#EbTCbo8{%@LIbz&-sM8{P=iW~X6AOFy$o6HmS{JKbB2UWTf)~ElKvm$pqRI} zHwHq}tZf^I+{#KFx+7+6?Dy?4!;GJj1p;6&q3hxLNcTDODrsQ?#3Dl`JGjhe7?(^zcl>KA}n5-7LN z;nh07xhvIiCvd<>F-$zYm(RNJV{p)#@_?M;r3irPSOevI6x{I=@mB#gfNf)@vqz z4^0;b^Lq^w^ao)lIVAE%BR$AysFv(xA5SBKLP&JQxa^xZ4eqV&dG+JWc7=9Le^@IG8T!t#Cf~lfL~vA~7Hh?Pex)lG9dIXa(MflhzKDm7pV*?XVxBfwX#*WNl6 zhd`k<*t_?ZqoX6{qR&TfICx{liWO@deaRUH7xHx!r-{IVF;RIbejHy@1xih} zRf&+I@RZuG5bIw>5_W8LwJz==2~0AsyuI!dphJo+x{kTk6%Cq_!(2MW-A|NQ?Xa*;&u>%p&HvuK!eQvq#IRw>alBvRq~l}Sy4#hwhd(oFo^z+T zn_FM2TfAaPO6Xg?4~>#e>3$hSPHpB+0lk6Z+}NhD;=dTd)R8Y^W@Ka>Fbz3K@{sFd z`exEeW7T)%9nGQne-4VOk>mKbd_vLGi49R+X+&R<5Q2s5;gPX!{dyEd7S6({ zW07=_>HcY9kU;Mkyc5|{@8*Z!r*3`oqfcbymw4go)1&U$PRo=!gk?sdmlFT;&uui= z7n9}do{vAeO*N}Av8YHRASfsv@7)zNO`N?u>P2!brkpwD)RbaW{!Xqk_*VZw|mC#zegYtEGryO zxC?h)VjKE}Ad)Nz4UqesGJ%~R39MQwFHcQYB`7Ag`=`Ao+3v|tzjAAn4A!kXK7GcF zfNR&Hfo5+&i|42y+z+BG5fSS*nQvC3+G+;|tOqH=Rs0ahbUV--p140#0X%s&Pu*&> z-~Zh+Rf}i8H$q0Ip{1p}e}6pI*45C^IBEny%AUrn*1ib($r0xln8}i_{Q99e>E%mf2;Y`1Sg;nwZ50UXmoKHq z*#9GAwJF$p! zpik7#pDtv}3beK;Tz0s+rd4cz>4_LXB>y`zD^ZfCS`wKK?%cU9-LvP<=iQC; z=4ru$2;DfPz+1)D(AYTs`f4{@EXtC(qV`wo+L5nWpR(^F1XT&>N@38`>qiBb1R;bq z^aCMEF0nK=(EJ7#z?N%&uEoZ5l_8?&xB+^0hepEJZ5y@*uh^K^&q;D_eKu{dQ0P}AQF6rL-7W!0m>@u}L@S-95w*|`!EM4zPf#^yrUzit? z@H&L%W!7dY5K z-$#5WkcgYmOcN+2Q2!w@t6K*f4uCsNwAE2Y9)h&pRV?hPOWA~#im8>AFp9?@8eHBp z9<($U41$wiTbN+g4EQD2`w1)R09&|IdP6m-rDeC@d}SkSz}X0gyb1g;7DSn!&}u9V z7~`X{+`b@APd7B92b3&z&uCDMpJ=+l<1~)!MASZ^vHAka5}VNj=9@DoPqw?|4ZyaK zCXZ-|c>OrWvL#D4U~Eea^P#2-Cxynd=XY{A3~knuvI$qjqHC&)q$7QEGFS0L1Zcdbs{?Vhk3l}a#BvW3dne`$$`smVtKNyXOee{!( z{3#f)_BuX;3VM~;ADw&DH_;uj?E;vJ$VKiOMmBK^wvmbQg8a}QzEk)ffVdB~O^FK8 zTC5E0IW{`F9GEyKLPkeNhx$|O2fDjV(P?0zxXUIn^mKKXDl40GbaZ$^eMCSE!8KUM zp3nuby@!utEk!+igUxv}3+QqLV9WY08gk5X?g%XmuzmlnbPz)O9o!fCaeDB_2k7kB z5pd~}!;>5Dt{4qILM@nwpVX$cm zZQqUk6-t>7+CAByW3Z3nfE9~rnr>(RR`1NCn@H5sam{M%xf!=qQj&vuD1mkou*m$s z{RYKOWMXuF=W@Tr48{YEAhwOxg7oA!W=kn)C<=;Q8p#1X zFJtVuaVEv+`EerUz*v5ukG?P*QJrboNTV1FzV>iQNKPz{ZaeICLO8#;GbRhTd~Rhj zE5QKBVbi*}&kkSX>wTaGJ71Q57wCos#&7ZqEya+P-dG9n^F(3)FvO9Ka1k2)X7rg|B)swdu{?dDygKC07M&c|uD9k&hea1q)MuT`fgW?ybTkZuQk ziO~axo48Neh>2lV;tEMzDRh3q%YDWd^3miSOE_{-{-)rBjM4iLn?CNt$FM(%F>xhp z(PDqWyvYq%HrNyl_UyTdH2akxaqN{GThC&LrU|5T!{#IijMrbQBaKCPU;x0?e+u{-uagr$wU8u{{3y?{^#VM@O()pKf zOHpn5`O_MWm<3S7R8bqIR8p@Q9RwQ?T^&m*CmghFy!s~1Ox+qP`WP|r9c)pW z@1V#ZZ~Y0*-YBqx53Zl%>`xrp^zHNBn@;aI2wg6IlR>M5iYZDCg50k9w&rXUW5s)u zsgwjNn2soQ`%|Y+i({X{^yu2EE4u{QQ-WRNMrCY|4^FNR!pTW2U*2te7{pW5zN? z#SC?lZgCMVdv-08GCPJ21pAu|Iwsp&|&ID!U9dGbd%=)<&35V9MHYJ?Xa0n}LA=E*!Yj1sNA( z%bq!R?y?I{ZlRbXQinQ#rjM)G=fT}GK|fbR{nHCmNKK{*z7*FyLN6g=h++_xujKwQ z0)(vu6N4>>=w4^)7#apco3#j65hCI^tS2mn5Wws>ld7Woe&Jg~IvbYrk8g*lsq#4; zZKUDS*_4xo?(8<4$lBPR^g%YPTeptEM9YcVzY15u1(hPqLI(7e+nJ@*Eyq7s3WJ6W z(HJ+oa-s{~o;_F}uVB4vw2vsD<b540HWP9D4;x}MdQb-2w_&(NSZ zxyQq#kDcJ;zi3slbaQ%|z3seOk*&|wU(Hx)^i4;kzLr0}d;Y3B`9=*YdXp3HC>=P) z(n7`2$E?Jr)tD{Y?C|>WBq|6={??gu@~~5&fmq>zbS`9f6)>(Q;cKJ@GCSM&;lqa* zOId*+ic}Y_K9vKQ5`Vs-gAE^HJop@94l+?US;&XFAe;!r?{I8dBi2(Q`dQ$}TLS_D zXm#TLK(~4I^5vU&3li8|>Qx{Zxr=iy6-E!wVy53*?8jWVod~CY+t#)OXBeJwE!E#J zQ}jZU%!RwjzBNmNI32L2TBL$IG@iFFg_YAMCu4=;~?&Qy*#mgzdV*Q zF;Pe%pyCz^=LkqmW5EgISuW+}<=Ls?P0|bEw>lfrlhiNHPrwsO0PeuqjW`R}fIZh$ zAK_MeXQ})tW*tUX`d^AednDT8b|7ip)E^fsWawUbu!n8rWjppE`Ydwx0t+Wh!7e@> z$TqaOploixe!bTo%zKvte9*PvWO|_{<${1aSo8em&6}(!c+Q62W^H^MYq-M2KweL| zIHYI^|IOT|K}XlWvKy~&wcCDiZ^`5OmxOX35h1v#{4+it3KI<$D$yj|=UIvU<+{|C zLY!nQYW1n7C-N~rpHI-AGbB16Jturat@y3x$|NPus&R3QLCCZ?P?E)fGaW=2dAv-; zbw&`v6II=OY`fs)>XV^f!7&(4G+8?UQxE;0hS`y{2{ z(D`hup>ZAz{k!DPu?(CnWOGD?ahZW1EwW1S*nb42Zr1UVvY0P#6jxZ$XKCE6MsWzYWTTG~y0XE<&-ZK~0ySu<&wbe^XyB zRBRnv=?za2Rf&hHsH7#;+P*V)%IflUikk6y`}U4JC*MaGd?&60x2GN|yC(A}@(Cvv zdxY%1Qeiq@jgt4C;$E9|;kKbaDxaZ8o}ChgTfHouNBR?nNxxeMPP=wQtZc)!1u^Gz zP@W+8aEfWL0BS{{JcvPOK(Br6|4L5yl*JmEUdPf4s>Bz*MoU}9DMo+ z0VSt*zCDRi43o!C1IrWoE@mY&aAZ~dGi**Yp#H0IBw{Ig+ zZ)4?corFiPW{8&lZHQGNx`ZA+WAHb)HMw4gOTrYZ+Bb(NI^7{qK@x8Dk%yX71TUWx z4wB#7-p66(>2KbA_MuJGrAxmP^8Xps)(=s-iWkO+o=M8=jn2+f!gi8mU#C+zQ8k*_fG z=dJQv%kndK?%WXyi@F2u5^{O(E0119U$UihRW;b-Pq9ERT@=W0X^}GEI%|nZ`8l_U|v@Q$styzx!l&-Ra!#&(@ zi9o&LqN6vXu}5fdC|wR}&4DQ+B|Yoa8_yza(y4eU+hS^{^8m{Lk;KtngFrPS^PgX1 zsU7d=MM# zL7rv>N7YINgl^Cy`(ar-?>`*Gj+-Bri2BfYe^X!3>fR9uta zLOMOREjn;lIX1_OX$PBeh2v4j1#1NjmAW*I^GO20z8$v=8ZKY|g-pPzR|_rZ9s-B| z)-@E&qZh)dIvcanr%#`r>NVi{=xOh)I8LXhv5}GOZtMf}aG%Wc|K*} zV(m4;=gbepC77!6O%1qu5aaFJx6AO6V4>X(Nxv*;4a9n|)z8VHPKC6;9Mf3Em}v5B zYZI>{lQkA)m^ijC{QU@ie*TcKidPQp;7as2Y&eMt=R!DCfU1_Wa{;y$7FbVN;Pv57 zHh+Gfg4E&Hm)^UE3Qx&WI-UA5uL|JJwuJ0X2L+22!Nz@jEp~LVA$y55Uy8NHa)wr1 zDP2NboW;N)1tH9X!9PP+J$0e=M&9$e>zk2;?PVfK+hLud-P_ z@|nL);UUFpD}juifb~em{>8nuSTy%{E~k7Lir$NZHZBAz31AdP=6M*{-VW(!IhCO3 zgT%435X44R2K=+_7_#gKl%lrv2#$EF>(RFNs$yUP9chr@y=*-c8mgR`S22w*V!LqZ zu$#gSlMp|-7tPOfT_*GMJ1XBv<&Th?IBAlM(s2en4_Z2d8>?cukN)}#Ww-US2P~qq zFsgS80cEH;fk}XVR_)kPi&0YXAwycXiCf%Z5y?YYGY@~*&{arcI&g}edpGdpzb z>;5maPuo{m^=okRBV^nSX-gY%-{J(U#>h+kE)9R5B_q3I$U_9WZnuB;M`+0%LI0S{!?(E$<$o$y1LdWi7(ShYkOS&ZjPl`Fkv zgIBrU03*tS`38gAj-?m$_Vu}$i0uUh#W}ji<|u|3yF>3AzL zk`3k7gtFhb7mmN_U#4&CL zzu8&t`O7Yr={uJrz~vZ5dAJ5^Ee7m^ijJb*u%*{P4*CU~y*_Nxx#_PX1#a?AR@oEv zQa3X!i)WPtuiOOP+kx6z`CXMj>uzBij|J(50D^6ylJ`QK+=}LVMWTp~s1VlEjGIzu zbaU3~$#yn2%T^|hwbqNBwaQP|$cTh!%M=tIly(t5c99#Z$5t%ps=R%Hu$i#1Fr$6D zpae>E6J`>e4ld5jKKRMr?dSxF_Q7d_%f!TunDF&sZcS_K_KU^SRO=N*SBIQaRxo<| zutNNzNQ_U_Tz}+ssknCt!Td{^ zMWv;QZVgZG)$K1TEQI65i!jE`ENYWcugVsG@~sB(11@czNMy+}eEP{b-u5H)Zh{&N zo_qK1_4VH#hrg&x6%Oml6(o1eM?JNJw9(fG9zT8zh1`4{;7n*8r7&*85EVb5Cnbj# zANn0g2C?h3!xPw7DY16fx??2u`8bU)qn5~ouD0Rwf~;c`+7DRbXj%#1MBv?dR?@c+-%1ep{Tg; zK`!;+D}rq$FDoTwZ`-zQcl!feQX-JgPOxvDiE<2R#ttnlt(=vG{j8P;N1tcckG)#p zud7x%>${-HPu+m%Y{Vsl37*xn$M7zMgCx&0NZksEk3ps@_5ml%KA@yrMDNs)iWOc8 z*=0+%36AI&RBnOKW<@R96gzys#44rGDogf+nO*kt#eAvirPJGSdJ1UktllTjAIH~X zSUMa&RX~7)0K^?!*V5skB<}3ZO>#iSX%PJ#sU`_H zJUfxU)DMYsTmrS6nw~HKeLL@OU}`E=xH@Io7&LE&{K~ioGq|PTAVepull$(HMiZLMop<`u<89!gd{1IRT(6#!em<7tpjR8~nT0HPeRArE$UB#*TK9hC4 zZoj^x<9%*k$13}J-8YUWq15aLX_ZK+hNPn?c$$D{-OE%_G9l9D;I@bddk8u6KBk67 zB^@#9xicK!f^-PQQ!YnUi14Ssy2_Mui{?ABE2e!EIqZ-+`o)I#|9Q89#KRqxXZF|) zv~*HsX!U#!bLP%h9xi2r#GmBH0b6s1Jz88&PLEU+*mk% zM)HX*;*9C21N4N-L5zv=R_Dl(BYuNG3nOu!+QEWnl<6D;oNy5o$q;{R0VB3QcQ!wt z{k1|1)}vPrjR#S?z}_IIq%Sv5e*dK}H|h+Q-5=|-@9n#Hw$LA=8>hJ?Fu5(m8I79S zaQQ4|B?z)uDji;|0^^T{g(YQ@R`z``D&|d%7(}>mj0V7FmI$psWu=jd5iJ1NW59vS zYPFWTz*v75u&R;0p_-Zxci(&_fu8aQn~rS!PHTWq?alj_89VTP%8|Om2Ej6jS;Oi0 zf%xp~HKb|=DMM`37vTL|{LjGJI=bR=MG?d+_}fO8;2xI1NsLv#1HBu1d$!vL(;VP4 zL@?Plmf5mx0e*QRtVwR~XiH*DCzwgjL{*a-M{wt2yn>+sp1?_oQG-m%(aPbgC4BD$j1Vraa4 z{aa)RXC{ubwbeoy20|i4jkzdqdSO_B&0sS?#4Pl@ziFMXc@}h3;{Po;UwM0L%Q!xt zG)a^eKN0DOSY%Sh!o5n~2568;&11c|ly$kM=|FlhbQ|b~2x|fc;Ol!A1vpt1aGs-_ zP8=(-G8vGbyMdplvH!OU^#Y%$(TaqJFs6z}&Z&FvL;*c&H4tJ~|040=Ak zgbl#i4g9Mhng>D^QPWGv?%01|U7N$KL>;%raZUcYQJiP3*5WI1 ze}sgGCsHMjTX+?t7#6Xs;o+u>z=&B3abuEZhOv(s?i85iptPPRuObj7LJ+mNKCpZP zf4Y%ChP%Jr$p%_l)m{;F^iCr{h?|Dx{nxn7y!Xe)7v7RM({@F$Me^{GXss{+qa-vu_301{L>!n$Nk7(=m6OgcRA8l9f+OtckX=FGP@HMGWB7& zIc(DhE~@jWigJD&xDwFox6d(kfw7s32yixoQe{ztOjxqc?#(`Dy40vw(jHr^$QazD za^cCs(2~VWPs}Nhb$X|Tfy=puDL8f1@d2Fz^sldcm{|<`GbC|$j}yQDuB4X7$tyPY zURG|kjaOrxwNhx|_h8V7j**5@dQlU+Idto?P2=Eve<$}s@5+`l})PC)k+^4xYtW*5<*Xjy4|*%r#Z0V8-kACC7El(j$}S(Yx!g9}ey z_xJ6E=m00~4vZs+zbsR6exz|jVR}C{vCo8}q(8lk0ZYlA8g5 z7#8Y^U@hpk@K54$y${mfBls}Bcx7l??qGTCBGipk`tS)+-w9m|=EPJWz~wGb|9K)a z60S)PPWWqvA$Q&*=Q=Nwfe>56cNU4}#ycd7U)q}|et!A=g|TJM?V`-sRc-hGWZps3 zY@wk8r%GrLfX;drYz)jwcqoYDP-}R%{GRF1OOJ!;4Q~Miq&J8$0fGnt>p)vAICrkc z#sVV1&>c>{9|-FX=8X9BMQluv~S9(csos z+8YZ((!8xFv)gW0oA9Osfo8b}?Hj7)6Ib^p9Gtk-x8gl&bo%n~ZRzdXn-G`f5v`r>AMZeC^Jo-{rf%{w+1N zmKw$SeslGh*8BN$=i7^MvviVL=kzMO_6hUxS(e$t_xcAPbHiF)-bFwqKXNeRo)}{* zk*p-D87s3W&dJdJ4JY0A^WQl&fAaqf*z%e6m&rLj9lwQk_QkgIQj&{Do(BIPGJ?Tj z#m;K|j4NTO7i4DhDmASO=-22EE&BV#j=dB#jFWOpPfU|Zbf$riyoZ`oglz$2aHieRS#rR z>G*sC9|4zDTW?n}2&a&ILJQN8JTg9#4@Xka0BhLXS-71Td2f}5AX zwj?lbNcFJWd{I4*dtN_63ddgA_y=R!4A#9>m>hD z>s_iZjOOnO*n9r`#@nfB$L%lwp|Wi=pXkZs_b=>W&RjH|b?Kz#AL|2yJ%;mx7hBxt zyQ0Ya=B0W)JlLt*>4shE_`i&uZn#MHXa4*B-#LMxH)(j%&;J;lS2O7Ys&~wJsC#y< z^D8QRYX}aBV(|3zypTs8#Q!`ZI*?(PuL*V+!IBC958|7W@zYn(w^nt??ibX*TSW>) zQ#qco?LU7{Rs^HZ+#lkoW-w7~C%6gL5RC%pjerOQbicje{-2+w|B_vXRVMuni?jMVCKJZ%E;)ZI=bYbHz^GTU-=*vM^F0Jq%t30$}x z)&=w-<;dS`bynhfsRH*VF-g{0PiPQu9$O>oN@#_}Spt_}%_F!@@K5n^og>I7Y+Tiz2*BZJAiV~q!gO~C?GL#ojW9V>K4 zIW>xCPH#gczYQ5!CxLEpA~#J1vSUI(FF-E_SQY5l*Mb+|l!n3?n>+Y*7v+C=B6O>9 zV9}yQy~x)og8U4+m>}Kq-yq?F{D(>}384GXW_u!>8;3F}FeP{1Qv)bh4oB{7GBZL@ zNLFbo8Ng^G?ICZ+?%lgjB)TB8nF}#_!Y6l3pRJD7lK|36Y(l*veJzBc1K=llFGMgz zdG~+qiX$u;7&asw8h+lhr6`aY_Y`RtNuP|E_exdV2@{5U{(X^*=kv$=%*L7D38Bz7 zC&~@~NF9)2QoO(%Qgz39%bTK4$wQU15 zsSVmBsPO% z23|k}fw#ML*{W3r=(Y5)5S2@Zfq(LpB5-}8<&6NKsjVN^d;dSd47^)M2=2WWOCY$H zoc9QVu7xJ;{P{`!MX-AMQHfjztFo!TvjEO~_8*fL$;%V6vX@*w3TA|x$Pa4j@ek3<_9rCA2 zRma)+i>2ki-YTCgC?&N;?pU6r7ALU`(CXl|pDh%}u%avK7g&w6YA^(K5~ql^?P zM5-6bubGu_!b1{tf5P>ku(0J!x?v06P&w`tdF$2}Bznc&zpq1iYNI#`*>KTChHD=A zHFuTk`<*1|27p?P2&7gA1zV8;bg|@zK~;~X|8W6l(@mO zf2^v020r(_=`vTi6mWP&JN*EK&p&@j7^9$Ome>{xk zy&*0Tm^OR%KIfCgI%sUM8E7i)L-u&7e_9!p@h{QdMS~V zeGBy{lck?%90TBk)(B!-t{we+lWx{I!C1Ulg9S@S0<;+%C6vRi98*e6sK(CPi}-yBIHnNtLFfiPBU$xvk%~K< zIGfX{Cdg4iyELH-4QVa2_qT>ASlB!SM71yH5t7%Pkw&k}A{bu<3r zpmEEDnaNnQWHox zgLT@w*3($>A6MhsSurKU!0tsB=i4PWm9y0gj*WSqw(k3l=Q_I|&ia0%P)3Pf+D8eb zL_6+xXpeqU&7`xZWG9$x7BB^hRG=Wqf&UW(Bs;|RWFs0(9g_lBbZ{eOrUOdRpsMf9NhU@K`sgP#abns& z|Moy5_#fY9IqQ^wm;YyRTfI6d=Iu{2{QRlnix`8v6r`N^`M;v$h{yp{TDHh3tG~Br z{fW}Us96MIS;Ves4ao?nC{E4X{GT6a?>X(jmEBV!%_Gi9Tok&Me_Zmj>J@Y6ne>5r zCxUoJPy&$DitVw5&_}DQKNY*N3e5wv5@;B=YqMI;&Y$=Yy_w59GcW$BG&bbiXS-kL zj$|5)!?z(M@=yZbuppF$*n*xv*NS}8BL4Uvz=Gf7nH9TU9+@Vvy-unEBsd;I(OBl{ zn?9cB)fqq*q4|Ry?KXU})@0*?UIl^(I?$-Z#Bn66AZfJlU(Y$sIiX@&xt7B6%Ok#! zay8^M&{M*)%OuGZj*xhyW5z%m%z2907wbsSj#{G^;QO3uGbFFU&iL;~emdA6F(w#e zV$G>sKtaky?7j}Nt_Y5VrjJJgU_;IN$p2Gk#d{7P^}SM(ba5u7B$SVSMrcagCz>8Y z8^t8Rf+rb9h@vhkLR4Z-{T5ESd0}%T{qib)*82`NVcK^Gw!2_t znAYMxl`DmL#!3kNac}p95uQ*M($?NW7g9vBSUTKKP$qsm|4tQoCX7O>6as44{>4R^ zA5UcgLU;xxx@*?p`NYW&MwhGkEEGrSr(csSt6!iz2MJ-SALYWV&&rcsEtGH4mzOktwv;U z1Jf8;aw8~+H${5~XySk?Z@#xpuPus)XfQIHKM5ra?@KKI#l+aS3-=yLWw3K-p)_EJ z&qk#UKp35{EnsO@6v}DRQIU%pCKcf+ziz}1awOW~%^J2SXRZIoc?g$T{A{@O=y*$M zIbI@(&jctr@L5(UovsDa&qb%y31ShRu}IK$hlSh3E9OHs7WBzM@XvXp@E=Fdi*aq%ea*2Q5r_!vW*Y_ExN*?=x1?QgtT8&!U+DpWDUgYYiD5-SKQ^#@cH)## z>@?)}k;D^bC7_fqnD=CZFkRD7Z~Q+@N9nw&RnU=$r5^$0zez*BwCa2B*21e<+V3jI zM!w1a!)n*7Q?EO_oA2}B)AGmYf1cU0#igZ_HYQ{nQ7jbAR7Pr*2EwaVonbJC@C5Eg z*Z0xX`tlT}$QVMAKPPO~KUc=F#sfi*UR`p2HLt5_d7?h`Lu5RnsspTSg{<3iP(QNUH?=9JrX}zm90nYBTkj{vU3vmhw~pPuQI4A6JwdTV|5Pt*>!?E_ZRw`@C;2>z`K3 zCoSm}IXLm)^NRLwvLpRhzM5Wf9BvU6=_C!xMn#B%cuc>>e>C5I|IvJ7)5=<|1fe3F zB2Vuvr%QsnhhegmqjbIGb#WbUwc-CFf=8F$Zoa!!9Y+Br=o6$?*9`GCFGL02U3u^Vd^+2sLvN0Tm@-y?>PixARap8aS)HX1MPO?+sK;wc#16K zaDjI==jEY;CU_ESnb0?ElT~@cg9pz8A-@rm`IimwMiM+g22NfVjP|+=+PYEV9*n#v zc8pOg#+*bN&PYgrZPgt=?5bE&NoeiJjcV)IW10x=+=M3tAH<?)hsd^wgp%CC=Uf5oijaA+q>d>5 z1xp{=r)krs!5&nLU6y_1yCXInAr>WH;gO4=Cj3iMAArLUtWj7I8sI_k+_iMA$khXF zP-i_m4)b+Xh^Zq_5Ek?o^b+KaH!Z#dZ8(V1PV}S|lz)&^!j;^jEXtRIv>y1Vu`G6KSWDQLsfuuVhW?9i%2yBbm|*n5w3!t zBN~vSH2{~>Wn4)@kkBsfus1^$Rt>`d*l0CeL^Af<`Hq~YYQ+{KBuM$3pT!v|NO5Va zkzsKco#ECc+F_SSjEBKiJINC-d+7BB`lPU7k-`KxP^}}>5T+oTqYGQ6?6~kEM0wlDwL=gWH}d0rY}`c zc=6F=UKP%NHUMEHfNKmm(O{uH^IgJ3Pz**?pR`wc46f>zC(caPhpek4 z+rJ>b1fL)X`lj8xBed>J&U=@c##e5PJ{xes4ql6Ko(H%AY@-2UfUDje(gL7F>w+@t z(6Ey2U{6oK2Ioc|Bv=PWW$@qlB`Cos;t4{>Ln-SJ8zUPGcO`=fECV2H_aGEOz+d!T zU0oB>J&pqN4Zu-@{$Fo(8#?Z*3>w0%ya|dK%51i6OM-m~{6rvwG|FUKhDan85(G(; zOkM1Z*dlt|?af;4#PR8)dqt88r+GvoV9nYzjMX!M_9kZ?YsYr`&~CF5oOx@fOW==& zQ0ibz?rngOb450?ssWTTE5WnqwLN(Mem_$Oy~1zT(_?`nP}71JAv+9VASA#iB(F6? zY8KRbOk&szIOZewdHLsiJi65=3`~v&3y30u$0}QTek$bS&=F?7Iz5jf_=-zgoRvr& zN^lG|u)q?lDhTyn79{A~`8kox05t|)?D2I~24e&1VNt!vVQb$Kyy7jZ>B_1ex$$eg z78k8OB&g=}CcFLA4o8Lej!Gi7qSemcTi|9hVSkRT>VS>G@!*(<3>yUbV#D_Jze!yZ z%NYQlQUPyG%!DUwB#mkVWgME-uLrb-_$)K0i8FjqBk>H3WuPhmGnA}=w%SzRE|_@&tg4-)X1 z9{q0Vg-(i^WGqw+u%-k<()pLI>G1_C$bAXW^{zb1JI)!h5 zlZTJP7(4Ga)NpjhP%tSSSl~q~TBIM24MLa^{<={ZT;H2@PNxjdUBGg4zP|d3 zqmpDgeRgQwFcu~nh!pwtXh+Y%gav{R7eMM}+7eH~c4K?vjaAsllnUTZ&AeeSsB|ghi0+8a4ljjxr(CV4pSNa;e?;C1^3ij%0c0wl;lBDK^%368MUntJ#TpHie-n& zx;tl^9Dgyfa~9U!lO|X+Y!Ntia@wepCO}BSc3xNKRT-RhMMV_MrXV%V=Q(3KNvn$%?@Hy0lLFcYr zsDE>D7C#r&yP=1m+65i<1Dhy1bg@L>Lo7W6oYqk_>7X9xY1k^zX8>df#?&`W0CZ8a z`XYmh4v6t$(vT0d6>kJMhCU1^B(XpXtUIvROmn*Y7e&Q4-3|!_{)?aPIj5T;rt^0D z`kB|#nQQAb{rrhg&EJidmw)2KZQxRHiGXqX`s>~$!5o-#3gBiClLB>_OZZ9{tO$uj zZ%g4j^qu3BBd8l+bqy>&aezCy5N_rWig_XZSlro>_Sh#Kn2KiR$FGMpKATWZdgYx1x?Y&`@%9>9KviU+1#Pf~>YgsY11%u=p&8lEVvw=$Nqj+R)lxs3b zCQTOF#ZKYb0m6LIOhs4@7vj05&0(iDKZt6SpVsi~1T_+3K71 zsC|xg#OLS*N{1h5MViwcV!e(mTYz&T&8uy(m-Hjj6s(pic`JAkDwx^gSvCNV1%v4c zS`Ol}?pz5C>;{C+663&<1?Tgqd+)ix3nS}9*q|Z>;6#w_*KA~eK)pKqK=T7oS?YzZ zVsO7nF)@!l;UUx4ytv_R5BE;7@q-;R4adkzl*V%76~$6;%|GZ?+e`-q-vzq*jm7`-DG@GH7%S4VQI%?vAdw3NT2U z*GV4J)a3y}z1}Y-dSw?us}xS^=j~7mfG?s#$rat#{8)CtUlCVuHycIWO>*i{`$|KhZXt=@56Z z-dI3v(XJ+yy3aeu|EkvWMtl;QQWR zrzX9*d5Wj_@tM^@K>z^Zp}Qopc`p`c4FUv`Juwmm8Q-ah0wTv~oa;+?_Hoeh*r5)V zrtOXUOY_MlVzj+(oNXb>F1%Wh++d*7T;nd3JgzS z#L<;UWOO2$r#2eIEh`Ec!%5HUW?oxpJM1yDWW8n9hM(%*y=w+vHX7$335-55L3Cff zI5z@GU`fSi_mfC~rkOg!3&91o+8*hoK4!9~DbV^INkf^C=c_-sM`?`|2~ zPZg9A1}~PljLdcF zQ9%v8KJF}36(4f1kX|2<;Y;s3&A@5>8m3LaMoUhJ`A0skMKIb!yPg`<6)UN7W!QZC z_=-{n@Vz1{e`ts@9HAzc?zwUD<#&wPxkZE%j)@!ILmn55DxOSpwjVrE9;Ns<@cG!C zTO79KA;sX}h7yO732l!jcs-yh;LRBW#p%Q3E}U_R>wNTx|3 zE|e0t1Vu%YAosS#d!wxx<#$|yQYJjGq;O#;9uETjMfV4GWnSn9_BN~rZS;_=D5UN| z;>=O_fL`1PDrrmziv#@H0fhoZH4vGJF)_n2GPys++eA+Ql3j{UWAN2Sin7n6S0;ao#8j|v>K zBH(5Mle*E*>CvM{s7fT5l*cyEcSYiQx)e4faw<@o_SzE@Yyjv{;1N8IO^0G`U) z)mxEAO*gx}8Jdy-QvHJ*gj&^|IimW{4^RXELneQOCc)UY6Mg+v=RFk>w7mjhp0H$t z=FjH29+(5!N=f%Y5seghdFsp=5QwBM#elA03iRtjY+0!XEK0mi8UcA!=3pa1mKb6- zU8xd7Z4=YGz6PLG5TQR{Z0A!(BQ|sPtYb&N7n@PaHbrqAIg$;ggTlh7rX?T2Z)Lyo zeVmWb6!eJT6hZ27F=;|ZiN#ok5FZ>8*rGWHwg~WjOhnH?FDCToZXdeyV5o;y44PgC-;hK_^H_dIW9ag8hMF9^MT6fhIciswn1_ znRDjsY+Hkpg_FB^DZ#sRF9HaMCZlv#M#zPXR3E*ap^AS4=pl2q;-pJN0Z)7eR1WKhKaG`pCH=EzxNU`@NIQ;TL8u zT$>wrW!{M=nUt02`48wR>i52?pDkVp?E1c5=0^dfTR6CAZr%()ahJ2T68bTo+6Tug z-~_~VgZ_A+p`M7;0!qY(5rXz*0-)w@#U~+n7C=X9TU(pdz5CNqa0f~6Z+CKh+PKI0 zH{)aZ*<1LFOn(BfTh4N96M9Sio2c4Dqfz5|1d6oo)wUkfaWkVxi$NMa4DfRPp(R#> zpwmfwOG@>U>#GeA?BlftTU_2yZxScV?I5b`PJEda#Da?*j4_2XjunNzaLU!zs}=#R z--a^Y+&Z&^H8_yKeL#Hd%ihdHd;0?8o@bASE|ewMYuWdB>NI~k{qd==pTFhLhW|*s z?Skt4@-#AsQu!XnMA1UVub^$asy~MBv;zG*-d3=D&w%23>|Be`R!H;q8R2?2|TWBQZkQ|>?veZZG?bO_0T+|Ua_Jm zs0$_7{DK$zLs^%Fvjpg$x-f{m>`16eeK-V=}y&dz8-wzTRVIF4ezVU$DEHW$>jjI+p&3A}(IM0L_>41NbE+(g zO!hhdCcABS)8bR_49R^47TX(q%=^tT`gT z&X#H5m!4_hHXImWK$mti3w!58rzD)|~DsuJ>szT%?!UUTzaOy`S+%C*}Ir-%04szJ9Z z{09Y}0mKwicEZPD*Z>+HC#EQ7D5jX}-Tk2b)m4k(qgnLl1Q*5 z=-^+pM_V5Ysao=Te0~w#1NoDQ#r3&!vr{}?&nznqniuW6JEjzzl6FC6=32^Lrn8u* z)q)A+GQGP4jY`1BHCfNCQnK>JJ*1L6J%8fXd}`)<#@9>$J1{yE*k_-f!JgjKW)%Mh zR)`WogIG)C3c+G1s)0Vyp@a)AIDdY3ZUBv7K&wijq*SXQUkdEJK6_y-E)Se(2?%mC z{Q03l6p#DKO!A%3l}z^Z>=wV&KQLgh%dZzO6uFfP#=d{jla-dp(U+DQ@eM%PKk~?L z7}Yn-X@3phfZK>~;GSbFLs8h@*4#FFIVGPF~!vkSxuqlY26(Mb^o41*gY~G^nT~rHBtLQ4jP7=>zP~W zHvi25ba^ubO`y>EB{AWdCQFao=c&0R++60h>c~auj~&^}iZ`AtHRbmCx^p*Y1}^;j zYEGDqtn~+xC4Yvgdg$cgL>vCvJzD^GqWD~ zCnNu>tuyj8N4_KQ|8+Xee{X2$RsQ!qjx6c_=O^)*O>UsX);#6hQ##&l0EvVn^UFbL z3>6^xIt;M35UpdkK?V4sU*~`I7fi^#oGu@RF#{7EB$PJCBC?V+EK=;P;k6i2#+1L3 z^Us%yi282=Irr{-=l;hKUDX3zM&rWME5}959!`(muLqdd{8v3xQbRFke&Kg+{%=0( z6gq$1xU2o{vTvGT-fX;Q?%FDUKX8QV^LI2vV-u<>fM1TsYNE|&WbJKFN|7Z03L3<6 zCLIZvcc7e8!yj3|8A#oZhrvI+rWDw&odCKy}i%azFnPl(t57;=F7k{!SvcQ^&s+_ zL8`>xWIz|?v17-sf-Voi4@l~WIdLc)M-hpWLby>4srIr{#@kTiwz!Avh6VLqf6;~yJ5f0zCE(%YlIsJ~59AJSMKe9@l|<2p&B6LgRd z2W5b3b`v&(#B42EbR|*9d5IrSV;s$0o;@@s_Watq4_QNn%BE<5t05^t zUc*zE^vfMYKzjq6y;17TajJS5!2pLa?2;B>wS&k~xZGBI5$)6=YNAW17TOSK&5&wK z2tYxUqK9>LeMw~x-S8b~wYHzFfWBb?q*cNBp;t#*_joRtPT|Ak*A!Iz<}-jnD8*rc z4pNVAsv~~@aQqCAGfj6=(|b@qhkfxn3mPr^NUD;Q-9WhGb;$uS2*Qk02*{2k zo<_=L=-Sr9B>gfBqv|)LBi|rBXCnGwLgN7T9%vRp7}6j+4_acVT}{1t5CkLA9bhE! z8n>%gKcJGORShtaGT^4mbhUp3;j~uLl-I)o7!2H+&KuN%v(fw$Lsh=C4>Y&)Y z+u-#})hmO0ZHg5X!A$Eu2BL~*GcXj4fCR!7Nn(;O0m-+TK%0MIK1t^iNCww1kOSVP zrepf1Bms2DaGhi|G9|IDnh=eOf9gUR4PsE@DRNNY*OB%v3H3l|4b|qFA!@>)9R+mj zJa(xt2b~2lggkEic+AugzD&=X9zV_0I`<7UmfPM_<@?BgmzZ+=g!|GfTP`luiJI|? zVCi&?IggL+aAT_E2r4pmUr04Ot$6*x+*{>Ox9Kbo3QJn?+x*Sz{6pu?-1Wi#$`zNT z<=f}YF#6e-Vd?qn4X4ajd)a&$tL#pP{Mu>84mI`_omTz5wc2N1&k7C+39+GE+7c)s znS?XhsI!A~Q|*flJY=KEQyYb$Bqktu6Qd#&FmquA*T>m%!jhOjAl(kM)AnMJr4``G z?9pL(7 zm7(Yv$%Ge#2O|rdAc+&baitbsPJP|Sp|*Y!@G0!s*l@F7q!qI>&2TJ~0gD)y7df4s zCiDF{-yP#BTD56Vv#JI+A{R~m2f&Wypw#5VzT@{CM=!;f2So?;ylggFv4H(U|DdRWDG?udM9vh;M^%HUkgD%pH~$ zGPu$%gf1_*83f{WW7}toI{moTi1Q|~HGA!+_*0b*7@^|UK!WC!2((?->85O<$FpO) z>}}-qjqtARf>Fs08hl2OrKX={sd;?(K^|Dbo`3?kUz5-e#z6_)aT0|6BfS3IGrCHQyl9P$4_7AjXHLAAxw>Z zi9bMcI2S-Do77>69>kH@WL+m0e&{OvTBM~De zZDbu$Di3lNL;#&vhasv~FxeRBkJLOXex&PED}K(YehBdtaLM-+%iFR{80zRaQR#D7 z?xfm+s|+TY%L8;ixj1kM5HF~n6} z-S(5B#BpeQu3o$L9ni1D3>K+Z!y(g0Dx5V?pVkq}3B=FQ@++LkiO3C6ibt=E6u%3l zoeTQ;24=a%1cJ;-afkz=;1s%j!$DI~2E^P+ZKn!=>f z3$!B<-ByB+Wsm75A2ews35esJm^9XF#{}>I<;3W^mMg8lFhPRx;6_)iXZ_q8U3tQ@v1`2<^b7ywR5rK!3vy9<&lqBM`P$FhM-xN!zFj zVQ{Kse6B2>eeb*UUIlzo+xs2Uk7KzG?tja#Z&TodGJjKMQrNvV%a1`VM!6ZaJA67< z7FZ8^@Q5D+(zr`f85y2c@o~>^s{u%IK0wFWp?(2bbpxI5#t6YzP@c0%A9SizCnj*k zAdk2o4$~m`o~4tmc8`4b!8{l$BT9|A4_d*Sl$jc9N8$EORAP*BH=h3dd;uId$ztR~ zetN{Tr}H-kAzU*1MaL$K0B=!bEL_Q`DKf*EFp+T!Mdqd`e zTR2?$E5B-z-fPX%$L{+;MX-E6YQk5<7yGt zBU}JG$a+PP#VMfmY^3tu6s_;$O~Qxa_GFQS#Vfr}Z&&n8R0|>{N1?^sGHg7cWtb%(8w_?nVCqD+n zHdhu19FL;mR8%*6?d-awq+c(zDLPt=NGgU)#Is$i73hv*MiR;OUf}jtI5W))wJ9vI z2lYixo~&DuFLvtZkzjGwDEIAIQmuWD^DF$j(Ml$k zTk@0zTh`O5t9U1F8>V1=z+_v(w1jc?SEw89M?afQg8G%+h4GeLRrTdek>tkcbs+fS zxr5PAhTqR*(+Mw$gC^9~8Iz9M!bPO(T?;B@hM>p%VEB8}^LycqQ`Ae9hc{r9_1O4H zVZpD#sb>p~a(Cqh>ufl8{4}dHSAz!tY>)c=KoQJ`2OK30E zAg=4QoIxbaLXF{zgD?>Lvlt=$@S#J4%7lRH=Rp<{DtnhGhCnAbkJOMas=xHiDDkrb z#eUa%@ZJ_U{j4Hs8!#5`qRf@YTBS&VRo9AXy8vWs;yN`?l0X3a2)uTIRn7*=8Qmk*w2OFuR$wrb5W`Pg}>)zYnd_xH!!9 zZ5(J<9=L5-{rj92>{ph%Bc(S8)K7rD9*H`(i|m%@lr;7}vwKjO80Uq^rabg>a&T1K z2jk7CA$>;LCQ9_4Zon4I2KRpOCvbKv+aMo7Ca^4Dwo}^z9JUm^PO^|y^y~^I=k#kL zNvkM(I=DyZ4uV0w~Ji*etDQ<@m|VS9ayuwjzy_rZW#&@JFN(Io^_D zD6~{4-AMsIj>%pdk+2l+nTgEcBMvNTu`yfGe}tCzhIw#?$NxrgO@~S3ao!NJn{yXd z?QC!-!mJu8g<~Mk&c>9oA8x<;?J|%37_0t>+O82n<;b%W2O+@o0GVVp$|J|BU%Vm% z3p59A{4d+ zfRkRVd}x!FqaC;ViK8AbO|{KXxK!S*G3ia1X+`Xj%KoWQ%WI12O*qbj6G=m_*-VlG z%*fZwJG6O6zIH7i9uuK&Y(4nPzw99osQmZG{&zhRmdUUP%I9l==+rCUdJ-GX!F}YFXzfJ%l*sca2_A^JhWlfIQb5FMZsCyVR6x)>|0_iH#)uRqyD{(cDCiyi6FFm>tmHw>$*=pAJ9M!M|L!X86Jf|MY+I$6WHGkfs^p9l3JIk}%eyN(a70o%!c2Xj5PM%Z{nBaIZt1XXzuRi>Qk|+8q(xxBQ zj5A9tbR>s##L1iB?bnjW85~Lue62^4)%FBwpB;w#ZZY(L@`<4~R~B-HjAJb&fY7_U zyUcydv0M3CNS>z5+sMEn^$uL4PgH?>$?%L{Q(&WG3YG3&lr7O1VlYOAcVE)V2>y5F z*B3}`gb3i?3ecFsbrqmZ*WZxdzZM1i8Z%RJNsKeQkK}73l??W^C-CdZnVjg~;1`@k z=tVM zO@rqZDhP5}q}miT;*B^-Q_v;1gHS>%vKT{*%!?mdW+pQH_CHS!2M~(gS_d!*+9zJ1 z?JV`wu{lC0TN0QDpMM7+a_ho0sZ~tNf`fY;BgTZ0B>)aAuNH?|>0rHdr&vdDEl~6+ zpnw59?&l3*w_?b%#dr7IekYO~rg@fyx}Bsv<1m(t3PsG%-i%6pTxuX>t4*y}Lf+#z zJsnCR2lFeSXSJBxsaV4~YAW^h#tz(cGULcRnS}u8MKHGtR=m|aMmZ{4a9)iZ1MglWsaej z)k`5@f*n1p5H$518OSv<+3?cZfSH)yf-fWtRQv6*M}@ytcvEHb#ov|o;-qIYfF<_s zAFnN6ob{|o#}G-=1DGbPMh#s%evudgPPqCEv*Ul?LpCsVwTVv(!J?un>gZ*myDd(g z$*$`guCDaGM*x2w0D}X!0xh0_;AI3p6O%12wFUPvCj<7x1gUU>-W9E*K??dolPWIl z70M0q7;YjdTX|%jCFoBE)3$tenF1lzP#zI!O!#4wI4h2vI?G315jLBYp$z-muZ&)iKCBKm%iB3Ykh+}W1{sPo=n0t@`u4&S$etBYsafH>i$0E=529hfcnt}4 z!74wDjr+pwJIy2E?b_k-nIvq-8opKo{TfA7O_Lk2o&8!v_4?K*++7#Exf$2<7SM4k zD0;I4Bfz#bsjZkxVBb+YjJgcsKkiY$U~~cYrKW&c=B0OHD&(wAI-xmK_%;zY&c^8uo~ znBz8WC^dTS`GQ6c%pHN$H!MiT)YKE8sZ`05p(y?+3PMI6y8FIB-y=4pp#<$J;iXZ; zTM8I}2o`u`K9t_x-(awtupsH?1Oqp(!uj^TJElo8$h1|R*_H3t*JzA1xa6rMWP%^SJ9Q&sEyd#p5~qBD-WcKC+5s}P!h7SiiAUtpzH#n} zcMgri*0Onr6)~xSRxgcyu<}4+yG~-e%xH8!YO(fn0LmqAt8J-FcP5gbT4@{}@SMDK zSW;Ry6bds50j`$s{~|x>3kZ9Mgx8gV{6+PlD<5(CSxJLNIn@{xRq+9)n4)OK3~x2| z%zhuK2KO9tU4*EY_0c}O@T`H}{DCl*8CA(2nJdw?6sbeTjloqmUS$oOA>INnN;+8e ziQo&AfJ67MwT|IHILeh}?t1|UP}zp+O8WkmGsi42$OFJ+K*OLnNZUDdpll(4A%bir zzxiLVEIIik5L8kyPL(im-GSF&eJy20+Lpg}oGS#k)U@fR+dZj)fZ_vR%+2;RYr5G@E!-4D_N2dbCc$Xy;uve0aBp5b(&5>!|DlH zxXioeam6cWO@g7=hG3~SInwC?a-nL(3}xI3n}PPIA`TGh85pA5v=@-S6<(+MUfdwa~ZE&h>CAXR@w_U~~f|(=>UUWbRh{EKAg=h5%;MYE#F>W5j%*N+-p?#ei znc~pZ8arM=f;?O;(Ea1z``05;=I*Y@BeLQS+~EEd7mFNs$&PhA`R?P7fPS z0o!CX9S{HeZ9T)M(Y;VCJ6bwfH01_jJ!gXrQeoEvbpR6EKq58HI6saufV9>-oS7CX zX~1Xfs$A!=2b&PF-|GRL`QXP$I1nc+0R^-NO>{grcgWz`WQpa=+#=kSbRnW!qkKXw zE}h!nxm-YCRS+K6;xXf=yoEf86~P54WL+s?sKaW7rSxmJ2Uf^x-a*;g8<6K$q&*O( zVM2V#6G)j1F8mz5OM)6*f6x(|hN)bd5GJgi5N~RBU=CFQPu3Eb3?7-`wUi1Uo08zj zUU0KcS)YJP<-oZmTN41uZ{He^6woz~v?+5b*cSR%mC&}Jk{&>T&bLQ!ggtLkl?}Bt zz^|ANQ%L*ac8c(BS96H;DdP~Kwp0z~T;F0tdqSlAI8bq}JI3XVAOm?H3pEgl2(uNM z5{8KEOg0w1`TK^V1D@KJS%OtuWDS9ErFPv~U9$x`Kvo!Vbgu6um~x}x+ZziUzGu*i z?5D*lmQ3Df*4 zo*-(Q+tj6kP?Tcy@rZN?XVjjbETUo1Q=i@w`R8!C^WD`FF{L`-mXc;|KkBNl>Y$|y zmZk%%uSVNQA-eU~y9BJ0T`Xg*bYm}=1zET=Z=5RCXvB$()i{T-fO`g@%O}={gofm5 z0SCgxS`^xWYwks7AVmlQco>7ozx`oI0?8?K;6P<$;rLD1?P8A7&-HWJo4JSsc!WnZ zIKXBQV!f~py|K=)@|2f6FF{oHMoPqFTjfcv#J1O{N2HgEp{Br0#$9G%-3jc(y4J-CY_l-g~;$2<+Im(_wElD17pV~?BQor8~eSD&lw z(G^Mh_K2}|2YbGtiy|A!__fKEeHPRtI_2 zXOFY?J!izR#J~PryAc`oi=WQjPn=8q?c`x3{lXH5?cwB(n%CXa;M)G86;VlZB4@=~ zP87h?*vK?gBPylw%Olc}FK-~bP)nRA)bkm<_$Tb=Yovzje!W$2T*!l4&8;v8Mja}( z!$qBFnMjeCp{9pc-@$tr&C&UC^HwOK7KDWmgo6J&yW}?XPTRB*BAIFxWsXQ@TjBOO zXQ5l7WGw_V9z;ue=q!?RINM*X*S{Q5*$(D08!gHbs7ygP`zkfCxl$!`p$_=BnniH# z>tPg!z5gqy;6_-ZW+GLtC^+ZKDkFFQi1F!0RCI*OQoc>;+2qX;{TYeJpjfpX_45tb zldZv1%>y0E7tRSHC|HHBCn6uVLagG5nWe;rEfjRZYYrLrr+TsX1GVYqAZULwZHksQ zD~fz^?iHOv2q>srJD%hv+h0k-QG(MVZ1z&0jmP)JcCwk4bfjX{YBx9lv=&~6GQLU@ z^%Kvo89z+(gUEb@%}UD}T5zpewQ?FhBf0OKY;;R3+du4~+A8mtmEJdiM88NQRrrQR zLz;4!Dz^s($`X}sC|Gt6%BZdUX-f7`>JhzbOt2k-&HzC?7!aUHUl+3r(cA!l@!cUT(m8 z82Cwx#Q47-Zbld~EGFzb<(8CkmjR$Ky-p9Fz;VVrc_)WF`GHhhTHC$cC8&I5i1VshFMT7<`_L_-heK9#t1reZ(*2>wDfFvGNIlO%L@ zwJ{5phz@8B^65ZouHh7={Ev`(sxTTTs!CaEhjn%*hHDV0F6Y(3wPRVIud z$Jq)d^=&8!a+4x0uA_3D<+L&r2OM&X9@JaiJ$d;J{LEUbWCvJeq?-LY|*JJnQGkK?UV6uXTWD4MyzYJaSk8@0US-`c4G=_*bj zgwHHM^&uC9m|>~`p6Y!D=oL9qnJTKP)gUwEbJg{Hs7j-vh5Z!=bA^eIkh<#x1Y+IW z=?@W|%BL)nONp!inpy^(1h5=FjTfo}b>u}Wb(;r%dJMcp!4H_id)<-ffH!hq33!F| zTg%~0hmGsIu}L^qWr-{O&K; z6o$dfpWC&f4Vlz_dC`rXsrBt`QW6dU#vo9K7}jz}-`3IuW*NUxL0CgKmSU#~WSYGJ}IQ0jZ8W0G^e z%m7VxG4Qq(3xA%oS0F?Ix|KI6FTrVQDnw@N!uENPmytqEA{=Im0v8KWStQ}}`SyD5 zTFQrUAXC|iqNxUjavqw7Y=&#IZ>YPLtaUOn+Ay)5NoK{-XtLzTEcdql$V4q*22`f9 z+N-kH2Luq%HH7s-l1b#c^A|UXR)k|UF9ZJcpBT8c3vaPgo36Vei}sF> z5<*8$u+Pq0cYOA%QxlD_tSxES)Lk9%={i4;oca@G%cICLm;q6v+SQ!{=AUHM#oq}# zoAss_mN}i{^ZRfOK_&S#kdcTQN(`w*sho)Ps_>f{wwIRyG>G72x|2Xq zh}kTsl(CJp=)Y_H#0&U}?y`-NR9yfAok;EIHJRq`gYx0F;+2cLP9PU8O*AVP7 zMI;jvHODze@hd4cnWS?S!N?a2ejP;u%7nt-5Cec{)|<~ZLn(bRRT`Ao&8bj;GQ2!G zwr}h`9KnbP30J!T32|5~5HQ59yF-SwrEU3Je*n5P~M!KvN{(0}k5; zw75vB=!>TJTDoJJRR+z0`J0^3 zde|2oeXgPYXayk^Sh3k?D%=IAR09f{W-a#RmqnA`;r;2jOV-?5036Qi=cImRlrAxV zC8i2W(>g^>M%TtG>cpt+tfcN0Yj@<}SM38pJGmtk8YefQLB#p>gzl^zFlW;?g60gydO_4%I-V3Yj{i>?m-MM`@ zd}_gu$;M1Q*qR{pT4juz^A&zPe8C{8ZpP7^LPV?Db<734SJ3B?43^n?d^8ie5+!Ai`YmKnm@9 zfn3}KC>fyaM-l+6hsj@nlX&4fhR72E-@d`>K(d@mv_y~_Yp9Y(JxUC7VxQ7_BvNB< zowDoJ|}O+EzKfveJZqgJ5tQ7nbmTIcztx>Ohktu9*Wr zR4XU-R`#l5~Dd3`c*b)!G zW09ra4LFN*l|*bq(Vvfrdn;`J*>X?gHxr{3Rq{O$UE~nKl#wM@AayWlF~)emA0D6# z{-rL_R*5VO?)X~>UEib<63mOVTi6uVKDGC7KG4FZP)j|kPgwc%z6gBBp+)x*i2NMM zJa1x9dj8)DV9^kTKo#r7=+ z&7#kg8@GaK!vFTcz&g5B{PyS&)6(P$cAXRpT%hK z$eX{NX?k85Q$HYa9b}J6##;8ey@&Ye?^OMMYTgWJbx!A$_;EYJ(^5?OKBaL?D?{v} z?>70#*ytD(ino-6of^1Q^qZ9#E0!luA2s;(`C2e4JEoeA-&p^%|1_grL<3=SQ4M{% zeCkdit`}NMg7@?fd*k^WgifEkXq&E$H675?HbE01TT!C?HX_JZ6c7|q4_%lw+M%l; zc%;vQPmH@u50Y?E6K)8l1hoK_C@rLXjA4g*vF(~(@1skhV}G{(`cJ1kEfVqaF(ELy z1Y04h1mZ>B2c`fKs+$B-0=oiVc~si%f8RtHwlp4<6fmcVxn z?`*giodB}^AISmc)ZzV4JcA~hLaF=h=XFbSx}f>nhm-4~69^T!o&WF`Kx2*|@mBQA zFwS8wR{-r6WIOs{zcC}t$Q8sXQuKUoeBG29Ttx@|{tF^lAzYaxO_5s$f~0@X8vK1^ z#t1O2NJFizljjs#&nt+;|3VrEj1Kzca(hPpO>Q*C`F%9fU*YF(0F2`elQs7Hj6B+( zy_mLr3+T%msYl=-{o>(7Di4AGfh->#q(E7x+~twqC=4f$jS%8GNM{e0`xCTk(RWfZ z;dN|H5Iv7qxK1xkhUyA|+7<#Xtk#>x_}}5L|C1C7 z0fGO18Xo)qdmNVkzJS41|L+$t=*+cT)v@->z+o6W%1#}8@E-96=v+ZJ!9Ol$2j%`LXhomx8aYohvors7f#?)n$)X=p?K z_gh2H;lB@Oj-RgcE}i*GylFdvPy5C3_z|NYj;v-nR>BKx<7Vfv3t=n*tX z7Xqabh7*9Kq-3Aw!g%xkkO;xiM7 zj!It-myYnBU%e-W5Ju>xo^XTQ7b+?xOpQ|q>E4<#2l3iz0xS`D45 zfG@;eOGr;k(yC)xs-Or|ATm^#(=sqB)HS($~Wc znZvAaNd8!}So1Ea%L>Wbs}K=_sDlZmorU9uer(2qkw^P{F^w=K zzYN842F2*|Gsvb9phCak&b@o9f>*xk#(2rAXqClla%$f8&MU1tz0+{y<1?1Pj#2}v zMx+?)hRUiiP++U}d`Zgy`bOUu`F?}2!Sw#GJoNv|OG)e+(^?{s$O-lL-wHk5cyc#> znfUww2vv`+geBv7Um1CMi?`g>nB(%31$g#kcY9q3hrtuy*_aYIJyb#Qc0x zU@;m!L>~38oxY142hq|cyDBi%$9gXc?zCI4EwBFgK&A7khYka;ZXIwIg_t|QqYr@l zZo^;$f>^P!v2`dqpp|_O@=hC1oLX7mUC~}xTpWD&?rc2xgCxfbUA!qFG>&$Rv=y40 zPB}JcIliGLM)JV@Doi;a44r%>4!jh?sVaLaI$tDN?AUR^2Be~Z{-B}vCh%(6=&)~| zkX)ed?$boTv>z}b2Ms=0juli?M3CT@p&_Xe1DoNY=^<#T@!o8+DRB2S!oqh*p&c5e z2nMS~MF;!Jz~v%f}u-sNS)xt@pAa#f*P@8`}P4#s!&k;8k37 z9zSqQX$j7q`>iI`NV}cMT*+`HEE$r5? zOlYhhmkkDIXgjzjGaLlRl8zIpqNA~Sn?Y|3D`k|&wSt};{_i?{jsvN#t$n{w@9sH= zX5WYGJ8SPif)0$}Z@`ca>*)AsYH87I0bU+NDz{~NEb?eqm>Y>-)?T;M=l=a*5>`f& z=P;nFrE5F!n~xw^zV547@6cybn>>GrE;F$jV&fPAy_K6koJ3HC9 zL3;O4>nE9P$U0KXDL6J(m0f_94lwK_fGd>ef40B7a;2um$Pu*tl62>E2KBZ!M9{R* zl?e20UZ?h+%I>>NT)YYG0DX7s#DE|UBsmHFXTXUc|2TIvt>V2bE_yhjUX)%cZ7WM>f7NXiQ2mN9vY&<|k*Cnc4f?!}HUId#f2%McFY7VlY@a8rc(D0%aN zrqpwtS6Db?4QupDjm3&ZONK*2G~_%5-Q{@&XKvd2B|1F{O>aq$KalP`KKTy^5e&qr z=;(xlTDvJv-=gph9A%bQ+uK1!45sI0TL&_SbhTQ>hPHZ+ST1>iD^c>XT)Fs#ZeTVHQV95UGTds=0jqAa^+FWK3qv}wtFiaOu7HZ#y?XLsYE$-GHt<(ec(@`~3R=^U zT0MxXLI?nTK>`LmyP#&c*(+D*wvd?7b#ww0!N3g4FTrk$0f`u}_o-9rhY!PSgMAzR z5y*@k;h(#WH&3~{r%!BVV$!JixVY>(Ym#~f{{jrYXAmzcC@BdkDbYmQl#uMX`y)<+ zP3JnyhLmri#zJ<9Fxh}J(cJeXAQUA*90QKT&)_(-UX|vOrzoMX#YOA-gRwL8YAL)R zGar{)hz8C4ypJwVLpfwn<)pz&5$wM^JjY4rZq%3CGw1vg1`Sn3KRF$mq#+@Y8}8;7 z7KJ!zLonsA3abW8Ej4rVa60~ceIszD)`NMWuBD~*-ZW|Sm8PbqQME~hETK<}5TEJd zxF0?|r1w8ZRJUEy79C_f#$OVQV3Lv_rLJrD`m{5SSMh#1q_h-H7At^RCuYLT0SDs3yY8MBa<`^AUm|&DrYz40?hlZEFMgu%2?>?B zW4E<=d6FvHX@6=66Gv_MV8-k&IF&mg2}!ma@Kao8Z;K&>Aua&CHQ)Fbf}!LseXrrz z#`{PS$X*TT%?Og*uGY};U@Qz}^;yrzL{LXSJ!EpL*Fps>{a4#f^`>`=Qea?jrEVM17z_ zH-t<^Gv(}t`0c}m)ZinUyB$l8WS+?L3Pwn15nk@T?zMkKdM5shd_##GgCr*?9f~o{ z`g*tkl9~o`Kr*aU`s>=)1^REd6BZU`N0jX=UBp|!+mNwFM5GYhIb`?k;2V%i))Jvb zgLx#HuH3S+1veL$=+6r7loaH7h(^pX!KLO)MnrICE3|NG5qM0H=24!DA~g_qNwPWA zv_{hP;*j1dXnxZb_o?CmC*Ywwpsf&#a4HL#(MCQIkXuc9XauhQZ`oRkDw>T%S zf*i>G4gbqEPF`5X33Ky7Ib-y@zmYx)*r+6DfYZ7G2RC(i;lXzRN)PP>a>32*152@d(hC3qw*15uLqM{gDX_iWvOfwab?6pdOow zi6jK=iI{#ROb7;e8dtxz>`MAgUlH2Hn8Fbh6r56ajukLvxPIv|eoCnc zPH}8gSVz*+%RKG7)|y6TEK!?B`sZgIu9B_3?`<2-SM14nxsT-dcbtfM;H#ax(S3t>36kOeMjZdFGi97c@P$~p0ll+7@Uw;4n zcfK;TJ~U&D+`!G^nl@6%LFNrO0L|JETzi(`MrM7T%vsQvNJL*;T)a6_-PzjK))f3D zTEmF#WWRu{gnuqo|LfPU--zEB;45H`OWc_+ac}BZ$AwdP%3E~cn$Zm=SXFaa9n2m5 zal3ojh;6_IjvZY1=;@*CBwPzkXu{Krgw2zrZT?md#`AjqBq2*v^O(-_ z88x>J1$Q>=)G;=GLWMLYJN6;q(Q$44a;gL=Xd;z0iQUJ>fkgA?az3N2tgOn9et@~w zJHw6q`khI3ZANrl(4mS`kY)^#^g+#GZ+#-G19J`HpS84Xt*yU7k+T39>_hBTph%S; zfvo%*rDY@vC2S;x$ht|U$o5cs2WA+Ng{)aBK4nFpqu+#g{NF`L^&2S;r3=aB5ru_n z_z0w;SthaMxru?kD3RX}em=dW9mB>Z82`x5%K8wW#uo-IjeptMX@WA1l9}e_<}2JN zQ2MIBekDOiGImDg&BX?Uz9H-gK|fZ)olHzn!pB8`Kd;+^CyNxSETa{N`$^Ebezg<& z*OJqJJ4yY9n8oOaKQ0NF4!kyx-1I<1H{~gY1(krcsNlDNE^r%g3Ze`bMLb3<312|w z+Ot6G@ZrZmLEy!rF}N1LKV%>$t^?_se442iM0o+@ho=bFd)ya%0Q>EDeCf*$DN3%y zO$!M!BS05;_KWDactDFx*-;S`_}jG0r(I6!Ps_hh*Zs?75VMq#BNK2#o_E08n1`&a zVi087G3EX=FmU-B)ukBc&}@gjwFyv5Dn+AXV(?+C{$4wBY{Pl$apJ5h8%8kn9PvI( zsJa1u0i{+dp1!{Q73|u*Fv_*PY~l!Ye#e?;@$sQSLA$XF3GhICU)pu(Ur$b8{CO8s z`PW(kR{s3)QWakfN_kN=0-0VZ9rI5cGaiBry`QKEc;mce4ziLFySVA+)WS@jl_GJK%FTBBA z1NoQMfpdGc-fj+9DPW);8E6$9_>J2(3^%MdLbq(__is(nh%r+1`>v&~?g<=-55C|x z5G+4nHuji`(2V(H9!ImYx;=pQ3Bm!5tO5Mq$04Di1}f#V)~ZLS08S?M3s^|Hh>vb8 z=FqQxt~xTgE%00b#>gZ%Ocfs=c=!oC!6=bmu1F#~08J5xrZ%R5pHX$A;TZs;>{gT> zSZDKQ{-HVa+diA@A)!0^@?S(AQo&e>D8Gs51eZiLG9{@T=&NMmVQ_i8%%q)*>uE|X z1ickH7cle#OeKf_4ro`Atq4xnxiKXaYRI`oM@MHv=t$FN*59olC-_yKt~~ER&|GNf zCm@V8A)0${!w#G-Zf9J#wo|Q!zrDqv6ahY4Bz{U*BV|UYTs=-YUK}(t0G%e|!thL@ zz>M)!^5D0vWC{Z9uS_KP0MxK{jK}I=AFAVZ;8=Z3095nm2Czyw$d9Q!hs^6?&gXI< z6bjT{16InTt`}CLSvqz)>HndTpb1F5B-xe&A+7#Blobc~VXl$jKwta%)lC(tTGUDi z+JFBMDvml#1^Qy|&|@5|Nq}aed|s(2jb3kT9kuV$qoQX?59r; zW{pmOEZN;tIS_&A%!1T`%KoNGiq}trg5IRwRoJ)hPtv*t+)ii_dWgZ&UXsJx=Z$Z0$mRn z;^0120Ta-}A!iBfgu}RU@_j;fw~tOV^j}soOQMfoW2}ZZ3nb@KF#Nfe%;X5RVKT2$ z{th*lj!Dn&dU`g{BPC#t86FVx_wpCo!=v}w_~EdNJxV)e&{Y`IxuQ%pW z5d@w~8oHo#OhqS!Bf5BG-mIVBkJ2TQt@tLSeYO({Ab-MSQ|Kmml^p=|YwutegDeEu z0jTNefG4w8wBqc2@{wEMj#DjI7VtwsW047C#{=LOV*Jw|*#I;d4Kn&QPv0SUyt~m# z%BS07;OBHS?=JJTaWJz7!xQxk7`rBB$go} z&{|;8vla6FxGzkW#^~vOe4Mh6{y}ufYy$HzJZ{Jd*l$7KN!$8VOcEk*pjZIRmIy%~@U>x&o zu~Yr)?Hi*qpRpR$U=X|;KxZmYbCixya6Qv(r^5W#T6Z!{&@=0{?s8T`=91BE%9y>{zLrh=jrv1>px-5RB z>c1KHI`qfq{-=Sq$?5FB0H>#iU~M0UjI!QhJCadg808IWAk zp?u*_UJo8Hn5ae3ekP%MI3IGf{5vyIQqnvNpgGaJTH1$WOWNJ?e8PJ zkMqRmxT5q|F+WrH*46QGL$~zduX^_f$U$Gc*v>qJWtmgsEB}tXt`GsR=RSfCJcU;T zX(&eB{K}t~W{c{sqXR&JBMJSMAjU~3tk52+pO&NGd7^UI_VqvOZH`lw7DKzJM!+9WqXj2A{zeTr^CM7|(uK|)y>)UYQDx=l8X z8l?R|(S4aF$>xS&PHr{o(mu&Ej&G2=FSEB8ydRf`Id{w_S6ir$nW z5nlpU3eXB*g<;_5>_qXxfezCrfvMbBV zrI6S`rbZrz<_?n+Cl1)!#@9DAkcloukLLGMLyu~EZFXE@w1uF)(Xy9bZ22E&Y&F&9{{)tDSGTSFEEZNnroN zd_}o8=kK?qHaY$=uc=M-R;`WyruZGQ%qm+iqM3)Q(?h9m* z+YB;gut}DEGi%g^Ol-hlWdGlgB>-%J@K!K()N&^A4h*!1%lqwB*>Nap(nHr4OXTl% zuMj#orf=2r$DF8sv!0SUC;C<01WXOPCOzx+sy!wAcx(7I;}hJk8!DG%p+K^G3Pa;^ zlh~jY%a;eo#E1pV8L9$ZiZoKrMgdM>Fmd#FoDqNi`6ygpjdBG$YhQlq@9P;+wS09G za+ui9I9y`kn6;3-r$f_RZJQB`+#HW-J^NmT^(mVD;_p^HU@2^M6?} zx1lQ|N+DVoNE=5jly5Y0lKl7r_Cg#3y)7odl52yX8>P{X0hbdPoT8L2DLI*iM4lcJ z=F-@oveLDN7U`8am~3Q|RBs=@RU}{QU|07J<)`Hb#)SWxml(CasG-4N{e*3O^G=li z;V#it)WHgqyz)g+x3uDm(ISHt9LW_Pdw6lhnKmz~&94O%U>f5uAZn>=n4mv>wy_%e zjOPNgX3l(-G*b<{LWlsZ!AD5KWeLcX2e-W=bi4{0M^krt;C)0G9 zj``zsgmm*|`$GGSR!w=y{<;;y?{yCIE~Z`o)gzCI2E1#%yxbFRX5Fr6S^Z= zDD%`&sR`XQJgX%<^!X$I{V40saUgcmhj0W2uKh!Gb$gih(=O?js6VbG3!Dto2_IE> zT5r{dl(QH5T|)hB_~2;%tO-P2akIBr@q2y8MB42(RzE44u5V#2Ab5@`p}$ zC2k#WpurEBlCF#2bzrR3(Xl-bzbRXmO0RBCtyE{1opV=YKaP%WJ)ofQPH#EPXoa5# z4;RS87kOoh`XzM1t2t=xTrT)z#|?TPeWt&a)ju}7ZR)0V=Tt8p+Of@rTeMZw`*iHw z4!JkUFGHsI_MB^Ee=WnL>@wV1)9h=zPb|7f$I?=D+0epwaC;q-;4t-u{lCf) z5L6kJ=DxvBrn{uY)GtfFly}D0z=$Im5oN*r1$+ES489H@KD-h%2?F?a2$q4^=K_{`SZA@QkrXCM*?s z`RKw2?gIU(&n~44gnp3It5V4~*YkMjZr9Q_%bp(_beLU@&dj;C*48(Sl`A~~tuWcS zM#F;9E}ubnbyzk`olSv*Ow!9x^v28hsN?&!W$ogWbbbj>dJ&RgeU$IJ?81h}j#bUC z1VatJ2#zZJoO!K=;nk@djzRzLtD7DA>As^24yWiwF@h0#rp*htFq+QGFi8*dm&!r?)SU)DJq_4G+VE7}=X#?k4Wd0F_u=_ul;-))E$GwE@6No{CyNN3wt9SygnC*Acg zOb#jU<$g=7eO&83meVzx$@J{>x)5yFARsVHp1E_I3c$9$0W|HjTh>Ix#C+--hSfj+ zdH(!)4Nrk7nuypSyboUNtF1stdNR?1uI8XPb5xQ2qrigSlv1CPQW^6pga3l={-qJ&c=< zzbLTw^Za3M@1@PRvKUBHfzZL7jQ$g@c7MP6(o>WPATR0(#VP6V(D!+;&Y{cQ&sbO^()+^S@vBY;FSE$6j`vXvyxI?djY6n7kK}-fW$!7+xHPu zd>xDAoq7kP(a;XGAAQ$`sZ(Fd;;y=0U+%_DE)6+Y%RP|HvGPW4IvMI{*efj*H!1iC1$)lQl`H40 zSg|5VbKPAOaAPm%{kvZRVdbZ&EAN8t5Lay0gz`NWpqUg@Quxg%l;qQ8UeDUepQX*8 zr7K?l#>86tX}P*==eSRf+)5cetMhgX8#N*)M!wk_FeYsGmyC-VxlT1>Cq;HY_+r25 zTy9%gi;$*x$s)5W+*qgc0Xub?-}=5!Q$J z3ntIhIFsL3!5UZUC|)GFn^Sy3X;l?h|ILM8<3|;qJ>@em!o@HlInusmdeE}a z+PHK_r3;RKB&CcGDXtvX*v*a%t$p_@S=`Eh2t^#e|>0ZNM}@9Qbf|&-`DdiYC}U!);CO1DI2f+@-=1=#=jNYI#2X`aIuxUsq{U^ z)}ofb4pcTj&1kj?Z@Is(MJ?a++7tcl(SLsk{XZ^04QJ}}=a}$)f8TeO%aeQD*4^M; z&+!Vmd3MU}HwL*DKNjk{jcXAIIk;H-p5$(WjIiU@*R7W))Q9R=`9BY7(1@|OwP4ws z*@oI`aMjBzmJDOp!ymHMp>5Vg@kyTJCvmd%_58P*uHUAn#~*J$^$+){Mvfb;mMnc< zvaHDEWCCxBcu{>~{wkMxp#^-0X30t`q5Q~@TABRMA)RqDHD~=Y`TyAK(JxJ=+??Sx9)wL zevO^&2EN4XoVX8(*GEV1jLp4#!_zmkO~r&Rwu^TA=*| z&ExCyt2R`gXxgfC)G_taA2xcs=1y^)7S`8vLom;(J7mdkIvQi#&e>}78=uyfw4}P5 z`gNLGhS*A|wOHL_u=FZA8pk&X{?DcTDqTOx*WO~nq=fO^KV&W+{K-|<$++GV!mae) z+GFsmrCX1F(}Dl1y`ynwdTlFI^b(1~YL(W9a&+`D`5fWMp-5y4WAVmes4QkA%W+hv z==0!^sr0?EF_O*De5~HseC-z0_c0c$1JooSZ z`aSpkJOiZn=1k_%?2Ix}Zy6Er7FbcyL{_uwy5hj)XHdhF@cmc>)4v(3t^dCXA1K#Z#t{Jcxl3_n$*kp0G zX`0T%=@@ItSG%0p{u5^~ADv5F9{XK{iwNQf&Hg0iNV{wd7w_B8=q%^&LCFdFiX4i^ zd-nY1m3bP-FagMA&h`VSpvQFIKE^g?g%wvdQ}^nixcKCca@$ zyQ5-b^yA*$rnofoN!_<8+j>}y3l%xMe@`}wJihwd>gJyOL11; zmRL5)(tH#I56)+M{GB&$UyHsEHJ4E_jrlLm{5oz7d?NKKbJRgIGMzOK$0NJZf&s?) z3GF>5f0!F(LcO4<2QPqdq>9J1eA?ldjz+PHm-k+RwlDC?r`)OVFnO}#S=Y+wA zj8~~svQx630%WX*jo8pTQ<{3zWiZj$4mJ@;{t6(TKL{|xS+FJxs180D*E}!7Nx9T|EV21nA(rbs~DVpllBRXa$E5h&lZs{j>p7$txL5L zDp5XPAPz}U&1&H6#BUd7>w{V3sHj{Ng?u6F$*0$ZD`h<)NUVKu1b39oS}J(pD&hn0 z@W&}=R0M~cWRqPK%;=TzMfnnaO1X+RW7wVJ*Ic@QP9w2fe}jKUJ2`o8)N($(=15Cu z>BnEQk`wJLJu;j$1#}5gLh_(+>ZwU_ZFbe0xgV7~ODAXMlc5?KL+=eeL$yngoPW5BW z+pF&Wl1_RtG9p3}A-sJ;&3`b+H*lSlv4|d#J-?3|O^rl1r6m1`2Tq={4mTfBIxYbv zy8&^8-R8ValECIG2K@2SU#F&TCXcr!EQvlz_P9``Aivv5F|X{oG(N2$E4OeGl5T<( zbQmW*GZ)drI+K~4SlN#ZZWZ=Fb)aQgi+57CsJbtrcu9n|W5KUjpxVk(VZaS_^@b_j4 z%i)~bY_=+)0m4pY(pnHa9d}-m7t2Aq)ALYIHau!3Kg=uw)QJ4BSWcJd`7KEev+Ue# zkr9c6h6xML%PMw_$U5G}GHF=`Y(*=<3xBk&h6@Z$O0NHwWtn@*%oxMctZOD^Bq-U8 zn!}iuRV*PxQF1O47G7Fzg#A}JulYGyQqC(L9Rv+$1L}z6)wcceetj~M<8c}Jislw# z>)I5w8b3UGEyV^g&WLiTdDz+&zG%z8-q$Md<=oFAmrKe`s{(5w4xtcPZjgO0I&HbY zpk)QhJ4ZU&^!bcb;5(EoJL^lL(?C=5Z}dq{ZgC@zsY;0G7ASZ8`Ej*A7gByMJvTLU zbhI?ep+a1A(_Zb*tStfMwyH{Zm%sF@`?>mplECLF&tA)K%6rqQDxiSu-#w%?71>mf zD(1&i@IuCAq_+^%pN2Qwd#?cv8|^#EY$gYbwqW$$eg#w|!mF{f59fScVkfj@*??rQ z-g@rEO~vH~RYSMC#~qs> z4phd(TNLieGIG$Sn18y2^3LFOT2Exxq|a#1+W9PO&jilADE586>VO+t>dd({!YHuc zs-|074f5kMME&;~1J%<>O`k1~9~@Ejz26(v8n2jtRRxNF;*a2uS(*7)tc)QiS9x3u z4lg7oRzp#4@98V${CtQ~zSbPeP4OCDltV{5zi6Mc$1FqADo7BuUzd$CW<~0=MxoG*e2MEQ>#9_J#u z&;$Dym_-zO{r0M}C=hoQooz_vM5m!QfB4J_i1S$wBLBnMqFb@ z_qae8Np1Ob1sTk9x=$6aeE(RwlY)%!ZtM~%x5)_%lZ74{f`HY7k zTSEKouNbeNfqOMU)`mso+#--1FN9qmSk&5qZGTVSBqShstl^$X2(G&#u@;iiJ{ByO zjs+5fQb`58X6Ag2KM;mqC^&sW7Gl-NFHm)F!hB>A&tEYqZ{co7N69TFbQIg%vF1C}ik$`kb8TRTAEOl~TZ9ND%n$mR5mwL={FUtX0Yfl4sYudVY z|3BNH0a!}4pf-H5j3+$i0NHBTIIqt0%;ZVf0ZKUzTUxV_x&!cyJUCkUCVX_?;L-CV ztCBEI>cC37n3n~(LkqMtCMPa^5r@w}gapeS#?Gh}dKrFVORcv@l=KVpw)>45Z8SsW! z!eYVY;}5vWsbToQ=Fmf%16qahzgTJgbU7gm?EXB# z@%hCC0Bpp3OLt$K+Fu#-5SVK|N`b*uUVNrjff()-7fCwA!r~jm@xKi3wHXS)Um6e| zIyMJToE6yo8%=PK$lP=yaw4R9)#Qy3XC5s2WTk440Pj?-i?*_&oJ$80JPBO2;{c=nx?nfl5R(Q&bQ#X)!R8=#!Lshb%A$kV zEjAu$WhG^c(UGg^zSYn~bl2*=&)|QnpoBOO;Yh@g?U|vfLx-9~;(zdxv*4f((sIn$ z?Pda7tG9!xktu>brJ#c#D%;ll#;p`Y>lhEfg-t@W~ zk58?uyIk)GzPl4`v|2LsD>-3N}&PD;cJDC7;i7z@}EuN{01m$+@#qu<42?jbXS8CI$sxBgKFcf3WuD z^~L!RO|-~guA;855rck4BjMuFn#~7?wkzh>?f}HTb|W@tcko7?|!} zt$-~MbP3J~$l7R{nXXcR{Ca%I77Q{L;QoLAAL77|L(VX{8-ITr;lJYd%g;XUWv-Zv F{{Z1NOk)55 literal 0 HcmV?d00001 diff --git a/images/easyeffects-dark-screenshot-3.png b/images/easyeffects-dark-screenshot-3.png new file mode 100644 index 0000000000000000000000000000000000000000..083c1e6ea07192aec7bae2ac30ff0a274303de94 GIT binary patch literal 173218 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%0ALJv|k8VY;d(96g8_52Qr|EE;Xd#`$<&XA-dt z*+J0G+xH)@3Y*p{KxG!#I%|pBM!*IR{B1}$x!Vx;q6t&N?Y$%_+XM!hEtss{pqKmc zHI>icv$rQs*m-`Zbpj*B=RqEdFhCC$wZjV#rji^!zR$wKNpJQyC1z8tCxw~E^SoG8 zN8t5NB5Y~gKehv_j8il`l5wJMdD8vFKThOVaT#Cp52-8N>hz-3%Y05qz;>Jg=^zg# zp)l|qgI1*q*-Q}oOA?RK8vOc3Ou0m>Xj8kmy6@JrjEF6Bq=oG5&2I;obzRgs-ILX6 zqNSeqvvjtF-X^;$y>er{7WL7T5$0JD^y_anj!A!*=CP|f%@P_W$Yi6>uzMWn^NRbrF#O?YIgCbuWK7PIlV4CIlWA{%BxRg#8)N3y%#_K1f1x8=zB|;&p2K#oAV*bO) zW>bhnSNGv1jQgp0#KchX#Z3h*O@VvIf$+L{qxB_By#c3M6s9lz#Wr9fuQoi(WKfmS z8vJi4J!GY{v}m8zxKE5xT0?2_ChSKx$+{)Lg~&t8NpT#WUH7z^zx4 zj<*+1@ZBGd+>vU2gkqOCoN5#tWvpPgd#VKz@-JzTulpJ695W5li8i|3S(Ag3&Zc0M z66zk8Gt%w?8t6-i|AP$7Ms!|Zw7u^j(o)?fRj1wVBZi@C6T6KsKT^!E4bo~g)XIEs z{#3{&DK=XFVo+Ub{1WM|_;zf@Xjd&)_9Gx;9}lu)bTU&e3Cv?`yMCERLYPGar8#S- zd5quAevr{OI(QN(I{tX$)10{;_ zDa_bhy_6m$FqbN;>wC=K)aDFYmOL2@D(dRK(G6Dft-+ovx0Z%h-kjW{5>iEvs>%n^ zD%&E0gVB_Z63AoAfm^8e)Jq^3@P`2=($S!^0X&O9=EpSt4@c%d92rDfeEo-!gPZVg zY@>wC8YrawkHN4NAJ z%`EQY%;7(+)b#zxSca>8~wD-F|XRLnO&48 z$!pj>R#W6!R1>h`aaJ=#o$ha#j$-xSzW%3wb!zXDe}1oOF(!#2^p>8H@#4)J4MoNN zQlsx<)S@BaO0KY&JdMiAs(H1V%i{7-yUdszGH7_r|?1L89IRs4%#(#^u?%?{4a@HvwH`<3>8{YvklVAJ|j@uM?}+~4uYSUJUB z!5`ZTPK)DmYhRrVIcsTeAMyRvez=gU@f4nM1yiO`7?EA(4m*RcR<_5tmUcE@ z?#LAme5NpoTb?G2nRDpbkXoPYXr~CDtjp`da{9sV=FKaIT;ysNysIFYn%?vYAZ>e) zecdZE-hlr>$iq>wn+M6q43;zlfbMkxYM6e|_WXd(hyq%SM#U+lhz`$XVHOEzU_}2O z4b8)6hPGSe@^9>P2i^&zG`}1fN{Dj-O=pJ zL;F-WE#TbOypXzW(L3<%0D{FgzB@n?82r#t$>!)cUYKor1 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 DN6y`9 literal 0 HcmV?d00001 diff --git a/images/easyeffects-light-screenshot-1.png b/images/easyeffects-light-screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..acfb2f674f69d740a53e8e6ea7ab2b3eed9cbd05 GIT binary patch literal 139477 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 AWB>pF literal 0 HcmV?d00001 diff --git a/images/easyeffects-light-screenshot-3.png b/images/easyeffects-light-screenshot-3.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0eca6d8b88779606c413a44026addf8cbfe288 GIT binary patch literal 173589 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�u~$m&R8QJM$_pJ%cn)XH;ir@ zE2**Pexi@I*1@+q>&|;j(`n^A_F`vB;6i70m;a_uZjN63&SvxJ?MQqZ~ z!j6q-N??vns)(CY0J^e!GqR}Fc!Hqjy;+t_M0z5MV_l)r&L_e;s7*w5rM~Io576Pv zm^elhrXOGwrG+}1rriWD;n=FfNTHA*?S$DTGz3;VyLlL@b*;N2rX3N_*FV3#E=BYp z|7mUg1xs|>NR0 zS9=x+aW@NV!ca|=0Jx(97_^JN9h9t~z9(iAD;GNU3B>Ac{|+~`Y;1Zl)|&43Srl*N ztnGJU68qKH^XW|8Rt|8}fxMbYN{M*&Zi4bd} z;+Bz}56LjvqOr5q01}{Z|NE3FqH;cD49ksv#G9pb4S?#XQJK#2-@phWtPxajP0X30 zA?88gX@>^|ZGaFP>5v*4!I=8uKgP5M97G%uw+X1HqZCxVTc|8bEFSZ7!NeBWngpTI zx1DNjcsz%aQwb_g(p{ld0E${LI>gl|8kY&Zcs!b+r+X(LFXCZ-i6e51<6gs;+ zb~+YaqVFzWqKtZrq*xi;*2#j>j7a~*l>o;KHCx6b-9TU`8knHa-686ciM1}g>hc4F02 zqi6rd!Q+ELpzAlg@%)G@Fc@sNn_+YcXYdD;71i6~_}6Wnr_N^H2vUR0+2v?d%N^F; zo{og};+V#$0ArIwgI z>y59tYm3zwx=Y5w z({y^-d%r(ip|Z<5t-pP&h4J0@I!~nT(s4~+I%feIK04Ku0OM@$n^*bu7D7iK13Vb) z7oj#N2ax2U+FU@5@9QVt9*$BjsqQcPwzb5lpypn|gdM*yW(EA!Sr~D*Myfco_H53_zQw%h zVzgLM`=edvCbetfG|VjON}8y*59_Js5g#Xzd%?+v-t;|l*Ou~>G5(+#ka&Od z9l1?@PX9RG3f*M*MWePN<>1T3p=Q?GmTx*Olem~+p*;c@=^XV@vr`2d6mV6q{urI# zxVTNzbsQ=3sn4eF$qo!Gu4#`bez_}T_ui~sR~(;Rm)^VOZ>>WalTSjQ^x$kIwaY4F&-r1Z)D~n$2rVC?? zAIThzv)C8AmB)|w5#MXA`d5`}f*73!xXj@;YHE5${9{Az(q9xl4 z^`?Do@0sJxTjw44hkR+s(m0;44L-!R3DpD{^{X?cbKz zTYGQXnn2vUP_CHxHws^Tf#&)M^zo#skqw#E$^n7WdpqP{E6cV4k zEn=h#4TK5J!_q2bl_#?VL=XQ>hSo_3wqtuW%9;N+x^&|ahhv);zw<2HO^UU-( zKhCJtK(v_GQM!!#!T&B9k$RoqKi89wyW+Y3Q93_(OTP(y-W~F==XaGr_#lQg5B|7! zwLx{m-Z#Tn_nYvS_bRVMH%kbm6nf0{n)#+9b_Jtp%n#I#viIaGRJU@fr-@eQ^muk$ zdts8)l$;p3qNXC{@W7q>Fa7Dx2m0j6w|4j(o|E(SPm`$EO$*ORuq18&@v;hk7HBFT z#m`9o_nA&xVdJ_7vpqSi-or7rF4{HiJyKQ@UR_zgdv+LaJ<2E#OB|VulLHdI$6#sb zc~;C`zm(+2`|nyKI(F2Z^gXm&___1$qq*OF5B1jez701vx-}(c?uqsQZ}ZljZ_Dvpc2RU{_!GZ}weK1}yvm#MRHo=yklL(9 zg$N&YnTyfm8Q0hSv^0mv3+blMCQWRXP1mX0vNmp7-@SLQ1bidHmV%BQfs!CzzASL_ zWOzZv#~kE||7Dn$;s1RLi*-zPyNXJSx){TR+hcVrv_8w1-TBwAQAO$vjcQC*#guiF z!tE^7SvbwhJ1Nx@5XiG@y#8L{|E{=bt!j3N#pNGHR;X23He1{1(pvn!tuqlS3_a@7 zOqLjB5jGs`@D0}odc6KNXU$CWq+F+eX>`9SL)xT2z!x#g9E9B0tdXCrPaFbS?^Q5Z#!j5rslKIj( zJ~n&6x^)R9h-Bc)sBf^-pp!O#lY7JtJ%6>8*EO{&OFZ9A;$K$ny=LOuMWdZ(v3VIg zkhg|B{J~Z(*GHaa;0qU5+ohEZi_zQwEPYmY%xR-{l@GgK-M^<37xF>U)MLlE9B0;1 zfs$*Jr!lhShYvFx3?AI;yuQ_1H;``qY~f!fZ~82w*6a!xbuT|qX5ZrrUB~)Y2(4bS zLI2jM;~EPX_L;jwG)Fu+H!E)B%l@3Wf!FBS^CfSl&$#WJkY8jKsr=7(89Cd;O}vL9 zUWR9$N?&(!;yM21;kwrTT~Bx=0(38pv03^(!Exv@;QuXR2HpY(fAgC%Z??n;@=rhd zd!|jtm6gwJZsF;M z;8<^nuLzQn>e#_Z(KK+54P5o$!^CF)88I5V70=pl(%Ddu5R4For$qhcY0jVLV^JI6=^ z&@jA{!T$|HYf@ZR_Fa|$P1zj$ayvg@6R<5BI4rUy5>`IlcWhObNgRx;!xIyA&@7Nx zyjTk#gY-B8bXVRn-z=vowG1E6L{Ceu@SL^?%{~I_Dxh}|U$!jQ6IS|er;%j<%?FRq zFi!})Ak;)VVO$3ua0rO8Qd;8~rR#s#k_<2Pzuq4Ko#rx-Fzv#HfODYhKn|IFe=$53 zM?SCt3Yl9LSf`0!6HTOr2zdv}40MCYD`@?*VQ@k~Kd>NVI~d@bY``eMt$~h!xx%Eh z%W52H#i1uZkg|k$P^FABZNi_lpCT(=jYod+*+l8#$91em`AlDlMegF(50E>A*>= zTmd8kyfv9Sx@ab$!Jvs3gVq%`d%?zd=ETjLPJBJ?|qGavO==X zD~i2P?iLyVpBKDy5YT>HJP}dEkp=dIS}fH75C)!s~Tr)CB)FtAd}w zHJ`?!J#?nB)mM_mz|`M<%Q?`!861ZL%Vc(4NrGBMKveXo>n~%+O2Xuqe1!>Ng?->o zxb$~yde6`qIWU7_(TPKQfZ|YXNgaBSr%5dcHKG>iPZ;DD3B*4?2~)xeHOK$(G`AN* z%t9-PY}}Xlp&sYDlz?9XTuuN^NhHvI^w)SIvj;ZLg?05hdktkLTQFqW5gY83cb@wPnd?O?olQN)j-Da@9 zM4_(Wb2Mft?xfFN1Mk&P(uk392FV7&xg%~j%H2|NVI|4($RFhtHbhnDYxQ(b#0PRs zg);)s(Y~?}UI=hJA|Fw7;Rs42?H9R( zdi4S$0j%KTR}8frG9v1~xgP`mNU}%FwuHz{6PhIO5d29(h)v7w6vBr$3=Q12f=Kl3 zG4v`7EWlOPAL`&EpxrQ*Q4V5E@Z+-Y14gae3^pVFp{t0vB*ubB0_X%p$f?zFU{`UR z8WJ{B!ySVP!f|zk|3eZjn6kpH;Oubsnc-#ybTD}jgbL7unx6C|&xa&4>Rf^%Lm`k* zdN2X-u89;0VpSx9vVBScoc?NH?wC)8BM5NBHAH~Nt>ywa7Q<`XJk#OHL2d0FN8jJw zNEg&$53hI)FdMV8RY_eisSp#UcabkQdEJ1TQU{+z`hK8$WYAB|Owha@jJ;Az*lBcP ztpv46uy(aUzyfOY#S4&KJc9d23z6S{{}iHJ+o=EG{&^YnxCu>X2jR9k(ft0EmjBu~ zBBHyv=s(S0C3KfV{HR3mN`>R72SAS567%P0DB8l2X5*$!j=@?igd=tMWS+DFd?i9= z{AhRgj2G7th}bn zWOa8m+9hV7oim;@%54?~CCZ9)w={lAbSjK`BaGvVDbt%)IGAD3|HZ<-Y2!Uok+_>3 z!l6a#7tC}Z&GCbRU1;i&%{)$LxeJ>&ZIVDgI-+gGrlU%rmp*ifs=(>M9Vmb<60KLD zk?haeahW#^0NYUy8jG-yTn8I_xV;@YOawtIr^fms{z8R~Zqt`5LOhI%V0Vakj2_+F zp?0sK)W$Sv7Z?^~1Pr@Ga!}!}IXttrXTvpU(|t6!x|4okG+`!z(KUiHF{x7auN`n; zCUZlTT;BDO(T^e!9mB%HmI?Ki9q)wnm>q;ACH=h=yN`eu60%lSRjquV3KWnGA(4-f zrzRF@!3`^Td9tehjEvi>r47}Nv)X)y|1pHM$1!XAQ=*dWN{WQ2X^91yhfaeA5*f&5 zA#f>`G#zc^JG?#^3?#i9?{WPK(FFh#KpXuc=j0VnboBM3(BP9zSpmxlu7altbgWd; zoOZ_A+L4BXef7!}s~po+b*-OY(s%@T;z9mHeal4f5lHb0osopRydF*!(#N~x$mAbf zaf4`1$f0Tw|1`medh3A5b%{yeMvdCSI;1W7w6y$p}XSy9a zGcv4!@P6w(3HM=Z<8yi!0LHx`g+al=T;}oLQoT~iwGyqhlhNq9%!I~EA7K4V*VmSN z_W0wOQkDmnQ9?=YQ4Cpy*BqB?iY`q=se_@-s~ZSMNNC6;9sIv|AGjs0VdX-Ii!llT z$c;OLW-{D5V7KqSJp=}E=K8x*a`+37+#Oj_>hO6Ekw=j%eK*tBFuXJlOWl!1zCX`ov^m{TYN!QL6j&Vm@h52fw`K zu(;caya+jDVciqsd+%#)v?GMI!s?T|Fzu={dHW7pCAiXSOojG$`!NeLge+%SYRFbe zV!F*wKH;GZK4C74{;m~+0?=5-R32&qlbF6vUtQR-7uF8`=nv*9y42<^Q0VVzp@a8T zFV{s25%yTcq^wo2JXetKA^$UU)=ey2;I4sfC(c5!&BvjrBNgfchBM+)g8pcRzj0pu zJOfS5N;*aAjYF&sBdXAV5mqi1P%Cu}Zx#NM-SzKcTIVn7PwB+H4D`Ih;peQ_Sd|Zt zbz)`kEBe^T`+^in#_=ejxPGt5Ul21R;nH7%X_Hh8Sd@LLQs2F;=$cZ9QO`!;aibYZ%i)P2OuRBrbl!WlR7z45zKi{RdiuppWH^v*?$RQB^h5m4v6Doy z(N9jkOBq+;usq7mYEg}^w0WLmfXqZ2KjFlJ@_mula$a1`4&yVZgE2j)R~7*RDW`3Bm$!i3s0e~k}TP91`B z0a{LA@S5vezbP$`T6~WoWR6ik)bD+~3pQO2iwJ$CuSI$wkffP`-!e?leb4k#zT4MfYU=C0ja`|R6<1|bn$VIKtzcIDK0l$z=JSE%2C|~nDg0-G zubunKf~Hl4N2i=P6n=k7#J%mXP^JcrN*;tP?iFCj&f^3$_}Q3#J8jtWNsz1SuftPl z>gr}_CRC%BZ`m40eb*muUpYL6` zaN$-sKq$WFwA*Ch_-kv}B_Zf9I|xL(CDyc~|7(ez zy~e?=XU(hCbGOX>YuYb=jN{v)sr2im@H6AijN_9S_Xi)}-T3O4eX82lPX)XV^6Foj z7b+?48|;2aX`+Ab=!LTv{hI5v4AT=I9=djk^_)3n9AD_GQxr}O1bTv$^Jc- zc_Yi@f!QW*Dmdp5B`RmYF$(qBRzKB<2-v!U+b+I(_3A8p)VlDge&soqkvRevW0X%9 z-F0Hw*AruB`k$Y|D8EL&6yT9-ku)( z!z%WEhSJVej$eld8UgRQz&-xO1&~{QYi@qA{2GjqaK_=yd)fD5m>_1!R88P?b#?-} zihoi!+D&pKx+XHvu~Oa!qdQ`AwYIj(SAZ)<&Mxqhf9tD;fqgjfeWcqSYa7hDOt$YBiyP60{%E8eQGt}l7GV<}>V90=s@u^Pn zo+U63d0w+Unqjg0r#s`KiEcL@!Cf0y0U^)p!i#ZC(=nLLWh9+=K!G7Xe&qhyIB+8? zF9PL29~?>TRb(S@hyasQHf2+=vKL;#{3~bO?=fDk7>Ud5PyU3!;C3SuUM1i!qc(xy z4vKNgl|Vs7W;iz@UxEde9eBy;VSj6Fz53t*bzMtzZCsKhP)yX*+89Mg(??Kc zo5Hx31`^;EfBSk5bY`-k1+QHL&M@bWFZ54d9zQ5vdpR`K3h(z^H69A_Zb{xK0c8cI zR)x~^DkQ*y4i^D%(Bv5Wlw6c`no&A3EYePsSwHD?xb_#tt0NOF`~O^sa-L1brum^e z*RzTHREv^Y6Wal5kxPeNuyly>&B{eCqy4#pAu!~UraSIt5wBB2|*MUi& z$S5!$Ea-VRtSwBzZ(|3+lmXy{WSI~B0>8_(^o+c`Je)ACLrz8{fEY=r2V^ke80b8y z%HGkDVA=NX(I3*5Al+ay!5Xcak(J^HHC=lQ(nd1gM7@XnYtgr*Zs&%m_lwK15q==^ zN*guV{gR4(G*zyPlNW;L#HqpQynC-=`~W z+?zOPCaEei+y}5Ig^#2dOEX+!fwch^nHUQU1jM5DCLV=QtbG1-Caa`61T<{wXl9R!OM9RL#`q$6W@_|l#F>o3y(K=O7C zbk_Rrg}V2*5+ewhC=t+)lu|IfD1=-Re-ZZl!jK3b^-WqI}z!?Qko4HGBV*HaTOGUZQwxHKsrg0 zoT_+~$AUHQlpKay4}unXBT?E+xHnv3Lj5>RPHNGjH+^k!C0Z(pu6to(7l8ro;*g4x zyAC-4!Fq9>mxN|62FuTbuLoRW&YiPJDazxnY2FBF-5u=gX7vhRE3iHy~wg&|rJz#nt(4I=Q{(2h!bms4B+?EvCUq z(9LNBu}9=sgamOr>TL~xP(;XQ8W(m$)E!A>hdMwqA+UGCk1(d`*&-Sbx7*FVXcFYor z^B4ZUU7Kl=8mCt_o=|WD#%7qraF}L?T z$sU2|P}y{FS#RU#YQ$6T)-(@Jf~6ED68RQRRh=``DdZKg*;9Fw$f(>eSq|PEcE>4Z z4WJhdqy?#~@Fr96fTm8L9tz1&l6C(lSt!h1`o147fzQvRy32iq%`$}`*ov`G@+@j@ zKB4>DU_?+J|06Uo&K-u%0$D{ac=ggi2WTcBo5pSd5^}~wA9fHVm62`EH%{SdiUpj$ik4N5;2AVrs@6-yGgIZk%*h5 zGrA!$M4^gbhZHbL<#`3tf`-KbTSzB*=1lVCU?g~?F+~pvaLIj7_fw~8$k#SihBgcy z3!P7Fdd{R!IehrltUMA{Xc=wjB1R^0>d16Qste9=|Li7Iq{$E@t>uxhZ?zgJ(xv62#O zPw+pQQ1|>{XIu9)=@5S#(S)4#TNY1+f-`MccC<|Vz#ZamlP5}LH0T75;S(spevCcqXzIwkwN67(wz_(DQ#K9gK7$CZ<+X3B> zha>TJ!JV9{vmOyW+%$xuDR*`*(YSm ze%y4}6471!EB*dFw^&T<6!8KNZUB!Q%(oBJRy#9%lA_oGdFB+k+oP&YdW9cdxCKol zG|%ZbdKrh3#7dtJlZ&p7hXWnPpscIX6m*EXJ1m8zOl8zlMTZO_I=tWdnN_|8>)a0gWuBt(PxoA`vezZUyRE%g8OA;b9t!sTFr;s4jT@S!~l z+<0&voYMFar!d1}(opDnzQ>}c_4-JCzz_pL`6ujl_`-ksnSX!4NVMN!>EMlc_0=1q z&2SupE46;X&G`TE$B(BOzZ)CmgZ?OqJ5V*-dAnKuH3$q}{dG7c!95JJP27GTX5_{1 zCXYY7qxfG2|Ec(#lMkEUnvQ&~`*BrQuY;E_4rmG%R+e^TDXbJWd<9s}890mGzA*t$ zt?6kxNiJI0bV#Y5BmD$l7~;OSgdaqO`P>l2fz~DS$%{7>YBCP+j2&%7V&GetK$nQ_A9qf^#=rP=zFuX$&Zb z{B}_+%)#JI1Vu@-Ix))*s{MGd%@tQ_gF(tj&mTV02j1*e(w|17DU5kJx`4pcq1gL& zWaYrzA0wmCM7zd@+Y+?QuFm_D7;FPyw0K8}-GLbZ<)(8MB)Qi3(FWegOyP( zax!TG!|WiL)NzNJ5yzI{#y8}EM4wnLGAdGODT;YhKvC=gPR$mXGiTa6x}Dp2wQ*qltp6DY1CFE+duq-DA%WI!~L zG0xq9-=n!IvD2A%fw3s{g2@yU;}N@UXu>F>m`HR!h;#W-y4qj?pa(>P?!5S8`{|o0 zt5c7onBy^hqQ^~xDI;Ve6bz=m1H%QrCWGq;Od?_mQ*|VT%Za$~$KH%~ygY=pT5kMV$s^-{gh@!a8r2YK` zO^GLrKxnmXB-0q$+xCPV3T;<|`gu2SFb^UCiQtRkVqG+>j_r2#kk#FcJ{i4oc%#vX zJG6lwIJ+QUZ-ak?KE}9`MBlctw7%(Y5_3UVNQE{ben|K4yJq2D-Pk_?a@bemEsHUz z4!J&g>ThophTjFX`O(3(bI?Z~3Hyfwi=wGj4bkrC5UeMCo zssYqdjO!6={~BfnSVDqf#O+L<@l$xCL!tb6o4y(vsYrO3sGNZ7PBp%WnzRNk9q3(X z`8DI5K+Di8{uyc^Wj4fz5Z^E`$L&)$AUpja0 zV@33t$>^FgYMs>M4u0Ejqh7qiq!$-#V0f(V3@StD%|)UepzL7ff!%P3 zYS7Cd@`ncQ^%{DD_hj@A)@|qMZo#PrZB0$t0GxEc-l@TyL=!O)wYetfUUFO zKD#BL1s<`sEbY~~(=^vgU7HMQ4m;MeQn`BD? zm{mPzE?l_EM71CGTn3lLh%P@@HJyIJ{ZiWaNb-pI6=I^`AHM)hl4Wmp#s&+3w}BP_ zAQQQXoK$oQx!%cY`w{vzF-en^3#AnRJ)KA!%cLMbuz<21pwnjuVWkVy$rhUAgqT*by(M9AEUN%O@-l**zvMJY(Oy<=x*O#Qt_DF zk_M|g?j!R-v42npm<|m<02upaMizg}?VzB~GhAU+A#z$9NB(;6)7n;qTv9g9B0V)Q&Hnh~k35*6 zVSl`;Yy%8?HQs~FDN*$R$s*#=`C}L9pv)aYA?PwG@4D(hlm-YYMKF+4C(7Yj^kmO3 zwg#fh4r~d_`%+mMjB5zTTLAb&bvY4n5FQZEUMNbT+d+LdaI@faP$X}vf!Kk)afO)z zD;)aQ2w`H>2qxIE51yS{*ffp;vjLNW+OgpjzCE8yg**w2(f@Q>siB>(9jq+CBC`%< zz0GJe^nLSA+rkEQERg0fqat$ng5kQm*YtG;E-!=Do{=v0?{KWUj-I<+!-wN@3Lbqv zt*sK+QX2=NVHB>Lh64{YhRB`=G^Ajx#W2kGrgt#YwddFypH=GUcs+mcOhqasXzj@{ zG$aGIHndhD77W8`F+v&vgqlJ$RRp<3Rwr)(LsZAr!V9U!!r)k49UxPtG2kP}{k%yt zcT0}wa_AH4gVRWKIcyPR1uHR5K@~NYD&C?rO3LF858;;lV}DAHJzfC1+UO;`4{f}7 z6bKW1o$ft~NI)7&L?AqAbHtnkvYLmzHC_x06(|i_gy1eOLR*SPj+gb}#}c?rW;8&% zYXMV{uo0PrH6R;PfCNZ4tsF{FEvi$EjdnV)g;yxMKPG=FKs;VT=@eADa;|;Jn7pun zg5w->+tg5-Ex9z$9VZ7ljM3o?(cxFq$C{w3tYO{YGR>YW^a+j8`}z*;^^MzqAlK^_uhN| zhlpOtC?FU)|J1D1w70hpm{V{=)PR?fUV_TNYkE*<9DL$Y}f8IyuY0`i&pY$te3)Ok1in<680A ze1ei!3>ck$II%rq;0NNrlC1wH{hVl>f&?YOT7mI>aCy7^{u3)0*#-As zU%m9Oyt77T7{p?v53x}HRi4qw&i#5IH(XA{7XpF6`((_=kC`N3-363F_5MIb{8Mpv z$=+@KyeV%Szz`Jp&w}~mC2w!3GjjUGbl3 zy!+O9Q%>M8eJN{hZVpN-;SRs91+p;smA;#R3RhQGJ8%36-$Q2^##K>X-d*GG50}jz zXjq>BJ_h1Z3B6~F*-MsOYKUN{o*sM)+|Qyz=M+ZW2PdI;KX?I{FpzEf_vJ$Wy7H&| z$aQkg3NYN3{ehkjCi^rj9?h^29e#>fsj`g=&pkmc3OJwK;LvJGdd0)=f7IOGehr_! zb>7TW9;Mws0|d<3ss~WOVMkqqb{5})cm zF${pY^P~qO&rgxL<9R~xuyC2jy7tlCU83U+D8KB70Sy)Rju{rO%Lf7NcrSqhu_S+n zDIC&`y@nU{hu;U+r|KvqR5i}Pru)=JXl>$ch8FTK=iZLQu30tm6hZ=yUA;3jALfK0Kv_R_xS_ASQ;vVrZKRkEN(r(qt5)=d9KKS*(tW5){qcAy1i|eC=MK`1X=KfzB z)KoJy!Zlb(E&$SREJagVDytHwT~gvg{80Z#%Z5Pt4=*w@LN;^@PTOO{d|;}Al-&mY zf!@_WqN2fND;PY<(lvKd4MPJ$KZxG0$aEgd-hlVcJ_ zaR(q{!n;9B^A3IX?EqGxBaAN1I#VPU;a&MOObeChFSbS@V-V2oz$v5HOT ztlxSf^V^2e-&O-1nYZi|Woe`HI0`ob%}BL2^sj7HdttxAn&D&^+bzEN=+=1QJ?_g*1hC*0Q;UoSfWLcDMNf|F7e-P zJH@PeK93Cq)mHw-N73JfG9Nf%n!Q&HxTdl^l0LAj?9rWP!0yO;b%m|-X=xdy=) zrSR!GHi-uryV4vEsPFxn9~tN^=0rE9>-@HEFNV)wL!%#fz3Ns}1yCXsP(k~7s8yp6hD0#mUd{vhh7KkffAT6C&609Lha36M4D-1aW?N1A!aSV7p56T1K=ru48 zA|DChlLdH;FTd8FzwO?Q`i_Q|kfrH5#gHd&fMiSp z4Mb)A>4`bG!M5jfJ>!#@8jPOCUsejIS&0vw`IQB2{ae4|owVYxqVWr`C88!fO=iNH zS7F0>);C0@uC3I*f}hBRq?LMQ!c6Cry^q$5dxb#E=(;w2BMhe3K!vkX)5>ZCusfK} z&`7$M$1@}t9%Rc)*dEMzD3tKMogv=Azk{K77}W(?g1`+r3fG&MB;vgqymO*Pk}C!g zKtOwTvh&v12SyDwzX-HKs1Aqg6YWH1W#gH;(9sb=fAH=S% zW(ZnXKA28XzvNDxGN}mrD3r$GojM96PmBrCZ4Vc(4z!PGqMw3$(di(4k;s~2yz86UIVVG+~v=kx& z!z_=fUmv*)q7HYwdiBj@O+^|V05}B^+cMOb&l!&I` zKmn*mPY!J5x`w+9SsDOKrI(+>ml>#d-ThANgjX&wY28ZQAF0MJ9*SEU}PL8`$= z&nNd_koT)5oVq4PRTi@b>r@+6DDoZ~yk3)@&SsjwcfxlasK>iM?_UV3G5BK#5fTl! z+!^?3_|Cx7Z{w~VDsMsao+Nshd61}9?*YA?4lN84>cC%e!Q{!FYOAl!1@3TN(K(S8 zH(=rB+ahm|tSI|t{yE|On)%uwWn9P5tyK?x>82(py($22WN%2OEACl!JlaU&ZcENn z_T_LI7j?gzdeHE_^L^U&45jgKbRlrDtJ2%>|6%Jq;Ck-A_n+;~cFWG5$sQp@S!E@a zq_Sy9G(;pTdqxOJNGg@pmLen#Ditabm4=KYEB&7*_wPR*kN^GnK7POZHa>kmpZDu^ z&ULPHo$EYfA1j^~7D(L1xr!{Xti{Az*4deNp76x*_H?ts2FR&E-92K!+LE!c*SC*7 zu769xif7Tep<3L%duz4~U2_c&3+bJUk&`sAMN1E1JGi3GDE)Cf6Y+i(KPn2&b}v(- zFN~qY6cbM_t@HyJ400TMwYO{ekI|V$;M12bl&Gmo||PjN`Ks{z}wQ@7}!emXRwc%q(QZMQJy; z<}?+*4YHujd$lv$FbSvar?O#$8*nmW&^mTDWilDDd`SB;&(^Z0nqVWA-N>ughI#v%{v7^(Pf@Z!n>qny&sF7guuT$KxJ5P$WB9iiTL8A>rn!Y z&WBYFvh4Ler!mGS<ejWZ*BPhZ!qu|2P+wDXyA+!;fkZ%?Z*Km6 zR$x7)-R!LMh&nvw$D5*}Y12FU_%EH1D9BYozr7fA(<&DIovix($=>1GtxmS1^PW6; zvZP(+w64y#^h90I&Y1xvOQ4 zjCU$Y=VZdC^%m+|eus0PdTWcXzYMCV&DVE=?T~hnbS9)bA`^MyK1*KX|9P5h8OMHc zhYv3e#7tSj(a1G9&sTUqf&;R|>|bnq3@%P>CjAuwXdv?uPG8>-OI?7esAa9CGZ~&k zGE2OVzyh_ae2vjC##QqxWnc61ISbFA)J5a)pL~x1CBu~OjAh#qkdLmAI9kiR0OAN4 zoWmOS^5i8+Icsi_CFtsH@EiY8NTgco)9LL&HF*NX!^ z{`?FOgDFY$xRm)r%*%!r*|~({qV;u`H7E~dd8A-!nX;7rlyEfpB|g&G;m=6#;e_gf z3-sZNUc3@V&ytM9g81m8A`y(NCRobqo7MyN zS^($qitQ6utR1rD!>Vb^4i&Z!ia7f#D}kyyD7bZ{IUwYL4#FO_d+>7V(D-AQUeJ41Ug_;z=2A zgoG_9ELk(2kSVeZuw0I*PQGKE9a;_?4k9 zrbtGcIFco00WOt5~r6oNTFKF5vV(%;O5W`6hRQaa}H+UP|8cKc=!Hk6OhAS30A*)7sr}KHd z63If$Q}ZuRxYGf%eW$AOK!mQvc&{}`L8|O7vo}N_$%g|wY14hlD3 zEN5!BOxa(Gb`JR?zZiq?_~f6S>s(2kvV@%W5Fg3Mwr1a#_{BpWnUA2Ez>G~|piOL2 zv!CeyzPYV-bL+jJ=2u8%WQ#MG&em*6$qkYV?NDBDZ$i6U109vew2#@6x4p24okIiJQ<2L77NT(SSjf+6TBf>$<0}FHR!91>5m_8N;&?(EDo6( z!>wGI46e=yW}>9^&5;(<&Hc9zp*=k?b=h9ab+=Z+@?_jtF@y2$oA=*rOM6{f8lYYt zu0?hm{KY}7|Fvi`M%lKtjk zPYo9{IH$|vvGBD?fLup1zVxMD#LMyv>+Dgere^{svgje17`m)uQq7zS71VpmS(PU# zzr_HST>RF%?>!bT4QK2O{1@E3EZs`}wmGQ+J*2IpMc6I!w>gH4VmJ-crQ^wj@vQ4v&Csz?MSoB}Pj&7iMxnTkWKdjsD*jQT4?hj;AZtDxet%zw zh@x1Q{!*_m+&)0K2EfBt`qqWn>$y+Tqv225z4$!g`|En*#zvppf1dB5==}@Ps!8kc z(WB||BAo4Shtb}nDlS-1gsMTGJ0jzF6P$nc8#~q*C6FEhhjW|1Xv0k`@5vxxp07|`miz@ZQ^XpnNQETR0X}~79>^UDi8D9~&Ce=-v zMLgd97(B>mL8(v*08~ZKylYFeoEZxy`7St@;>8rYKtz${7e;A({qjWyOX4cAoRChl zEXPG@^!VmLJWa*SnPU*bPnH5}%$SJSmt8iM4XuW>`<95;fpp&;Kq#8Q^XB40B=}b_ z4k68|>l_>#Na3}AdD^t>c)PAKk;bUg9r$q71%q8uYpU~Vv?G5OhQrgC^T{6=SBUws zOsazN-&27ZtY81FS(V@X;B!(@vzKzjlN!f=TerT2^RM^?5WFOt9_`XojB{mSxvX#; z_m;bIGiI;YB?zY|8boPE%9Mo!T2XS$ojX_U_ZDuTEM6C#(HCoVlDnJ}YB33nC|x#& z9wrA;Wr1wH)@(4f&D~h!NyB~Z_s&_I9;{^zNzXEmDn#TN3H3 z;c0)bM@`ot&=y>3TwXaY!sfjIABPYn3#@t^SntXb0K8q_3IqMmdfsm$c~%V;G33|f%AfCh`0 z-g76fY|fVAQG`nj#XhOXcU-q|!-gvu7(k4>OIw2>lQjcV8RJGlkz+WC+WhVGR_I48=E+bufSKOv8!@LI$G(`*q&qn}B zBz{3cD;Ctzu&YWAD(fU8Tegn z+>%L(5ZLtgutpGE#Lz|8-Wkh~2{b?Li2j=%Jz06PKg*xd9lI@WF__6e(+Jxsg8Q_! z=h9t}X?kv9kMXY(s;iR%Gved>&KZ)m@@Da;H*p)gxB$#@*JoRQ8>GrpLlki|d1cg_ zGdpGI40e+it`HRX$9$W8H3G|=%H0~jCs8hdANSwk%c!o($je)V0PfqzCEVD}n>W8h z#lu4o_xB&OPcnf1Ri?BgWHLBb7Pb(+pBOryKTLWl`z7;+S}!>S0>WepgEn&sb)?vH z!*6vnqeOAK7RbTHaRCg_E4|h zz2(~Tawl*S0{bH+Mu*<-Siov*%P5BmyHpiIj+da`X z#xX4;=8YT=UtfVIa0ep6=_OV#K-+HL960!48m~?U?TV(} zUfv?A;EyvbwCHXyyZH9DXv-W7X9t54NoqW4mPY7z8ns$i*eq7@;2ffi#Vmmu?#f)x2W+I>HJ2?*zJ79BarB>a5Mub7&2P&gR*%h`QoM6WPM6V-iW>;U2|g^n(> zJkZ*`!8~K;m^1GB^6*hMyvjt4AO{ePgeEe(z*+ixw^GiIxyZYac>$QsACcB8(a8=S zI+uej;xH(%uZ$68N6j@>JyEmjV@liw|6etSHC8ojxYB6a`gN1qD0Q#X?!N7;#AY@F zP9~YAM{T)mSfX|^GGo}tg&_~r1CvaQM-CY2ljAdUxTDG3mXnWo)@j)Alt*4y6T3B2 z8`hs(r+QpaV!)}J&V@-yV}=)1jQ!XG8pP!GhNDf|4O+`rO*EgrdbKJ?AKdl2uyE?6 zNp+wBpTBtVro8-+ap1$$)K&`@F1%$tkWz2-*s*R5(z;GaE^0Y{{`}(hLFvUT8-AXh z-Sb!iR$zUEu?zD`DoREUM?CZS*oIL^ z6BCosWL|sE{(}b}rT|Mt9oau;!BN!Nw%&&Pa0E1q*D0s{enm*U{lVq~irX9Lfcv*R z?e0#c+5>U4|G3ip{Ow*|UFiisDzJr@zRUF_)7^deaO&8H1C6e21tDF~R|&9RR*Eon z1Le#MUdOs9Is@|K#T{pLh?pMeVl0Di-W-m&EFW3*6nlG+;t#y_l1S2fmxSRKjPMAlpDk? zNJ%FH_UzMV7nJw{&#d3KsY0ibDaSaJv;img9W*G&q+9FrH1ody_@SM*484v|jarNi z$TShik4B^^^Vv;1jXJ;sno#|9p1>xWSzFVVJ%+lJ1?YjHfjv-q0^qkCQF$|U+O**~ zlIz&C?lfWZXd*c@&=7hlnD-=LvlO`NGCT+O#N~OE<6r`6HzZ#rcN#Zoa_nBJd$X#u zCr(VYw;#cUIM9Bmrqj3q1NPHWUW=fZTl|pcaJ6AVZcYwYZugYNKMWi0*hZkcL1hl8 z#CT`dh%a#h0zdO^48yPP*inx@9K7B(!ltf~(Iei$3xw1W8y9W*Fp^oGrV}+a>vG|j zBdly&5gr-Yx?@KjnqEdk;RlWd3?Rzqz4Pa%Rq;)OZ<}-%%$_})g$BANCP_dnOo@hr z2m?N;pP$+1B2OECiKR9+hbg|kdS1E8GN|D^e#C+)Y-a1`yoEt-)w+T5H|(En=j%Gf z){DA6YI$T%VB(aSGn?x8=>3c?E-07+LJz#7ksNa{Da#~qXiec-2ZsWRiK-7F9oV&N z(6U^))#AXkum0vO8(Fkk95TVQzEOioE$dGTx7n*uTJ3kIfzh;s9UlAE^8Jx^>!_XIPHp%8wpB zdb;NfzFijE==-T`+vqI!a``ZFm)(R;?;hiP=Rl+rDW-eHA5|ZssF81{5W!duNq$ zsQes*r_4I_#KE0!C+7bgTyW#B54eaPeIiTKyoi7rTL;oi$FbE@C2#mBQ|W@m>VkJz2u?p=`WWC zJ>3Xm5lXZ8=j16(8^$?*o)Fq+`0!)YK*K32q9zQ}HUIz|B%<@4q{Y16T5?44>q2-Z`I0$Z!`BeGO+cod<3E<_RIM<4DWpLz6bII54#* zFrJ6Fc-1NZ{Xc}#kS#$ej~`#azAmzV;^yeAgoNTlTf)j;hU{ZXA%!|7~UQ| zX`8FJzNu#{AJ(dC*Ex9ReckjbBSXnuXT{tPon9mK>7}9JMJ%`FOH=?Z-cR$Hu@MgU zYG~h4qfRiU^KX|fgQDjLR-e0FS+!*I=5e$)myopT*RQ{pVJ0pe(}9<4^6rF3MZNv_ zaSp#_bvrl-MrZVkVkX$RYfhK2$@^4aN7>2xL4ycb54kyA}Gc|a^%7(Hf8_mhd* zvu9uCk!M8q*#uohS_LJ|iMjAE)Rp z97G(^WFE{;u2ovXM&%i?v;OV?F)N<%9ixKuRw zw$LM>C6ng{FN^g?l`U>QQ_G?erhYw1=Y&%u{U=mf$5gh1#VwQzyJy*~Xg=z+R!*VL z3IZ?qY{rrqc0OJ=lpZ}EHowydjhGwCKMSjumN&IszkX_<;X?gyH^Rc=xsbF(Y?XWS z{-Vte2L=Xa6zQ&yFbJ4#$quwJG8)5V6cF>vbjjNhf z?CBBKP}eGvFK1h-`EvO1UVZ!C-0(TSV{Ul&XU*hWZgi&cHA4$0gFOmX10g5)rP>#6 zyXU_=N2BxwPCce-S}jX_{0&F8s()9ybQ}1g*F!?0tsAKReJhhTw8Vui!?NH{qe<)6 zk5X~>pBj_sMHlLobCoHz=ts>&UU=sXn(zg0x`d5Y%}&AoZ6Gb!gnv|0aD{R zEWN&8#3&nkOiLEiN!#h_+KNK0*^32>&Qhy%{C0g*z%tsE*Xe1Hx}cBVc<=7wrrDz7 z!KtT%FPv$k;y>Hk%n|#pDF!73#xE5W>+J1i(kELjA~K@&cOWWCovRZb9)9H5u^qF0q; z{lL!7-kyuwHPCQBxJuEr?y-bk22p?TN}+w(5#sFDn%s_vQT^`SN?5L5FgS4U~9~kQ4>3NXfAs%y(kL!?udh0!~>8E@;`^Ae6p0oQJ0Tyg^=qRzqGPk>&6~^JK7Cqe$&&5_V(Ndt3t#)9JefNO72v((EekB%M>w#DLACnGi4tHr^o zI}(;_24v{`3IhvdG~Y;R*;-k77PS$LIA4a^h+XGX%^Npvd}YXQDqgsrqr0{>x)u`R z?w@%kyF;5clTA!I6OC7}Z?RxPVxMDsv2t57qT|3WYV*CqLP97~<1Z*i83s)8);+J= z@6)$$eRvjpqHpx%laI`(_nh$Z>sX0MJzSfJFC#My?FzLR? zH{Dye-;j<6sTyGM%HQuAR51#3z^`U%F69bkWo4I~^^Ac&`RSqtvv)d{wA2bdW=UL9v>({S! z%fI`i7c)_G<=c?x7CoZPo{+_vw(irn?{0W9p73LwV^q%OjdPmp}QfVtVe9Qer9Gh4ike%kf9Hdz(eJ20@Kad3XRv761JCBk?xAV&AL%)H8fr&^#>| z-2MFZ>m^VWN(vavj=&yGs###p(FhnW2skGoK;Haf7`W- zC;O{3T~ca4mP%ZXddT`FnUE$omp)JoS`;Hy(8Sv6=UikvzHbt-!=Fug%Pm`a43J#W zc8}uKOyB*ASDWpeda*mq(NA?e_agiCX)Jlw;X++0Yz!6~1Z322*wEN>W%C8gSFKuT zvhzl!_nPv?BNvsiE^cCR~5UT@=%`{pd}H}u2a*7kY!)xo^jj%KUx632k4Hr-e*AUIk~yK z49LE|$IM-Z0q)+bmNsfFu%P&9^fXj_Mc&cQ}R^-#@9zG~1f%+8SZP0d4$_ZJtg zJxGw{OXaUxc%9xcEUX+iaWz_i@1I}q3AR!ROQze^f?q>*#Ksw$+jk)WgxIi+$jRU6 z@gh4r{f_gd{`KF#d$;o-`-pc;QrzaT!-0eoHh%Xx4VQDMW$OAAbs=ZT&+T}yt>;a0 zrmJRm*T&X7b5+&*4<9z{)TvXk!&CDSX}_+QIo9F7U{&lV3~%2w?MLSAt_CXZZSrr1 zggnU2^%Rwen_J!EW@=bj4ksbXGvGU_z$Rxn1GgkQKF-Bdqw>x!1MJ?b3?F_o&3WEQ zVQ#=>Xe$cPq>%YfP+tS-pO#kgokFHGB`?p!Acc3h8HrHSF5^zYRk{&7Ddxfu0?twCSi`~gd zNIJl7oyepUExtdZ+EbhrW|6*&!zy`(Sq>ojO8R(ob9Yg{2Uv^cu3&t^w0ya+U29RF zA!|RBu>4+j_8B_iwnW5^<5$^DzXho^^X%xO|NPtMc$2I0%_W^3lb&C-!-H>|W7@ZG z-$p)q+Q!Dl5q9%uQRnBsem#-z!()U+YqVk^jXm47ZTkhP>Mi$>etlxd0^jt{bk#o7 zf<1El_;QC%a?i@1A0-Kb?AOOz2PsaQHmzwxEg!FcgzbD-*DenR)0=ObzSll5p&gl~ zSX~=fK*r!KNp+X!HrBJbk6r?zw+*zR28JFzapEBZ`4iz1_yO=|uRne~JhM++Zmy}~ z5jD$ajrsPl1o_TeTW4!~ff7cF?wrrBu7-!7qG1hI)LOc<2koApK^fG?%#Z)mtl5La z#M01Tv}eQ-L1K4R75nwJ^WKi0IyD_o6jS}J6N}oq)052!sSAtB6I#9Q>~BtQabApz zYmrsOra=r_TNY`x7{9!gLhww26URi;TlaNI30J*IP*6~s25%10uSvPnLVf)d+OR0^yUmNr2kvCcwdd22kAwT% zcn;d}TEhvLFtt!m4%(`-Fb1O*qu2Avaly~Ij=I-6UzbAAlcM0f3 zH(?2840?^Lp&M7Cu`oQmYz5N?EjxC6%(WbF))$Di`sJ;?NDYiUx1dZAmX;^ke)QUI z3c?Q1t;T%C4T=1l44wrZ)3JNH5aS=L^3GWjzrjZ-3Ekw(na% z-*Y#dly82k{aCk(7aLWB-tMY38oFp7;$LkXzK_h4?2ZQa? zLi|ZnlIngn(Q%oJJp1_&G0)oM~8rppF#Kisdc!ptz#>3f5M!@p3Y1av7xlHwZKIRfC<)Hx^ z+YebhG2%>P_GY&qw!AUC8}KHTUMq5$*`m#M&KeJ&4*7m$OFGTB*L-X~rkpq$vm-3h zb`o`rZU@t3+3?1-9n#slUe4b-aFRlPI-P>1xoMH!hg;XLfBz*kR>v`eKhtw;WoSIx zC3}gEUE&!R<9^LAmzu-un6YpIkP)W}?qw1PUw@3Lc}O-P=meQW+~deB`RqB#M~|<4 z5@4%1^ZNSfq>Bau`z^j%@Mh)J)YNb?5Y;?SztI#9X(mAs6wNWj5#Ht7m%jjG8 zYL)NLwp8Yk@5;-~20bfz{W=zj@18@4Lf`+k$naN!+IZ)&>fH7B6Ne0Mbj>oIkF)@j zn6Fg`|H)xt(XnPn_xV?6>_XFGKUSGF$KVUHf{*{!Lfs1ymW$ZJV&DBw=AoH4dAy(t z5QyH|a>JbQ8@I0cW?S_iI%6Z@IXR%AvR3SfpM02j!+j;kcL=3>&NiNz}%};i{D|5;LB2!8+35}LbEtlx~|{`#aMjlza#Ha-5x}_Dy8;j zhVp+SdT|WV3gJ?9*4T0uv!3b7r4-!bDw2llIXrvG*i8zJ;r3%}dvQ!mVzzkF>VY4e zSDGEE?4!3ABmr&6aq>xfs(!qoUGfq`J|Dhu(zBs0A7(l`Amdd?#Vt+m^N5;fo*uE6 zA(t63J(-SAKmwAOdthBKHUCfsydh@q_dGmq`^-LCzUi{GS&TJ_-Lr5=z2s7O?T}gU zDi8^doWHmIIJ9;EXn~aQ5QVlY*qm0(Qs&~*k~@bjv$2^&KmSN#0dLsU$;3}TzqB-w z=HNy$yHETgY(A+J9kMH(Hf=)CbB`9$fZH2wxZ_kMmvuhe>ceoW%by?96syjvJ03cJ z{=8+NmbY%pmMtevpWc{8yk2-^rb0gVbT$ZL3>^iGi>}yvQl5P+$=Hudd`6uzmH;!& zk__Il+0;4w47jGTqN2zy>o;hS3SUWOw}S{_KV5JG}FEb4JK zn2`b|jY6~w%K_*-Zlht8@#i*S8`}cCL04AML(=oR-8a5Jg|u}1Xd#)cF$Oh|VVSBF z-jr)Wx8v)_ysrJK14T-RNP&{Am#S)0kC{`=%(?)D3b8krkzQJ4w(zDBq0q3aM7=3u@=CT~ZKJMnNce zLy0%-Fl;AP?R@pCn}fN0sJ-Ga{{E*$iz4jb13ncVA+-!eUo5j*xv$$(Skf;YgHhoK zufV{8_#Itu>_QZE<4PEhZ|mOsWMc8FXmzM>Nt_qZhC=SJBzT~>)ZF==-vn6^sC)nj zpb5|PNYKZE!a~ZE{kHLM3HqOab3@R46<@~+2+kW&dFxaal(ed83bEeL1;Qm%P^_mbu@3^;L>dLw>!3nC2f!cK_ec9>IBjs6#MZaqmFwG6X!k60&{)^!Xgh1($mZ3^#yt9{Ub{{8pz<|>e^Wxia`M_!s5F`R*6Fm^n3 z5nAU}A(;+Lw;-jPv3z;2IU3a?AVa44=}XHJ6|PFf=>f+S^g`h2T}=j^9Q06~o?ON; z4jNe1UFQK;oM-UVdPm3Yy4gIlWvN5g1O-)e`=@EsTURniu1sn#MJ7_EWE}J3xJM~M zK4s;%)r&xKQ%lOlr$V`Xya&-nMMl;^>ntk<45N)xS=lRk|u-`5f z4TqBB8J$$h+u9jCii(&89A!!%o~ZR+9`)`PMNc$7CMM=q9Y-pnzd&vD=u>19Y*|f; zCOyRigpx280|}Pm{DbIs5W4q}#+7JCPslyqCgYo*(QC_-1Uu^P4h&X@QsEL@gSIhl zHW53=bsSlX$wz4Ub5p%k2G^k7s$f#j*z+6xuiSNOrIoT7f7Y}-O1n++&%7f6 zVirV+O!YPX=byW@ad;&VLbRp9yk__<)eXc+Ln<0>LPkK|e93?AIsq9MSn4zevFKMv zhrD|37SFDQujGUV#~wv|eePO09${;}Jl6LFnoZ zjAy8}a~f4qS-FClHd@jWX>hOg7-dZ%nbWUbnssCGBtb`=ObdT&+P(u~sX=I571&_b zBB$csB1lzWjN%@U&Tv3!;2`)1R5R0=0Qvfy8ubTfY)zDO*AI{T(wGsl^JrOw7T_r{ zIuq?1@3gU3o4|_`kqJqsPt;M+LN#?qw6Uy_JZXP&CM=csf z+flxA9kot$7h1P(Zxq<6jJ^k?)DSNCGPrdFPD43tJi-UW;iC!5DLaQS@`I9p@IV-W zkHGfT0i|WxVS`bFcVWuS7Z%O;oYOvz`wX={U(0hB`j6NI?&Nj()O}^$e1`uI759DM z(R60hP_tMfa?G)!?+5 z5?3~nocMG?m ztZbSk1>jQ#gZj)qyN4se_jAoSLa)!UROXjBW3zbB(`U?B#$3l)ylt8rJG&rx>&-`j z#!BOL$F47X^!aUkz^yXuVYZadQx^4njd7{;u;0wF^R$Tk6KXIHi8z z!|7d_8E818PNEe3WZ90cy0mNeA3ofIimOuPzOe_ReqEg2cc=7%YNSR!fFdm_G`hra zPs~C@Z`uHFq;gDtZRZCJMRHHgv5^%du<`{cMab!IN=r9ow>+ielh3%9Tqme0k;}bp zX>4k{Ze2vFTH8C{URn{i+S3;C@>=A2@pg_iBrvwEJMiP0k#QGEeSm4RSK~(9-e~k4 z40jFbGXqg;Pa2zPaB{EN70rfj1{eR%tEuiv@0S5yy5if?RK%L;9VvX`pp(NH*#ihv zbhMt+=NN^;T|#RL*l+Fn^(#RuB=EuG7~JbTVe=_?aN&z6%wb@!U728Z0zk?mllM4( zewJ;|7M0no8>R6tvzh7t9PMWL+o=MK zy$02Vo#kK93B4r}tj@dRNp(CjyfV*<(&{`@<-&A`0^h-oK3RE(|9t_@2}j(agSMez zTjClr4JG)G{oX15r3C+@Dz0PbCwPuu}Xk(Qy@U)^PWo1GGxI4CdV;bFeQ? zb48Ohg!L}W>tuBdo71u+0A-TIGn9Jp(f*}{&-N~IsdmS@O<}sy7X>8$nxs1wcb)nT zT%ELh^oEk_A=B@XsZ0yHUv(`hrX35g`pt=NVRCIzcoZoQnWKbs2eZ8)st2cPO`cqz zlHI-TU?t)W=K>SsMZxFdswaBu4srRj8PzCEn2Gy|h>#0+7OY;qIxu%7nqy(gX5<{I7gRlf*))R6-5wh+@eLyMa8?6 zP_*YxQ~8b9bM39?C&(Xo5&-kjvu9^cpS~yK%n@X!cgeA|{KfLmadT(2-RJmV-P5GdDfEn>tLF#Y_`V~k`|Y6ZYhwU5Dzk$3HC*>*`j%e{=&3#;uJ8qq;F`Z&WQZgF zev?7d`W(v$P%nd`#&f(r=6WIRGxe_+A#K1=>%2?NAL@K>J-@Y%j>0G~+<%=y9a6a@ z(nG*fx5k=E(Vy-$IXl7mG`hWGXU@zZdQeagL4=Yv4$k&!=Gf%8i<638&`GroE^_^ zEc&?J3m%kcR}uQgpkMSIX9f$Lsydf9;=C|&QbG7zY-6*?X9b;;zzOG$9MQG<5V`Jc zL$)n-Rsch^jdN}iB6pH8ys3ä!kHIw!dJ!eEWB4ZsZI^ZsOytq0TVUD z+}u1Q%LQ22$}I3c2;v86dLzAapYDaFkA?4|x{7eBRN>BM-06cox7ib5clobRD#!0U ziK0>?bfb(}!V%T$=66*-CVb6>RC9EUkCkn*Xx0w%2)8e84dC}>rK8A~2-p|0O2yhj zPVd!FAJss^M4*T?&Kc>uOdHg&C~EVMVbGdOI9zfwDZ_I=+l99y@J!iYAPx9-t4kv5 zY+tJpPB#l8uK+qU_{%U}JLsfRYi37%UYF1gfef0i9CqaookP_HH+C}W65r#zzn7PJ+Zz+n%zhK<^i-&wda3rv?9s?MzmVq}} zXPEzyA5Ej?F%!m#$(s=D$TSNT_f9>(chKdFS?WZQ=EdSIeo?;Q1$Q=&QQ)D#6^8D5 zV%V}o&2H;RS^N!%OH9fxG_C#(A#;A%2P!HJ30``csJl9SC{iOFtf~_h)zr4_` zaa9Z+JZ7~NQ&Fn&$)jwP(t0!E5T^TZ%iV_$1V4Vr>!HzV$xd2XBsaO?|p-ZP6c z9rvMsNn*H+N(407oY9uuiK@Imrx#~x~GS(Zcn_~V8fl{p{6 z5nzf8SEF)!(#5h-4ZK59o_uv0Pv3{*x$fVcy1{Tc)LEzxc-C~NOCq&3>-AK*rl>g( zSi8V|aFQ228%mtKg0}9Cj0g%5A|1!Gz94C-ga;1}Zd5qv{&5Rm6q;VGKtTL z8rX$BFx`-O(X0+gL=5(sMPS{JB|N9FBpMDQHq+xcNEyj0)_sA2*3Hg&bQ__{R8y~k z13zpFdbfc}plQQ;wFupC6UFoAii&_UyZ)&?bU9O})X98#HP&(zEg$f@z-LUdLhfww ze#W)do<6;0^)&WzF2BZGk6iQ68I(5^T!40E-P*NRN(+x1J$e_c_MH*4?;KsII0I8P zzq{xso3WgAPTd#2&-QL9Q1`T^{%DLxH$LyJPTmVHKZw=lQMPrfQ>C58Zby#9!qXV|Y?R@+15@8x@9urYny^~N zjP|{#$#s?w>!9vf4qkVqhx95gbEK*?s0hDo1Uf8jZKk_nZ~HgPwzRUE0aMdqgn7%Z z&R<(m-vz&I+vM+E97zB%y1BBM?pS*Z+8O{ySrD;N8G659&3c~5YuS}E$PuGm($_Rn zHHl#{tPw!J)Au~(Dl!cn1a5KBwxHP4h}0;B$#VVGJ}_C9k5tp)sYXmzu1oL z+RZP`PO}U-&`GU1y}*0!j&s2*#HE#t30B=c956whDQ8o)H+NQaY30kaaL8?Q-u~G+ z!s0Nl5cPJ};$8cKTX58*#wOyvmGS){$2+%cw`$$L5#7c;B8VkCe%v~1n`^^q!CA-L z-3`_(A3N#F9uSx2!1vGm{#D>0LQ-E!+c?-X@;>uxm{xX!i;ixW{IBH;-u7cYDp>Ii z-W`5nj&*94XWbfyTr4}X0{#VAx}R}7v#YrlChiIYjyG?02X&7EC0xHjubZ^EL>j8* zt5EzzS!vwtn&ty7kH0VQEM#BZt7vv22W0aZTZ*KXU=lN+w4Dw{jY9Ucq@SEMt5uhl z+*?AqchH$7q}*n=F)W(tH6c3aOxk&_^EsD48)YAmK;<`^!%A)1?QFDdwr@`^sHmhI zQQ8FG%d5X#_r%{%oE6-acq8gc&qO8G*ZxD!W3^;6SIu>Yjr%>jO#Z7^8+@s}GuB!C z)nM)1R193;bm8u-U$CMaQ=B6-S*l~g&HInr!^m6p#QBR|(~ek9sbhF7!T#{Vp0zpx z-H}yeV-=;uQDAz^B`dW1@ox@4e*VmK7+&9dHdpun8o{@3-ptLKWw90pDi+kxVbp3P zQ?)4w%qYKF{rtDQ6OtqSrAljNAiMT%i$(x1>BheYpSMh=l6`*5;$P-z#xbULZ*`L! z|Dy#kEJ}s1UOtRlK>)Zl_Q_wclXONcSm(p=;0hM5DCoH8dV~>CAP{ey(x~O~aQINa z8WczB3&LE!$27an9I__07+ts5uA>;Nm#IW(%E&5@uDrFlo&LB%?FB$wnj=}rOOE9zz9 zLOcAm#s3BQKXpeRx)E63USIX3OF#vD35wtYw2r9mp&asyigp8hrJTTi`)J`T3P8z( z+(_O%j;9HX7pp|i8_CF8WOx`}qM}@wI8gx>`vStw+YDDK-HA_5L=;9RPZAPVN_Uf! zo52r*kTYy6x{lj$1gfu9n>M|oFWVI+byrghyJvkWTd93}DMQij2#ZL3WL$q;e1%rB z*~yY|HnsP><7Hx>9f~`h7?)Rg-JRG(#IkY>NjGd+-k0>yVzYZHA?VoIvnE-||H=JM zFi&J_@RhQ<+|r>M%>>USkq=S+a@5YWP9q1DXtmziNSl@|gE|hm2O1WWb^EBPwL=^o zxn^ItX9JKQv>Dp6T%FYKzH(;$yO)DHk;kREC5@gxe}35rGfpa=x8@v;l1%MN1BhIr z88Rr7Nc(^2tL}g74KJTzoJUGaNKT$I=%jR0X+07OSHHO7%KoWOWUnQ#E!UF(;Klg+ z>32YWgqwpjv}mm^X3#;9$31Un;5F#)N*nviFJCl+v+QKXqVt%0#IL=F4n54wG&Bb9 zfBsn-T!FR8(jo0(-q9nlk5Zdij=cwGRkqkhx4fSC9wU%8*z{we%&d~6yCMapGr+G4 z(GKT$uIRF(YNmL>eSuOG6rETf=Ev>>DG>pZ5X1$KnufT3uC)NU1@PwAC`vA+I&WX&6K zMOMADc$1TpPK^z1lqW8K;(&V;+kbmw2}HtVR5IUbnC#uR?*b9FZRxq8%Nmk|jy?-Q z2I}VNnG9dJJ7Q)zx5C9VEv>`w0r@-Maxb3l~;5Afxkmr{kojtfhZobG~p`Xwy7d z<>gEdt~pUoa({~n-xWM&8U_|M^Krj%-oEQAKU(WY>0B?dvP$H!?llbPjntDi>R%m4 zKEuBGG$KMGH={lxefC5ii28$8pEWZtkBb0PsE5nJrcoz) z&p6SteS6`hD3|)6N=KMQfjkLul_+DrtMa5i!wHeL?ov3=qc4zT)T`I@I@w}S^spl9 zVX19Y(ZJdYG;TdA6juK(9Y6 z{mE6MxIZb6{ZUFv(1XlBb6`J6Yws8{ljdOCbdL2@deb6No?Gzb=R4_AVO4}cgQ8HE z+Vvjl6NOk%6{6T%MpJ$Cu5;96%0im7@rdygXuAP?1TnvV|6Vcd7t`#+EYfv&VJ5({SyNX z>pg`!nLuh|J$a47rxFnnZ?6V+L}cI{$@dVk|Kpdieb`yiq9>CSbLhYOPiAV20`UHIzFJ+m_oP;D4Bl+% z`|7Rc6nNw-RVXOnl{zEb@c(v0dZCDeK}or;Cl-X^Jf^?|8#%YGj5k5qq#`BZ!8ks7 zX&Xj8XXLz@^DT57tWy8cMoPkEL%VI|!OtJPXo}K2;%Sq`tuE(;*>okpra*N+W0v~oeY$T81+Ji>?q=$`q$d` zN$sQbaiDXrl~D2oQ3eC_Dq;I3l$su}eAWqw7v z<56PKC!Eyy}5=*9ErPZ8!)2htoi@u|S>!w%jADOJLgCo=IhF~bgsZB>TZB7;x|`n5C`Z8s*D*BkQD>+wsLvqQZ$p&)+?BS3X_UZ-@_ z{M~_N@oPdXXYC#DxN%gw3wEgVbK_Jqyi8nZJDSnActRrTv$tb zi2ONhajXI+rIQg@M>yy^{)ze#SsPZ?x-cw45r-g6>A&#_V9=XM2J7pqZl#ubHh0Ef zL|vk`PI*Ci-rlNk-B$d;5+4>63_*FbU*TNB@_c%;^}?<9gk1RKKeNv=?D9r7S2oO$ zUJtY3Mz=Q%r6;n2v@Tj2dIPUAK4dl`snqW#g0fp&q#HE1@BAuPU-Rnr0;}v>hI_vf zVq$BypAPBWqetDXxY{+xXl0GjPk(>QU-*+XFv{~%^1Cw3%Av?_Ce`7#)AKLjK-^Kc zWBX{+=Mk%W8!;Rs+9U>rzr%n7Tlyewq9k?a=?&uopL729qT>@6wMFe}abLLx)Hy7J zXcB0L3^+T->k&7scDF%foq~nKT!iMXcoK$w>GNA@}OH0vI|6XW)y{&x`BM{0>)q6V6eMa;2db` zZ8Z&kC-K0hB0T82<$HIc^K!m8@cKR;2jc|`Eq1%i8iCSpE8RY0QyZp$85paxn8wt| z33pEqh#=^Nr2R;mlqc1uxw_;2G2tCV%3T1rUniDkI#1mF&q4~c2RBH}E18fcZmeTX zh{#nqGU84zU4BYQr-MZ{?}PW(vLIDrK=_@qaJr6;zdhZn+F_g8(}Hqe^^ajdhQqVg zwO^)uZ{8Cm2fZrEi_s7PSI4EEY-h-5S;}VTk?zBTEDvd2 z8mRmrY**uC_xZjvJ#4eGHxBTa`H)!$dT`4KZW+ewX|O3^VtRz0?To{#V7k~1$q8TO zFb3BL1#B?_XRGa=7L0(7#NnTD`35}OWAv$m4fYIFRb5X09>-!81-7&{rOe#FBFQ@k z!gn{^jm}}t*-ZjaCI&rkzZs?D!M*ayxn{BGQx=4;?M{nEfzjhnRBb@Z=N$vHU%fhq zL_<{UoHL_a=B=dHt-*qj2f6R~({%8*QkKeJFur<`Li9FvwR*o~t9ySV6J6a{g3=}b zXnb4$(eb%4)jIlLhTRuamG|n?r>@W4{WPs;y>3gZT7{^|^46MzQ{xZ-Z%tFYB7K#J ziB3@Wocfy^%J5@;%ih->efm7iUkClp=WQW6Wg-1ie>Z#MP#eO$|NPf;uFZ|5YXV~} z@3bB87goyu?N;}yX1&xH7Z)Z&j0;pQe~S535*>8g_=KL{{kwPTMBH}j8Uj7f0NQlA z&g4U;mH$EJ59Hg3r#16Np^<0D7>T-xnSvBdkyJ0M;W>o5T44yV0p*e=Vd~UKE5i`U zZyqD9+9EDPt(5=n-F-5yJY`r46xr8vhM|tRhv)^&&)?g=dv_xWK@>8dylQ?=Qw-0% z40;^C^nPQKCT@2PIgIi;Wo1dYKl!}Lw-WwP9;$aP|92Q{9BOk!D(GN&yVB0%w2uOK zSw}dCW`~%zbVNrChFU={xP2?Kdoq5v$)F-oqYvA~My@IH{Pg8ZK4JX=!#8PLvS7+W&&e-7B;AgiP2u z|09Frg?xQUp6Vwd&}oCwsuUrgv?tM%b)vLd6M>uTHcsQ~w{NwmP!K#8j7_I%PDaH9 z8T5|Qgn;_*u>}2sP>QERbiIV_$4CMn7;maxk(}b^Blj&}o2jH#+!kVLs%>ZhqRXFl zF?9%!Lvk$)?&``hx&I&tqVAI_@Vhhz(H_GH3I!zsbSB?83zoOHz}C=zy@$Ot2czwh zB{g2rzYZPpH?Gn6pZ*i;PQIjNUZ;)b(fkIJ8cfoil;Cr*u42}`D&HHc-#1VS z-naF9`)vcB>mIc&-eccC->rF%kvk`9zSlP2cI!uVoesm7r1iBMmhdYi(`@*vk9Oa- ztW5d0?wf>jL&R?hK#CQ(A@*4#c<*A%2wfIuodrgf9XevMNS~F(WaCX){UaWCF=Cwb z;^s8CpTS8Bb^8rpnez%|VA}!4DSJkSjhVTii(O>q@mY%+-rVsg>F}YSojsSO*q{BJ zbJilKXSz}0iPU!867Yz2vHNs7Cyh5w5*ln8vnBUUcvQRKx>K950urT*_;2Fpl>2_I zLYr;4@@VUEJDMJ#^OG zjZ7KOw<*bw?+oRCO?~CxJ?s-#wz+n1;24#qJ{#mWx3=oHxYkEFo*{@2hx-5hkL6SA z49GF0+Zn?7Mk_fD@RKQ|`ezk+!IKxa{(a&9{{NAG=Ul9(pm-7HYTtnaBgV?QK?R@o z4QkhRyf(toIQKdxt&@(*uPf~9sc2Md> zH%hkNU3)faf9E2NCf2waiJ>swY)}eU0Mr4Ru8Lx>1<3Q|h$W;SYdu1tL7Z2Y+Lvpi zxu(I@h=c#L$VB%nO$KwyL}Mbd^_dY6cC%5pr&IKWFtq2od$$!$*@jaTV{_+QY(fHa{K%2>AQW>(ZDffQqJ(X!ZBvNd;?1Y6$F7CDsR};-{(TGz zZR-B_FY;wC1u=#eap_YL2reIW#@ZQ&Ha)DDSi7m!^IkpOd#CI)YR`qj^8aoZZ)2kN zIykuO3ZivXzJbEpQS1L6m-8)cRTi_f3=7vm2W0(`{Ihj?fWDubSifpBs&NEV;!7gd zc#^e<1?KSFM|z1*aU}Y)kyM9V^BG7;B>wQ$GU%AHbiQYN1kggn75&*M&)G;*cFghS zIRyX&*~+vgG>iQ#Iv91zzDoG!erP!OVp1wh_@rIg1phKf1Di`!T`$AeU6eH($hBS^To`D`=B-7LH<^?;We@Qy z@rPg%yJ}8CLWR{MRrbruw}IGl^_lq;Kx3Rwz9bmR9P7&%ml#t7M!!aKa0z@mXp?_Z zM7p0oZP`hKc?){+SAlz4(0v#7D6QG1T6=!ZxBM@_@ac}XL6IV3BjPE)Fb^i*o>-2p zB}Vzi+^J(=n+vhAv7L(^n{1U9wki6%Z*~=cY%2s=mQT-b!~f9IF_&qYB?HVVSv`qc z85tMFVRx*ZRd8hm!~_B*q&CfVfZR$0uYM@}Qd#L978ZsGnJ}LL?Sr|#ALnZ9mfzuU z%p+=Cp)(viwD8=8tET!t} z*V}Ush zyK>6!d^iigZXppCv-(4Jvb!_1lz|*seFDw;bkrS6+$gV`HZN{G_;wo#B{bha8)HZ( zxCHBXO1O~mizxOPpB|+BrK(C+TC9E$(7_6F-Q?Uk*X)nifv^~vUloIXR>H~xT_*or zPp2Q1jmcPGg2GkiT|NL(yNq+)i-#X0in=(I=PW=&#?O(jOe8DW8*r4g&N4hddfDI1 zs-U>-FZAGfPt=z02>3Z3k)a$iabPEjs(?_|&t``zCFSwp9w{InOU5DlpJCrkTq*SSMH%z>-tmS?*^`Rl@jbM~e)-wvi58RU{7urX6aV`cvh^hd zKLU9x(MVgs-^uP~;;|3D_b^a1C6EG&R;kAjzSc*1t*m5!!+V-a| z=imHpLlC|XP+9JspCDg3PB`e#gc3iegoht`ouo+<|4I38>>y?BIHBT1FWKJGajg9n z{^PPl0`Oouy?qDzp0hm18X(GdyTsQ~OiL;ic-&hXm7drQ8^H3p4_;&@Zsfo$7LQTXIr^WX8RUp{?$lpaB?@l5uRfWQkjz{0xq!sYZq(1uDP+cVBv z0D(AX{VXt(?9gm? z9I&o15BlN|?sQ*~jhSOw!H=JR?$z$3V4A{5F-N^#`lO#(AjZC8?i)O2TiVwDSyEsB zzmLG%K3-oOZp&^yfok^UI>>4o*)PQ8n=kj*04)e1!;ln5T<^m=w$iggkdr>7o8pP> zHy>6XPJARvY*=p&c8J-g7+cBr zeDXtlKV^0au|0h4y2*0z<)2k5C5N|ape#O`@=-_D#Gvb1{XdAU*@4CnraaiERAF!S zFetk1ejm?X0hbcp(ro@0d+!+)W!80zV(u4H2eSli3ljncax`mU1W6KABu6C)lGHY| z3TPn)f}o%X1w|`4Ya39IC_%DH&XOg1=K`_Y@0|PHan2a`-ap6T+xj9!)$=@iuf5is zbIm1pAh#fbRbVM+cvTQ}V8h}JDLF%ln;X1%dW=%VlWm^(m0YiQ)&2Kkn|V?;?V)4u zzG?&Y#im)yKi{GGy#0)$;$3#lZjaH#;uD#5elYzRqk?3xFq_nF{CA-J^d{bmAKv^u_&bhGRsYR^G{WJ}Arct(J7(Dv7y6=-;!H zNjq70`Aq)A_g8oT^_mv3Iv*Y0SLaN6Id9@p{>CN|g#s}6`NX#-thw^?K6Vhka{21Z zV;iKW&O6kaJ#*rp$Nrp-$xGtWQ-gM2uX#P^d*B@ZmLop{J>?!gcnm2Pd}W_Eu0Oc< z+x`6hGo~Y@6r_ddm!{`Hl>FN?(vukvbOZw~hf;WvrYI(ichS4;eo4$eS930E=DT<_V*gN=S zy1bmv{Zb*;K~t5H)al}EQ$r;L(Sj|6waAD~f!9;Cg*EbJS=ZXR1JhR|m{rld4+0?& zmC2O45kxm8ix%TVft~6~D$BwT-rIUT!)thX^#{dvU#rr?NJJ~sS0MDLO;rm1>$S{N zM--s%BYzdRfP)o(y*g*gOaC{GTwTu=Kdu+QxF$<~e~IstrmQ3Od4U7@N`b*PZ|`_+ zy6d;edFaI2lWf=pQ_6%4>S7I4 zDkW3q$_61(o1fL|;mJRs-!t-iwc@Ja4y~ib9nem?!qdRK0UF!TUO@RWf+~`e#;;U0 zQd1S9&J%Oe!B|s2|a8J(!01(oPgTsWjOFytGe;ab%mYPB3+TT8wb;*Y(`L)8iQik@AXU0wzOwI z2`ulxbMD1y(*jkT(!qn*kmUyh4sJq<5NFe#)FRy5URmCRYke)T=pLgMhE@JFppJNS zC+GzTmZO0Uu=0)%IE4BTp4M;2zdb>j`8xhBTHI)mxRl&}$%VKqA#B5GQ>U&*fs2zC zM%f$v*7R=eJSOgk{ZNbf8!!jJzrUs}{+IjjM^A3u)KDO6DRy8+HtT^Svn!{-d81hM z-s}#w?)0L`44>4Z%u3TbtJtSnLc5ixF?}p!k1&0#V%M_56~kACJq*!gHSZ1=3`+~S zz}hMxcC&D&vKErcr$SVe09h#XMeB&*mVIt+>(1Y^z|OQED25qjxdt>5t*=mqU9KG5 znQ>r6_3QXg)mPK3&g-P3Rj3$^c$paQXUArkA!}*lI5vlc&T{iIsa@)kBG@>H(F4UO z?++tTJWnJDKe;7zpP%8EA)T_N13Nd}Pqe9GJ|Wfp!8r{F#z0fCpkEY>lfLNy7q>Lo3P zLfYFZBRtq_zu1$pw$b(+U(4bG)%@ySyJv&R?VPig#h(lc>kJB;3<}!}3OlDYb_}Ln zbxMCL=6=U)N_6pTr>4Hat-Hi7E$;m@v1o&Iuv&po!oHxBaF5SEn%Q;xU96|2ZN2`F zfUT?z%L(Db_l05Q@ZTE`M;2G}q^v|W!;O+jkwBKC)(mU31&IW2yN0>P2(G9{1(;~G zItbFpyatsW4NlLzB_hHkb8ytPm$Pxty@odox?Z<>;GN$exw^QcGC3a9gpthmfFfi# zj|Tze#*36JXaVhMK55%2^jQpITuW0(<8{5-rB@FYbmy3hw_quE_4M3e(3D2dyy@>g z?HaviW&MD4(+W|h1hnRIrW3eFQE-ao@4+*O0c#I^>3McV$A@+rss$eW5imhQ!T@qY zbI1lpV~TA=)5ZV*n##bZsPw7vnSz(clMc%pJ=Q2|GW=!0fY}s(H`K^PjcGEN{6Ti4 zSak9KQ^ZkUVkv~JvC{iZF@TY)bN+*prx0+$LY)!?mD2O_3`}Q6bk_Q&-_J*`wB&%5a-j#Q7v}- z0T8bUd|gY7b;&gzDx|uGhEQaFG>{G=-1r{QxQlq#a^2t_ z&%LZK}JBeZW+Tss>D#Tmy^i+7;50OX#w4LsN zJl_KXW#gq+u3jw!*rfFOlG38urP^U3wSJg(3Ax@%rXuPB*yD+?i-g4I2>QI1Nniue z0!FpP-i44i3|51{X4YkHE=7@XL|SqOvhd1IXtQY!P=KtXGA&FZIMBqJY_m~5Ele`P z%69lQe{jdb0X6BxF4b3c`8ftXBjQdji=HE39G#{frgjd8sE(zd%H-4t}rTfM$( z_RiHNjuMdWx&Wy3U4Qf}`nuO4rdKAM*aiY!36u_8X=`KNUw0e7igHNGXnLk%(!lk$ zI}W+qJGWIm(;)~Zt^vv>8s&liJ-~S%PUiin*>&OnEx%(Dm-dTI{f8(ETIO(A!F3Jh zNr3#J@q7#>KGztqm;-|+r@*A|>zTbbF(Z>c6jo}!6DQbhZ&)uK3;RetS?#3!Sn z76MEfkp#hFUCft*qICa(J(S*EwQ^-MUi4(C0!kVPwXKF^ZpZe}WU^y^3t!Hp zeB*SL0U_5kqYZtlH!!73)8BdyWfPVI;u!a*b>br$8yw4X?pV*oVtd@L@ zhQg8do{Wf`TxHR{Nt?sAPZInv6*-UUsZ$A*0uoh$eiT!nc}Wf(93acuXlU4ZQDYtY zQJ5>e*HjD1%2qVyP2zH&g1r+f)7RBiAW`j%$hRa6Cj{`c0Dwp*Q(nFPF^TfaZ+RYj zHLZGQ)Li{VF4Y04X;|ZsDZzGmrdBoNXpd0;%1p$-m=sKogf*rz4zMC<&qknOjeCr! z_16{uXRjp^Sji1q@GLCC7GoA5w-p7d6Z-PPeOh2N!AMN3$X**9B8{TO!AP?K#PBT` zTv+z>r%6G!oxn4m2GGD4oJR$yg)LkV4vPR!AhmOA!lNw!?@!^ASJL|F)7@7>0bZb1 z9*7&oXbP})IymdsYQ?o$)IhH5u;Ub#Y9Q2bZJy`Oo@Kmg@7S`~WijI2e+~TEjlCZ= zcUD_rp>DXE){&!KeSBjR9+wizXLA?SzlqcmXmtL{*54_v-Eg=AmdX@pd2?~39}x^F z(qWYjSC!Q69GO-=!=LHFw-5B8$*cTs6xdX7e~;SU!)mTQ37{CEWK``Fr}O25(h)3( zB1q7Spg15z94v&rK9V-VTL~U^LA-PVJ39OFuUv|Axi!vAhMkQsnt^EUa~K$D+7d-L z-O;wiWYMS%$l(s5uUP%u^x3T(bQ`kCw-+hY0mwqbe)+g?CXGpbuK?DSfLwG%`pb`g z(OU&%;B0C0MI6mIjJ|?Hy=ahaBQQx-c*+(=4tAXMefJ z=~Jg*lJwS|Xa4-ULa(c9TYpRw{_ASdbc0<7%`R>GQf`%A1P~A-d;%5-a#Mw-s905p zhPLc>$(A`Mt$8VoE$N#5(ks8e5{qsWAN3&=-b!fLP{NwW3~>t@BiZf`o%E7=ED(Is8^Eh@dBJ#~dX_pCWM3zPY%s1!I1yI^w#pbFzO(;{4cqbD+V48xLnt9C zM+Yc?jQ}+gr_U}5hrW(SZ_4F41Jl({_B)?D{d>m;&J%VAS`iXRDVH4Jgj}I5{4b;u zU9^*RP=zY8u>WRzPDOt4dx5#G}78e|hzhsSY{G zfFfIPFvs%-f}4fPtQhVpHP(@!oJOz}rCy!8k9GG`yT1eUDEV$*hxDixN9mVGd=z@( zFqsLo0F5O|!bY}eKz9vIBK!72p9-mJJcK)KDX969Fj}+i6eJEyHXPgT`S__FPN85> ziNvnp1SmvDMVoy+IL26*R~X9d-@8}z_w8JpHyHfCP-&R`M>WmakMD3V?~ed<(=rLe(oD~SrU15M=U zr0`@DU`aNk<&jcwm#yoTn%5ol57CNGgtg+5sLOP-wb-!V^5977{{dKZgLTPFfv#kX14V5pzdU+NPS&>sGZ| zZ_KfPK@Md1mc4~+&Em^xU0;+#D>}O3M`3f*4TB;ba}v?0 ziuJ2A+bw<1=@r$+wOY@Lb1Q(^v~dEV)cn{X=8+Pd=-`JGtF7wc!-tw)JW|Ih0UwL4 zUE3U2feuvnHtGNG3a0UJN2D^yP4Jk(#4$s%YoC6;?h=k@s)U=rk8tL`_`HvEY zaG`DLK2&=wubfH9;xT`K$h$WAW2@Mp?NQ#|U3>GtO&^!0%4=se4q5aJuD^gFI=^L= zfIt%(xhR@{M>#GyZ|l_WaghL8q5vSEC{jxumRtwHa<;yLwl)Yt;%B#?as|x;XS+HG z4swm42fU$E$q7`5A~X#dsv5eqDLcVP-Oe~OWKWopsYX+IS@V`G3CF@OqhXS*If39y z$UKVz2XJ$Ed%lBClY~nnXvrvqCIe^qHS?K5foKOr-LaR33_=(WvwDO6Tis`KzCt^8 zfH(&nhS-OKD4Li!o>ajx>Nk?p;2nXuE(x_h`fDO^zfm?T(YWaAt|8h- zOC+RSYjH4LaTW{!1c8*WWaFSK?)TNBvF6uK^=_)9cPdzOmY2Bko|5uL@7)xH0BOBKFZCPs^6QjICqoPZ>`r& z*0qTLZCF`R_Wql$>oQI6E7$v-(rs8(XaM(o+bPSWsc=YS+j0)an)*=r2fmFbSCDu` z(B>z6HyL^2?6MfaAU8_i=oyO{=RIxrMHR=!1EOJc2u1bQRWDv_r{oH%h%$`F#%xt% z30Huyq(y-~L=$u_e0z+Se$$c_!D7k<85?{zPL>TLT~~$h18ss~__-};lS;K{$I(Te5L%jP~zJ~Z-0O+mtv;WywO1HmkswzR290t!7`;rs@xPv%idvV;E z0b(0)O6B@sx;Xt$ZIFoPR-D-+HRw8b0?2m%8$*N$2rpd!zky!*D{bjmp!%it>E&Y` zz%po7IB={kmo{v~UiA7yvm~trs)+`oLOx@LCXOW=k6*%|Q-IX>5fmQ5a~L;ye_8`F z_f%rO09941X|H8M;7YUP874S?<}@r4H9i>ka^185Hy|N#)yHg9hSx9&!zSX8pFfKF zzZw>5Zl2~5{OD7Z#^d`8nh}g~;MS9Lf0?+}u|IF{5w9Yt9H}Xm9H5GUoRqR-TAmyv zqK>}$1eoJgBK$mglu9o2iSGAMPfBb#3}2=~^s^B6iMLB7un`ZPhHILZ#e_k0(k)vJ zBOL)|lJ&>4v}-Rmz@6j}%NDKm&KX*H1DiNz=qre`85$f62T`U8k596D!C!@{JL?`I zV5$xym>0pw_de1U;NiOwmsJ5n7s6x<697d6qvrf@F^b~c8cORhEAKE$$aq0{h_IH( zJ0~#eG++4YbcO>>0m^$^d|_Mtb4s&dKwSuvDcEv0f%XNUv?GmM12awpD%TahU7hrH z|K`n`)AZLh4#P6=I%C?584aiQA$t~JqF;8vQ%Hn+$u6ar5ICuhV5FWeW}#E4A_Wws zS;*jt!lj%XKuz{L?H@kr!Gie~^Z5^Mo-6y=9kG@HbRv25>hHyuE?qK@0!8}(&R1=J zox-schE-&J{YC3;Eb+p}`n#Bv%XisX04Nb)!q)7s2sJZLi?_Eo40uKcbyp+9VTDkN zBl#7*BMc_-*be57N_mo(H;%4V4L5Fm{}@f+ zPXI`ikJlDqq&$#~g2T&Y1m+mM2=w*!jncR{dnwSay?YBmk9XM#{qW&#Y@hen{r4?! z>BKXwwO&<>{3$st;{5r=GEwr_Q2V{u6u@WCE+S4IKcE?!0&q=gNGu@@ya$C|GlUPs zqtMpEPRO>mzz!E+Qq08ucs?*?$`mojF2<;4@q`xOI3xn?&P@+)Sqi?F!vx64&Eo0Y z(rySdqEPfP3t+btLAEt&mq-x@_bX#aGFc%6n1ExOc3DIMQDS|kI(TkY3g*GUNj`RX#M&N*e7BifEb$R?|C=C$JxgQQEH+GlBiG7Kew`dx)~`QTGUr84mEn`r>! zh#+JVRdEkNuH(K$Mj;2MndO-`h0Gk^DEUzNgdn3R3+TtKYXKqh z4&nitPm4XxhKLiYwR~hB^Lcn8U_5^(+bvWZCqIoe{&qx2rQJOHHqhTc0>xh=J1Xr- zuWFd`4p^Bh;q76hPol}${PMCLR;DYl$O<5RLo8bDf+VfRTyxXQuW(DN!rtL)2t*>>%z|#HJ+h71Ju0m3Uc;WR7dc z2o4}p3yHALnnOEr^gz#vzSBUggZrqv^^j8&_)^!_=2Ff>F^IMfR2zUiNpwhBCcqZQ z9dx1MFT~Lfh0<%x9mZm(si=T`0S-N+1APo$|0u-7VORoIkIC|AQF zzJ+v&rU(P1qs#Z}hw@jeb;kw96K@yv1rh+uH%h+Y6+mIzyDpD zH}T{C&j*{h6I?&su@5UjZbSg_Gsc47d2w7heQ@=JSOzb$<{&zn0y2#61&Y@Q;g<@6 zR3WfYImmXqdTKLXSkI-51!v+slo`nNnJi=qAtZ7`mhld<%1{(li+Kb-EGZq4vJ&?L zzAS}wh>g=C37#ExB{~j^e?FQYtr_WrUN5Sckya?;L|-q>ppU&-zSEoe?enj`M-)~^ zhn38Jh{X5qy$bmwfq7%2u92SM!>LXQo_f-Lu*W17-k7A8kHn~v0}uccNeMv*I^rcj zRY0%V<9+7(WX`SL+yMx1;b|c#FHbS2042>M)FI92dn254*44rRyiE*TjF<$y?j2v` z3Cq9rMgWQX!wIs)9ypbh^`g2}LV{C>5Ki|4XGaUl(WrF`_S`E$?huF&^Z@5p3ou3D z9_Ob7#ltzR86am;3n!V-X)0-vU|wec6Q?7d7}7C1Hpab0YS2brKwt+VG8n_r9&80bkAeiBRsEcNp zJhbtUv=l2S9Npnb$goAB(7cmKm$n|T8^DV@|waMdovY47ONr8nLeHEXzKY)#>jD$>LoTFlU} z<{|nRwLnvv{0;bFvaoc4+ChSiY&{aY4;*+^0fuLrOXv|^*Hj=tbQ$&^^#EDCt*)+a z*9KIN%(syUEGMU=wJML`-@gou*=7>y;`55(+s$WkDLKK0`Y`o;0C*6?PNp&#i${wy zEoT}YGnl+X_$+v1Atpp&XQ^id$tvw&ic=sR?t#D)T)un@Qfn+40<3^*5uduxUo!vb z8Gn+qH~XmT=0k19U_z}z&=W${LzK2A2;qcO0J$D;PB)r1GDwMceNKSc6&g&R1OXsn zA^;}YxIy#&N_u>CC;-#o(F+V*B_YoS5@K`$?jR8@2=3!8b7#%EQR~~WN@@TFYA;&5 zSA(ENtwjrOyhSJm{)Fh#YWX^n{?$S2@hL1?%KY#!ceB315>$|((S>@-ppM`2%a|}+ za?;l)-@0@VhLH2Q4R>CIX?hUAuHLqCbyP5M9@RJ)P-U?Z0OS!8->Pk12&FcL>1~A| zJs%Fq5brK6w{!uT1cvJY{N)}|Ns7~{0ASu7i&@zIMfl1C1TCstuWvZS=gsKJ%ts{|i!N`tnr+FIABsTvy&}3a;v4)`mS_`7o-)QTWPp5XPD3?< zEqT?+p)r(}1C)kv$(7!Bd;OMVhmK-+MD!MGS=9~63BE2V!N%r5Q%LcSq^3?6IRS9aaMSfgUVVI`Uc9* z(W)HBck06=NKP9OGX|k2qYkp{02y`M^Fkd=ug3s!i^-iN6`nGWntBjFlWA+C;} zN1F0Rw1-{x^el!20j@sOIl~q{=_JFz{h~IqR{JyS)H(hzKO^~y32DVsPsi&l=T!`y z!FOsiPx@*Kd8XBAsTL7nVVnT=BHxJuiG*oECd~y8u0%G9Z!3;+!^*-5(F~*z zNVc!IRn@n=L~>Gk(gd(2P>8K$&R+y8vq+S$S|1BYfq0G+SSyoX z#-OUB@QMqMcljgH)}}udwTe0m{c-t|BhRox>BFGKiaIlCiNcWJ5{hazwk(}l*yj`p zyG7M?yWbz*DAj5O*-MC@jHvXlpt=O5<<|Wb8ucB#OJUH zSb-xSDiA^(@%HEo5o|Ktpt5EAjuE%Mc3Ii*!K#`sMurg0azb~}DcT8};!EbBkZQ1_xXYmdH`IB+H z`t|Vx^%V-%ul_jxB!_jazr{p)Q$xIe$Da+y`B=HbIZURJ)lp(sCCVFc;#_Cc)z;b? z^Gmvcw;*s53btY^w;?Tp3c>q4F&Fovl;w(W(r)1J<{NVY8Xm70RzGy;ooQfmbF+P} z2ooEa4j9-6mWgqKOG>b2dJ$IFu3EK=`fflf-nf1H5!5%z3w3OjE_zPV*<)z5WdbT_*YR+I0e2$VAxy={{f~?rD-t+QhR$-^vQp%?C7EPMy5N=$KV;1%4 zBg&k<4mT(uo~*+oi(;n3zmQ}-B%MG`UZHtzg{T9J{fu6}p06&bGP$6%+`AguG_*?G zfP5g-*LMlj#pR2S^cFg{ni{<7>oZ|uTZTk$DeP-(?1j}Go2YM4Q1?LK2cdZaLl&E2 zOLXb56@w8^C4N|&EVr$I=XzUAIZ0V^q_-B=gdSK{&$jo4^D~Ap^l6J>#8b6PUqtI&)+jeY@0Q>m`g;BuOTRfBEuBd)G73CcpQrE9Yy8nN!>SX z>jw#L0<|ZG<_lbe30g&Siq_ypnbg(QnE*s>^ZiXH1N(9nGpRY8?Q0=1>v`KyPmx{Y zPaJ8rQ+6+Zc?8%kz1)m0gDYnCKTl)JTf=BNN$Ic|JK=#?K`ks*t}syh8NVlgPa!BB8?{dE*NyW85^9c{YE6&jkWf52wy310S_I3F2~2x1V>AXA*K zRLR9+Ae9h&=IDHdgymj-YDY8o>i`y=?eD1*>1&29^6h@fo1c*8Y z>&xipxTGXa+UsNq$Sj~p*ub4Lb~8K7oN_1H*q%CC!D^4>n~=(e0;@HFjS$iZA|Y{B zM!@xt`nQ2aq78NJ+O@1w^J1vOdf;FvE@OniXPMNrl0e$Q$`02te+>?2KXT_1x3B$f zGDF$7H*AB^3CW02p2>~W@P9ps(N)x`o{}PKU}y-@mof|^m2RaM$;f7$(CS9~Kr^`} zTRrL~1L{cpE^V_nss_5!JlE~Zxo+pCw~nns5ObA1*1rhBa2QCdQgiVJ?obNRNJDE3 zGbsF1u3H6VI@OsZ5`|x7vw6qs-q@qhr&9wyssQiw^mNE&QK*Fg8fB-XXroe~;ia-) z_iahGD1EYn9%;9og+(NivKsAs@!(7cqrMJ`RDuA?_JpaxJ*=(=;2%c%;?waMuYnm< z)zDbYY=)^TrhUt(_(@b9(1sfy2mg=Wn)W@_ttg-o(~rlO&&Ru8OpEJ7jf;J2~TljAl*qdo-)*liG0Nr=@e~H(7AL(d+^Grp))idYt9xVZ?b>) z$BX=Gs41u}0yZp~d^UtJf&-=m4L3b>tci)K5<_ok$-!N)1xeEkNd;7vU4{38m;R-( zj(D3JK0Xgnd#y!D19Q^MoSd6Qrm8p`sH~*BfP~jJ_;G-oSL)HuPcJjyyrGhdEDJgq04kpgvV!ZzFs z_j*305_mbFqINKE$1g_Bw@M8Z%`lB^Mrr#yZvQoBd<@F&D*MtU28(^ z4O!PzzK#S3>&z}&BJYr5*_5y9r_U!AJyP+QGnn8TFBKUZe_p2kvt)ZJ-sFd0QNMo= zj}u@2-~Uoqx7|Mox7UX{6G8B=2gSZ>ggC$s*LTf zf+UOc7^a*zOU-YBA4UhdtjayJ3rCHi+HZz>3vE|!RUHfe^<$AE+5LQENBohEccgm_ z7G2oYlJ)j&Az+mHvPQlHcq1&HUk&jnW!t=3Af35>DRB>Van|8;9k~G)xxF16oK;7uXUNOY8o* zz4Yq52R|Q~R&fNT(n%N*WQPn7=h?%TX$RzbZ(zPuFI*ook3BvWw)Ka%;!2t`Il_G@ zphCIM7r(Jwe|jXo3LBaVRpF$@-wEOrZrHrwFRtR#IO#EMHtSk#1D0!)6?K!^a0*Z`KWZZ|5 zMyuG`##p9w?i{HTaXZnMots+%h$zC0leiNn2B|Ix#>H`vESpx}XBMjoYDja$GzaJ& zC7eJ_SEB_^UHim&8Uf|wK*=(Y`_Qb&uqv4ML#R1i;wl!rpV|&S4$FZ;*q}(}KJ+539)*5@gAY z3IsA=1-CStAsX3vCtIQR9rSo?N)?cg7GeizPv5ds`ef}T^sqP0x(^~u3!q>=bwwk% zQVLk2ZR0@z0m3=8eqm0X;+{R!TQG`b*aY}v5?am5dPe*J>1BQBK6Uql?h5fI@q(MV7$~D9XPU=-}&vedR2AxG0@h|&d#q7H(MA; zXy}^~phK#vst>@6Qs14&s|bz9TWK$lQVL6MwTz4wwti+-7Fovhz}LV8URL`?wInh5 zXZI~#r!cq&vN1oFnqA<2l3PAJ^5e>}oi$1AsfT6SfFYq=)ORxqlSK*B)0p(8qOLxM zs=B&z7Anl)<}Sd)rz~vuKK?HgT7cCs`Ac*`)=h2;!f9WQQFRRCUsF+GXmEkL0WHqg z_mX=^?sqJb{h^W@!CRC7XRGAYkX0WoJX-rKNX2@y^hT9os&s=v2|ML%m?_()twc_X zV`40j>c}wwW+&(jnXgt*(4%u6n}qzBJr-^FyA%|DIIz^L>S{fJr0)>w0xVE90O#_- zjLG|$_hgJbJUhn?DJRM9$ZA0tHP>t&$%DY1o2^rSSVQh{%b#*5l#ca{5v4Kf`85XG z))a}aL65trRaMHI+%_~w0Vre^AWHbgpaaJA4NCx7e*tjr;Pl}-5%K}T4tWTWI;3(4 z!#%PsNzWP*J?ULNj4=tnW!a(w#lAzGHS2jEy$qSbNKdGO-33El%&zAk`2?V=gp$!} zqx`aEo1xW?W;7vsXSdfNfw`HU?sl>HJ2f(P3AX+%2FoVdz7~qF7{jLEm_$+Eb?{wa zGiIhK?c3)8KW5ZfWt;&R>-Zp3!Fu+&bxRPzlcl1oTV?(gL%cC%+k)WHFyJ*rcTre< zYuH~`RP*T*gIQEm6xkOR5z(3_KZ=CP41nkosBmE`*}JmMbG{+;cD-!9k?>L}%#d5g z9K>gpR{8OBKHc=wUz7PhqhZesXCU2VY)Qh52-i*j@=~NsR9-?to!nArIb(*ceOo#B zIhY(i1VjIi;tGJ;^IdZ+vjk3d4>;x$jHJ7JOiy544KnP7l0XzfZ0!^|Bm3m zJK8Q`!H-XRDA9_!lWTu`rM;hUYL7A$xGfL;ES2r-V)-x|M7)wCzhcEU{a07>N#H{H z7?MtGJzw$InqYerAkAm>q}1FOB280M)1IN~uezWMOyjD9 zwwz-y6$bOYjxXAIMUPs0CFcIPE%Uf>pk0(jKNu?nRZ-K~nZkJ}kIO_Y0efa`isLb5xC_yZcX16R?EN{wo585h~AC$ObJXd81-Lr-~@ z>sU=Zg3qR=s_GM;`QwvGn1txCjaq<#x$b7s!G!8G&ZGj3G6DncSTAu}b*yOI+ut5oHGLaD$6ttOGLyT(3Z%qIm zfFwo-L|idKCpZd8W&uW*-$R$0DuM5Wyr9j%e(=5QN9q&7OkD=kDz%p)z~2joc7ZBE zL0p*Y+P5hcFfA)YVff=*@|NlY8Jv&ZZJRAta*AU;_Cej}5I&zaI%tN=G6O`<$Nv@D zd}C;q*NTW(z2iL%`I#+ze{m2#!f}Nb4idTm%30;+=H}&PWef-r3rHCR0)j)a=~vX- zf-s-X9?9PXyn|>jIyr$DA(oK;5_lIP9iUOPYe~2uecC0a-)Xw$r<}l&fB*-AwlSTO zZG*gB2gvp3=FYK?S>eScm~{T88gE-Bg!JVjS=XwE>m{h-rh*2=Bs?~&ApAI(&x^dFo63gf7S>JvR@Wyk8gn#A?z~9 zIAhgc!BDpmoh0fQug-`aOkSQ`$$>w2BY2#gQIJaTq$C40!U?kdr4Av>;#)lT)N>?w zWWeWhX@1- zk`jdQ-U1ybMM<)DY2H7~#;@V?==MwL<&F1$jFV^O_IalJ@P(Qux=5&kM={)6sGw#fK z{=V|<2J}txp*vBPMfEhlI+a;Hdugr-QILoO+5}^Oge9^m-m@AvaO^}Otv^--QL_L7 zP#q+s)SW_NMcsCI{FNuOgz(5Vd-nlHB6O0JlrY|@kgoCpNw<2<8j52i>}QW)tPcmS z(c=BPa&1tfVr3?3|9JwEHE29zkcf)Hb$Y*-x3sH^Z4d3cFxq$hKzECfyh0>-96Gd| zh75|KPltGB7NJ3&$(qG9V6|2�Pd8><<4rnxD_XbqC7m#`iRaXK(QGEp=_zPmeF5S&LEb?Il4Yy50qmi6HQou zWVvDq-(nyh0DVrhkj?W!Tc08eq=NsMq@1fQZ+r8vw=6dPGt^Z#SzkB94%%F;%0QX^ zvD)$TYz4jVg>OUh;Gh!`7Jw7sYYRVt&gL(1t3^cAaUe6qlAQv!q2PkV&JLcK$XyWg zbA)PA>yTFhth9=)rnFr|HT(4i=(lmc=WJ+S)FA}Hhj6+B zq93-;AwXHT*jv@Ty}eg7nSaRUtx3x2J#+Wjp@v|Ydb_C_P&$}Fq_i90Id$RyX-0E{ z9mq;lnvQkfHqWl_QZ!jeV-AtFML6NZWaQ^nEj8t+b(qr0Cy$%)xGb6OE-jNLL{pf6 zh{crUKK@nDhO#^H(ldO3^{~QE2KrpR%9X(teAv5Okp-#L`d`)tD(jJ_qd~$qakF4RB zBNI}_xdVV2sDuOBwIAtx*Wi~vj1|6SEB>|=YU(9SWozrd%3sCrm^gFOC(hh%bTO*p z!6Y@_zXE61JdUrm>zkaMV#ommyx)Z2RLL|KPd4zE;LHt*l(myj(yxMiSF~v!= z^T4QhNK80u1qFLiXqzCDwJiU3_saVGCYJT)WQ;u4fPp2oYM_EH4XIo|%gfU$3ZOhw z87CUsh1Z2gzhXm`I%Z2eLiD9(0Zf$XwUhdM4|kcwP$-Sb-*2$5ttIY6W$)nAfj78w zp}F1Y^r5zH7S?K=Gk@(Mt!el6EAz+wei4ih_?6e(HK->SRvTTxV1nqd|SqLdeVmPNZAKNVi?$LZw9_2_I*4s zbD*m^CB4190escJV1N~}5?nDdA+tX5oPyHNUcnDx#24?;A6HhU2{{!L-%3$^+CuFQ z(V8E$@PA1=!p+T1YC5EUO0d|7tVt^GJ=5(MnzPHwzX4+*1}dQOGaHY0r~Zj|*3o-} z6Sv>eKFPe|LSBPFK>|r%0CiZUblM8EhYj|3L{SN<;96n8Majs?#)dh6Ji8pyM!q^V-#QLc{U0cr3pq|@a67w^?#Su!KX>aH|@>WRAz_4SG@IH?xG zVkfF?Y_)t?Z1_(!Y+QmmSg6TdvJY>#uPiGwlSGfq0*C=B~2LVEz}B1kgZ|HUk~^X>T2d&y2{S0Ws2M`qnr#pPhxqA`X$9%eD-M^ z!>N$8kedgveH9%Y$e_Z)l)#Erfr>(S6GU$`)G~JEu4CzAS`FaJ@ej+zrIUfdPBHjF z21Z6^00YQp5DYW6r~ng?KvLaJt>fYn>GE5RGESEv16R?~5=71fI#drTEvvX{@Ok&p z1n!h5eJTr*DLUow2oNajgok#bR)F-Sqfqi9$JHgssHt&4LtDFb)~)*b`porLcM2YM zu&u)MMI40$UePpe2I%;r;$rC`Slkj4cL*#=x#w73_d#ar#3tq156#}-n**-*DH{ZS zfs;*5M<)P>5gip~=)3_b#kaJ>1cweQ1SJogOUn$>!3bFSOy!3r?xcJahhu-C)AzTZ zf6i+*%Txizq2CR% zF~Ug|cki}dyt(dMD9I>vx+VOaH#ScEVv~Qy%~!tK<~HjkqEkQW+m!pZ=v#g+>#V2< zsw@bK{CG=W>o&vt=%QplDOd#MO@Y^?A`5$`qegM!`QXnlXKJ>cRAbw*7~7QZFoya8 zr8qBUHK)7T#;~_&J#X+V5t2(XwRszC7#Ap0tje$6Egl-%7iXQp!jFH~J98%IHx5{Lo)m$}_us0GGQazK<6 zoJjx&QkQ@*^!L7l2nTxSPv@KS5B(FAxjwU|G|eAmByOFtsm14zVV9j$O;%PGIKx`aFx50HqxiXWC22C>!*GBG?Q3& zMD-jC1R~I!YWDVV#E64B9^;)ens?@I`<|q7J)L=X_|fL2UQ&}U|Dk?DjguWxG4G1} zzQ>J8_j)z052Kxm0`lin1S-Tr{6>>D*z?R1fml+9B9|ohegP&>4OK%!Lv{^)gpqcK z^g{rCR>Ic=K#dMepdLdybUeD$7NijI(a6hUL+4JC1At8zH}-38vfIA9Y4U9?Yx9a+ ze2*#J%?^2a$jn)XbiVF3@6E+==3y#ZPRRq&7Sstvz9P|lD`(^ko{*6`*ErHw{HHZJtno`Y)*lyx=vC1iKXJ^ z*BIG%Hf2-_Op4q%lr(l@=s)h=MXTP-PZOS0S?E?Egg@zPGf}3c2|p8h5*0iBWg7hzzUu5 ze9oV@ptKQfj>cd{SedI4l>>0tMQLS@zOyZ?EC2P&o$nPARVvYXpH7)e4({L;{E1{o z`O)&=mTm#sZ&kFlBhd7zf}>NOv#4R|L>g*oxM*i+8ZzX8V24E=ZH>3T9Q^jNy1Hc) zES>qN&0rAoL`f5$imqW_43Z#~C-ODI9Wyd?5~k44_Uo=u98X0)Kejm+iZT|f z4^kRc;O^iukrj5d8g0CT$t(C>+tC3hvv6o-?_}5Sw7IjlLV5vGcXM;SE8=|7LrJr2 zw*@zza*N3HQd}>OrO^nnM)f6j~42{4EAop`iA03&m7L#SStwn6z z1sf7|HeN=9_AR`RuAd+OL><&hc@CZgv$4}BduXRFv9FL4S zcXUzC`mm#mDDOOa^d2fG)kB9?AWx*3ILMQm--UW%CE!L8m9p9yK9Bg=bl;Fg^)|iR z1u8-v;0c7^Ape6g?G5U^aG00m%WG+tqHE7q&a3Lz;5{NecJmvBclO7bJu`?+6DAC3 z^Cr@FzyYacW5r6SgMj9EGk}Sd8l*$gsmQu8hqu`$DbHr&Ffb0b*%pGkh+^yz9xU{G zNE*L6TD{JV8j(oDxX?p@9jJyG>rFMplU^etasV&d_jfen%FvgrTnJ!(8eMnprjA66 z?v>Eum@4YvcQ2v1O~KP3q0%D0awT&NLcVjS)I1QoU=NFv@QFLB==|L?)i=g>Wz4h0 zk3|Iq%0OaYub+hj#e{hGnKNz5N0;Q7EV_U)Nkvmr@zQ)Qcgxm%tz$iz5eF+J|Bk3S zn&MRx@#WyQlG%|Z{2cbtI#v9@peyv*;nD!eB$w@@zSLLB<{>e9sOp8Z6Aq$LN*ybL zK{M7#xI`Y^fHE~8h3Y#ID_I@mw&v%t&*jedF!8e~4q8+`BzfZFYrj5%nWhL=YeB3* z3D&`PHv1nx?wajPFp1~XB7G#G&Dxg{k=oO1tJie~z^jq;w?@cPMKYHCKy~nf5)dhe0VV%7@{*G z(jJmnVGKKIePk1en1HY0 z?SIEGt4cU7dlK*lHN%*^9#`oD9Ys%%N2cZb2`zvvaZ^ak>~7sD;ib;=MT=H9wVpOd zB*LzzJcoL95D>@B89SLSEfnj}(yf+b z>F$A)_LEdZqc38gDf&SRfM631hMUz$D4UbTx6dRW9W{nj zy}rD-cgRQcF?+9G0PB+cq{cf}JH8t2zMyj#Np#XXDkN*XlP)NbPZ z!@>}VE?tM;-ftMpoLyXvVIXJ;y2ASoCCy_(*Xuj$`9U)5cs6aJXnDr5$K(M){zTBb z__MtSkLg-r&Y!J3j{46>1%9~X#s#F{2V$6t-WlS_$cQ{9MifLI4Od74ABPD${wvwD z#CYNnL7fvX=jW85Q|wr9iOx&9Aw8ChpQ&S z{H+b)*i9q@Y_<*OX|u+8pU-Q#cGJ#{h)_YtW%Bk*v5y|@W{FyVc)DPS&L4=eRZUF7 z4m4Oa;$$M>6hzXb7XXIY+fiL@a3oF+x;@lCgFV>$Z9UH8ccXD|Ebs)CV^n()(xyo0 zE--lnZVo`nc%@Em2V#>?6AvjH-M5wIXbfgsxdxNX#@P5PBx9uCCM_6xTsR6)tYd#$ z?+F07`6m^YfUEbTiGj|kXdzM2LZKn+`1#2{MNQsZ!~chox_)eVi@_rMm%D5$eLnE8 z3jyEBoMUsjKg5lO=Cq|{ql%i^N}7LU@>mZB7YxXlwE-XkoRYs&auhd%*jebzz&%oD zUtnMqf`XyK&+qv{4+IwDGYO*?039Sx4t?{02^t!cw!2$Gp|G81ZQ)QwuC($S?+b-q zFeW;NQ;R7%o_n95Ya@3v{*lIA0BI>Blpku{G}3gytpI&ykqAbru#GYfZ9%6v8Ca4? z8eWG7p`9v(xsZ%pRH%zxX32c6%_T=9N2{$CeLB-dXi3@-7@YN+Ferr%`k=P7RnfzQ9G@NL~w`Lj)p(&3ZI~rmA zOWfwkT+_XGfF)?VK3Z4G!1+Un;N`huqT%s6s3OcXu2xdC2Tnk&HMKx67%vB~yV0Nxz$;g6noPV~0DPtilj*|t020-)!4E5Gk(rp1-Kx{BZKG6?!VbOs{c2L$%hpX10og0Zzy|IQ9(rQ zF{MdVG&TZQ4A9iRHul@MZx>{c%@rx>fhUtjhh}#oHwCXd2sW%2yO0!Jq~2wtKQ(9R z#WQ>%W}|h}aJ!9HWhg8F&r>cZP8zfu*ROvp_D%90@P7W~-5M@Q(bsOidkvWvPVOoD zI{Hb-vtM4Fzl)2@pUPgnTg#X^K8mOwHCr2uCH%656|OaSI9|DOWz4TCvajtYi~&KF zp>w(|mgKwwH0+7exm|q?d-|i^nEkA~!=cmU@{Zi$LnmY|*v1Ms7;CZkC)}^!gT0 z{8jmWwXBF2++0Q|Uc)fzFtTcGt`-m5=cbQO?EBo#ZaGoWn0;TXItx=gmzik&%?S{L zxil!_H|uACX*lidR@GCxYueyoOcZ0t66nY?$JP6@{RIkYF?2B6r4& z0znPOUfIuhd}I4})>k1U7VdX*45QaD7~3aJnv^E|;5wpV^Vibk{zl1;!TrM>iMwys zUUyEPx@zS@3C16{|JW>Xjpfd7w^Yg$jfK54ZzT4?3Z-kU!$+z;trl#J^XxY?$mzQ^}YHNT+>^QJTNxX1By z-OzUpcN&IV(z<_nq-In<;(RwkE51D>*UZc;3u5Cg?1=_wnPp8=)Yu+X`34Z|vX<(&HZ#p~;Bh7=B%3|`H;VyNaz_k63H6Uh2xPngwCJ1E4t*JmfzIsxk@n5!PJ5IXr?fYHF!Rc-+TZT) zZzZQHJ<7oIylO42bIK82yQ`S;Pz64WkMDof3H`PVblQ&DX1d;((|$+T>zzMggGPUd zIDedphBT?>FVK4j%l71LYie%JM2o+aWrW5$Lli$uR)9_8MA9en{@Z!J9p z8|U)LN;XwrHO>%kVBHj4xw8fknE>VH@#N z$1_^nYIEK=I>$#9VPUKQtm3EhcZ_3;R<$p#$GkjF$O=NEc-8g|V?FlRJ z2ALfrRUKl9%KLX!nM~ob-uVR(c>pAQV$k0(Pu9*ZL5E6LjziieCd57QA#8Tbqi)^a zaCHHxlP^CaA5d@_1_hrDT+AoRxlYhKO*eQbp9Vw+%y?Rn*LYlW^}L-{0Tn-8&ROZ< zTUJ)~s%X~JRuGy=H?rz%9UL0==nWP$^73O82hc;wLB3Bo)t977a*m!lC5a{p^|9vp z&MSKUadx2vrKNWSISIcryCSVz1OdJ-8ev%;Kh8k!UN%IULp)!-UmLriX3x5n*7HDx zU8IftG*orhtxCC3@j&6ep23b^xws^ciHpmg;^auTL=5MC9Z;}AmP+k{j!?MY#c{m` zhBrF$U!Kja7mIS-H`*ogbt7iY7~6;WU&zcRX2I}pG-7rm|J#Ii*<6;uo`UjnnZXAw zvn497>3!|h3+zeJvP=}9XN)Geu;FL?!&}PA%irbaU&pX=#v9zP0MtM{c2(#E=(-@0 zvRrSZS-qR%kSYl1{RGI)lP~A1CrJNtWP#v3?wYef=eI8B<>hT^Y02W~BtL-%#!7X` zD*Sb)nSX>mmtiObfc3Xrn{J&12zwkI1OqQt$zSj5>zg%u_5;nxhX+^JqKoe>#Foy5 ziSP?q)W%7Ioo8W7Z@yc1U~W=ISJ$m{S^UFmYGady*3J<@e-lPE&zdzWM2%e+5uKBX zxARQSLA5ZpJ~J*{ytrxo`t^g($e4l`{z};Erke92&POd1>uy#6+HdOU$i;Vi^CbS& z3t(FDfwIZT^Zpzn4JB8kG{|+lK|W@KHiLR(MQ=d?*yQh6SU211)HdCLO!fVax>{OV zXkFkqx9am}VItBs+_4blu-eOloYx)_Rkz6v8Es>MJrxe=LzRayGiJ2U>Z`aG7?zml zf?UyuR-l}HiUsG3<~rIfXlOIFcVv1_y*+*U^n$7?`LZ*r*7J|FOQJi<1|4VhQ1a%0 zcrK`}4vdS7^S3KLoQQ+erueYYKBp=qu=D{9kOe1xx-959=b9!CfNvRUu(-vr6 zNI?&)0Ep*(v6|V??swf^n7SJMb62`cb6v&3W@Kn%_ex^=PK~FXt?hA?-k39WLU*v> zmLc-2RXWw?@lT>TGh0lK?RZetie>74_`bHh%P|K?ao#3Z^>Rp{>_{5{z@i7n)hp4? zh|o)y=O4_w*o9la+-*3+&ADLV%fCC{J~*)VVQ_Ixq|)ub@}W_RqsVS7mIi-UOHsV)3R6jQAtbnom!*GTsfPullHM9Fp1=i&)ciC7hvv^GeiFK zBpqii$%jsU8?_yUNP{i@o=Ns`Bi%Mp0vlM*X5uR6yb0L?^OH_)22vSv=ND~3+B^D5=QZ~|6dKc*+@XxikCZ03?JI1+p z+&jkk&$tW{1!3>^eV?}0TyxDCd_4L#T90D8HoS4n4goJOQX@_ur2J@=t$cn(^yzz; zZ}pA2acm+A4Kr=d6O)k|NkymEWnEB`kj%X}KE4uk#7dor7UsL9v zm^kIpQBbEW!BFS*;S9C!SFwuJuoJDcnBNwZwm8ZDGap3+23Hb)EyMYACei;);*PpD z>+|P3A8K+-K1bP3OkDgn=1y{Isux2l(S_~agv&&Qr@mjFc=}|6QIY~}9@jwLE_>B8 zJTlUTmcZaoiO^i{NSOiq)DLJ1$tF5<$TUj{Wd-oC>)8Lg3wP1+QrN`;v(^#~A+iZI ze_T@z)yb!8Dcg7d=%H*K?wa)E!7ZzA(9wkY0os$d>8aHm(MJM%Cd5QV@uIVV4l`8$D(dQ_@1RF*6UhZTYssrkD0{cpZ-L z#&P%4jh80SGd{2{76)rBj1jKCJR>b5b0S*B^U;xxlWhLkGas4-%2L>;H1y*g8Uu`) ztV)h1717}QhF5@4g=D6?Aw2`0LUgftbI*LddV)-9oxNK(2|LJN-#=h_cb7{bjev{3 z37hp9b_SLJKGAlkveozY;Rw9{w#LTBsH}MG`1D1@aV&yO+S=M-BZ|E_TM_Uk)i}A@ zpoPf8SIfy_8^4TA?AwUOJgAJc7@-s2&?E+;+dC*)eb4Yf(+yEeu=I> z7-Lz}eP(66aubCXp$-G}slpHeHP|&(TNbG<(5__Wcw%Kto3*%KPNBc2hF9u=U!RSt zcdU-w!8jV!I{vorY{BNh6P!a?iMpI(I_t!?kG|Q#xEp>np(accswt6+iuFNptl*kbVP}`w)VUo%D-48CbYHYuBtf zV%Hkj1xLmElGWd40R73KT_cnKAJRLcj@3x`4NNqeEWQNk47_DIfm_{ z#C++yt>Z7Oq5{OKGkorP#^`js@J(vdXHvaH0uff??6U|~gd|$`h$B8RSMh&P?rBvc z-P6Z5kDkOM+eMJQ>3?_Kz3RkXNIlk5RiTV3y*0#2uOJcXL&tUnPf7F6N+1Ajh zh7LM}TRED?4*>tT3#DQM6r0n*bF@TN@aQPLC#~8z)uJcoik`qrzBp7)&eYTtl*+Z*2|5XM zq9JTXV4`4WXBXnoe)moMBj{@>U@M1OQNesQUfa`L^$s>BU;4a~?lLRxc|YY}*~2l1 zk*KG~9UL6o)!BInaP8#Ol-Q0P{-}*aWoF8ZI67;o)g&5wX@_YEMa9JlQUui5xnpZ` z-J*Eq)u&f!QA*9m*1m$Z2gr+OJXT(HCRo4?5$Ew}l?p^#c#bG-APPcVn`h(3jnUOc zEpubBMKNcj6gDbDV`C0><(;bLHcvi2`ceWCQDaph6yMu#VB`nohp7uhs>Vd%Q)O#} zmXMdNE?50!nNe+4Hu=BhP5#E9t}` zBR$vNbv`y~!2-$BgPhDCbxS|YT!`;@#D5Q?pG&S=6ZqBw&!PK8%DO3^%O~fv1V`N} zzr3cE$jO^FCiiSUjM^J3r39xfXTFX|&G*cSCA)m(AF&>KdZD4`-E2P0oGoKP-^vSF z(0b)*lX7bldz%k$3*%V>XD+?sH2uwAf9@9})dE!$Th?zeUpeU1w+u7?V_z|P`p4oe z%!keVIc(dv{~>Z94rSdK>)+hgvYs*Pt2}qsd$PVdeSmf8tgl4E{{Oe5C-Hy8!*r`e z*n^F>!AEy0MYjk#W+9d9piX#@x+b!^l*|I!yWjn3nY4s8wmVM9epYeK8MSv^Uwf>i zKV)xG(QhlCJ~&<$frtZH?;=BhJ!9-f*inVp?YCp&V0Bn9b6xEsjQo2++ez4dp37&I(R!T(g#SPnuO zq_bT@D-Wy+Wa3iTJ-Yf$L+fNVXDzm>Z#Ly?o1MPuGw==s5vx;XW@bRh>w85bhu<%E z-C^cXr1=T;&sI=sN<(M5Lfgw`KbM78Y5?4Kg0oGiWbOnc>^Hgdekt^tFK$GbUOQf? zuQsQ$C$aJ6XV+$9LtB)DMZy3rB!P&b@3$=)t<&w$=qX$%H~!Z}Je@L-qI~zhZylH! zq;!Px-=^_=$##?%JC5v$_;`esK4VDUS&w`?F)f{7SvQ#}7@_5SL4sXqL}nRV-rX=f z8pOvWT@j%DdIyNa%)zZ$hfZvjUBma6w`C2L7S%V6KK=ahs$5WH_i0NyLFpst-?~m& zxwV_}_(tNQ4wn$;N?!~9QArB^w#d6Cyk-aGkeReYNl5|lRFcAnAHJ&lm|vHD5?0r{ z;@xdWKqwqYQHOq5wrqRmB||&3?&;%5!y|0+M%Ne`2NG%mwN^#R3~c$b!`*7!d0F3& zEvhO+C$|Nc;eZ4_0O$*8&VHio4^@E@vzc}?&-Lu5+f-IEcRl76yNQ*fgD& z?TI6^U2+lXpQ8@lXXB3wU~S~$F*QA9J#*NCcB$G<)|Ymf?teM314&4TWqL#JipUbz znX*|aL@PxyO@p4Kky_hkenrZ8Mi>T{Z1=8hUT_5J2SA#FP{{oP2WZ53mI7Cxq|Em) z@+l<+1qFl)e#mAn#O?h{@YI~sLYbd?kLTn>GkQhe-A=cTXf^{{CySF`?2|NsEofn# z;VUqM`GywKvoeQi0?-Hy!9x7RpZkgbpoeieEKNsKFvnag1NZ}fV;JvoU-j# zoe<2VXb56l@U@~PPi!57amUls6VYD8(Jk&vvgWc`l?m(C-AXX)Hnm-A{u+}crFIjh zy?Y?6&)u_>F|zBOhu`oO=%T|;t|J9*k$09mckYw-hF-fgS}2Q-Svfj+Wra4Pl{9To zZo)?nIjKU(knuj2&P|?`$hNdPWc!GA@Mt{Nhf131NJ~qLnl)u1*$Kx{zu;KUh$Dtm zR8}?!RRs#Mpe9m^9E&gnoFZp zZS_4&(bzXxRqQm{g}k<_*+UoDQ)&#YrxSlIcLA6JeD8MEi@U6@q<1`uKg2IvzPtn2 zXBhXeFYq!On~3Al;aVY+VUCANv%Ycx{8(ryU2|C2M&KN;S*f`d%D@!-oIk$>xH6JM z6cca!%+FSQY+$-NqIRUW$>g(P68~>qNw((%C37467<9SV{+`$me!v13j7JZZ77Abm zK||&HmbW!eXS(_=5lZ_xbY?ip;Gt+K&&w|%wVL>|FbpU@p~qE=mO1PaCj?d}0TTh3 zAPtQHS$%t(tq8mD*J3ng(7#|$!y?m1?GgbbhjU|M3iht&x}O8v(nrte7MVNRvr@D2 zLEgD+d4>Rg&H^bxa;VJDTJk||*WOoC{((IMZ;j;Y6r_ZcZTI)}_9`L-MK^&Z9s#GU zy$FIox_|FC7hV2qh=at)1%*DTTL@VRTotUz?_Gb|( z`hLhm#U8N2&%ZaNWkI&AK*3Y*j6Jm|*b|g9-sJTn z<2_J-wEOf0huU;5`j465vfbjLG1GNAK>kryhguYdJET?OkH~RP;P-L<nsm0Dm5jskVg5 z#}D{7hU8Oy=6$-=Dl~!T(CeCKoQbdjI>00hAYq+ zU!eY97b?;rOP&Uegc^hW<*VKFIM%Ge;VtV8ryNmKQ4izn!dwfX(-+P8!8Sd+)TqgP z2zov1Z7zapL2(6AK%w+j@5n0RW9}ZJAmw8a8Ucj~Bn(1X-h5acFND4A35wsSX^Nrz zXGZz1++>*CYpSTI3$g_TC2nA#CS7HeBA}J_xbP&GDMSuwfg@Q1wkDLdSmbJNQ?`sQ zFk1pnd5};QVS6OpTXv-CghQ8tZh%_uWOb5$W7kn3ze?=#t*@HjA}s^>PkA04C%{WB zAtiwPN+MzxJzV`ebo%j{5-ML`-*g9QbQG{(p#G5fX%7(4&Jc%576JV=Iio2T+r>f) zQKjlrMMY5a3fC1`3KBT-duIswx_GB&<}DVfWXh9%Hz;ytQ!by3HxbVX7ls~3e;qw zu;10&TU?|w`Xn+zMq6k20ef3Yf^*+72|4_e!}$BFNqD#yq0LuptTPm_Hi771Zg)F$ z;<3@*#);g3&f;3w9l7*(xCl|TW2QQHQVqM9p?A2-);5TYmJQ7G541n$o-v1rXaI(S zenraujHYh49E9d zj250AokTgu2dFqf+!MaK6TZMQHcMHm-9TYq8o`Q^_rQx?-Cn5x8kBo9dHc zztw>;A)fwk=J;G^j!)a{=g?Un-VpnLBQ#(>_#g-~pD1;%Ez-F|^(Ca*6q}$pBw=-V zZr)INXPzUxCNZ6?t*yl~!}$P(Q-J{|V3^H35vP%{F#`l!^4_Rr8dWUeLGOQe^3$jK zz!{+2@ym&tU_Qv)pwD~RG8FDo3sLOCN?fV0+XK3(eoF2{V6MD(gZcBNVcKe5=TMqR zhsVHBb%Kk8?&lBeLuRvmxk^q>Q_(^`9q$tR=1shv-Z{}U`pfY5JH)D8N99JsbriBy zOAgJ>R9#u{>9<*fb2_e{<(!mg6qzLic42~3@Cn$}`;B1U-ABMfu^$~`#*^~ivJUc?6L{M4n&xMSMa0FKTDxMUD#a3^+wCq@&-1>YLLZtp zovkQRs2{09h?c@xdEQ?4D5 zP74lK|4i*Yiayk^JFvwY{!9NY`Ye0 zc6q|ZX8nhNG5hc!0K$VtWUX{6^*wW^xcKoeoWuYfQ5NWc7EmEPTE)8N|Hj)AB{yxD z0~|LBnC-~~$Lb*s%2(aei7o23ax5qtP&;g4t+O-Dvw?Ecm2xGJL>Z#2 zkgC?9YNlmTIr>vgqxx!WA~IDRvzblywz%zxzKQu($_O@ZGeO_&@$+K(W7t}j{_ul% z<|U}On3;LEEL1A+92*&l0HcMkXLBJ`n{ExbjAa5GEJPY$`TjC{WJJU!MEtd=$iSU( zrX~IsXL_1B0=^c{>Yfog0CW;MP&PiN8n5NB*O(%O0@Z{XW>rvl_LFcDN+YOn&7^fu zwFH&o<8;3u+EGY+>d9I8QZUf6MpF_>dXNOPxQw##vK}3yv(xI|y5`Emzq4okjO=uI zz-Yvv>-h574G=2mIT(t)qk~F~grhdkPB)j)G4eUz?DK(ASS&|YEzA>8;pR9S+_>)k zNjCjlBnUk6#>PF{kY%KL^)FwxZ2g$?+h`3tz>3WirFPytx#Kr-cl7T(aq!?lq0HVV zG}0k(zigNGsNvw`46^+E+rss)Fz!COpI_?AzAt@j_2&7Jkq%?8v5s3@)xG@|e-(C_ z?2iahP-9q*q*rUDB{O<0F%>%Q{T+RBXLB&Lu-z|jMYXY*Dz!WXvspjOgDQM;EPKGY ztG|E!P6l!kaNy3N2uvh3X4a2UOi9F!&AOt0)Rv3$fp(sdBkL5lPFnuSkp^=*mw;h|1%ovFGSPZ`xXRYDP{ zrb(&KO&l%Z5fSGa=KmSx^A$!BU7QfoKRUeniGc#2Yih*pnz-opcE9D4nMC8@`LDw$ zoMTyp*Juwos-bFaRee&83ddzPa9mR$0U&0AHeR%!Nz!(EWW+0P?E&TrWZ3U}ioR=~ z9Em{)j|B4|EUe{=?wd$Ma7T=cbBI7ngdz-GdLETt958ci-|e->ZLLT<_w&8?{T;h& ztv;G>i1oV-3?bRK`sT^hA(B$}rXG=Lzmq@~!k%=b`&rx#LF zS?NPFXzlv-rJ7Bj?tEsLO*7KU0{MLpLz}BY3);R>$u6aeNl7+~up3w0z+uXB@OM$( zm7~3gl4x4CklV2e^asS>pw4lwAG>PsKWFU|VExzo)}Oe;IY_3&ec&xc#} z>~iU2Z-2d~Z`2^__#y6&&6)W-9^fE_%$w|e&9;(D2U06gHpG+pJf#z@qTKoK%O_I$ zk*)YBI;-928osWU^=||3G;l-A9!02`>U+;*)G z%wbI_7QTq>v$z1%TncA+hnr?yrxRv?aA}di+ zLK1<`N7Y6|>iBqCfhuMv`D03i%nl=CrB_1BSQ5%fV8b9*KuY}6js4u)=N5~4#6LiB z?}(>^!HxX=fAH2_9#)B~NA!GFUuYZyL%<<0KACmNJGq$HCKIgj-$Zz$TBv5pWrb;F zsxVa7*9QWmFhH4;Bz>r(g;aHfNt9;m&{ z;AbiYD8CMD8jgfyev>xcF?hkN_9MZTfC>(B&A#z+xea;bEyz04At@QC$_+|M%i>9t;*=-t!fQRP zukExn?x?j*kz@1G1RH~nBA!AJqC&COxg|QlCQ*ie1$aMJI0@HFxFGH|foz!8J!@%3 za4}LI6cXtf$&S9&^C`vJ+jT$1GYY{Bh&YG51$1*RYA}M9uCLw3dA(sk3E>mmc~UQxDzFrH{Rcja7N zFmD1=b4KErG$Df!2Yu^OP|Pf$+13G4lNDq?gV?j)&7TmSZOg^3-1cyUN%&&&<=R2# z=iWI351Mv*gY0uJfAQ$w3yX#|c14>wjZTT@3YYQt$k{$=`tkg zDh824O^Af$&`70&$p1-hreKyyLPBleUSYMR^j67C#4hb23c}gq+!L=3emdwne9!^v zF+;b!F7nWKs2qt^6W`M*{P~%1D|TBm1Rt_p8UQL4C^({QdEyVb@jnnd08-Q&E~)sh z@x)rkTn5HG19E}cF*8lDV<_muk?iTx@qq#skV%~no0=pcMEYH6rR~n@tR&d0TVQ{xToG0d_s_Q7IJ~e zpo!~c338Y|n49V7{ovg>2EBPZAZfwC8gfg3I&AK{SNAbwEQ=S^(^9Yy0|}>r1YZfA zA(C0|mpZiZ>(&lWviWPTn^TSgKR#$TfPM!m+P9; z&-4wp(N-3{caQwnyz~chJk-p`RtLZ_*oP5i2HtUnjxU zz&rGNwjJ}Jzb7I81Y)t9)kMXh`X6c1lqJPIp106?aLzmb?hzm@D9wX$#;WlXWQrAx zlZ*y7^6D=@@WCwgXQ6Tck%8++;S;rdb%DjnbMpi&ru@d*dIF6~g#I|yN^B@lkP1Q( z=@e`D9zOS4=BRQM?IqL5n{T&(`mRS16kh?r-Czh`2@%~1TI0uBW9eqq@W~`oJz2f{ z{C>$0Zey8hb-iFk%ZneYAjSN@b$9#&|O%$aq%+jG$KoJ%+js9FyRQ!KFhkA z8b2gPlGA%{;tvCy2sB8*I?e~{J%5BrB_i|rQv?^NcTM_!e+f{MftnQ?o9q#f(ugRH z|5!{(7y(LqiwB%!Vz)*HjS-nqp19mmc+~0w%2MpgS7@EF?VjPwl74Ds*m6u@btO*dGChZcjEl7#4)$`UbP4PS`S%Zy)~ICu9@c5j0xI8V7ku{=^0&LhtvTtLh@ zEfk}&^{%8@lY15e%_VenoOn6|Qw<*;Vy2!rveS2{RK~2r0Z_EOx2NZ__a`HLn>XVc z+`iv@MGaIQlx8WRA@)^WG9Rd4VmfL#fr*5MJQn`z;VCILT4U9T?@s~)w;xClDmf>7 z-gcFEeVuPg!{<-$_5F~6$}Y!wq-1=-d@CUh#K7}zMJjjKvgwG+Cm$x)Tt8f>l#_)Y z>$&&o)GfNYeLWC1Fj)XJgKyU2ens8M(eVkanh?+tL~%Tt^JFL(T_R4?FLO_Y7z>Z4 zK!6@|&7n+UAF~=@zaC{Gtmq~bZ5wkx`^}2Vf4WdGQny>s-&qLjR*Y z75DPW+?Tp3_de6u>WfH%AY^dYaHGV(%*>p+T~mz&gTBB_$E=TuF-{Hv>Pdx&QAfJ@ z(A-3CV__lva|YQc8eWfkST&R(QQa__u^|}DkJFx8zvZ6U#L`@+oB`*wg0yY7PgOSye`Qj zkY+{HkE**n^;oMNNa$$-e6YH$N~L&-tsk{h9MCyLES^%hB`%x!CAuzZd-JcJw?7*v z+PAi_s5&rat|t;QLC+~E5~yE>S~ekc`IMPEm01fXVefEIe?UC~h9U1wg)b_Y6W8~@ zGY>5eF>oksFNV^~oP`k6>4FY=3#8O6a2E^tbq22!J_?Y=(DrW7mG+9%wbGBf0Y56v zgAdoc@panj99-(yGjV3%fg^3nx6#{)R!_=Yu)2X{AsHn^oHCHtZ9bW{uoZ-u)Ib@f z$T+B2K$ijP1hksd;$x7i0S5;ETl_3Pi(rta6*;fxdymjXEbFiK2VlPCyI8i~k(b9* z_6*1b#T|$b)%8%gtW7pNflI+rdk1xuv#3vDgGJ4{sM8TS)Rzh}HZTet0hzhmo(x7I zm#VI1p>jfL(uwnW-j>Gb^{{A1{w1ucTcpVLALO{E^zzvl&P{KfIqPIC$ z4un4-xh)wPp4v{m>u?X)7Ko^J@L<8Q`_%_P7-Nfhw-xIUyRqLF!q|g1mu(*XtLN;T zDpX{#8d1*%YlDiM*pHD{fHf^2r^>;8T5$CZ7Bia4@0yzRY3ALDzsLAorqxNW=$5|s zO9iZ8N#gc)@%4Cs2!`k}EiIL-~pMPa%tzip!ATsJ}Lc5&e72$}&_-@!@}i^?;Sj zRf5$E)|-8&%CU!WEm)0XO0UL0HnaQe{pxES%%5Z{KFQiedGG(oX^Nk_U!DKME@SEH!p5wYJsNlqrMlcrgpb}zBGFi{Wwd$Pyw)V&+{$^~HiAHtKHm2@crDwnlagRPT6&Bs?q;WX?k$-JMITdWq5k0^hE?V zK#5_)*-cZTchR|)E>&{#yChe?%WBlB|y1D_m;bS-Zx9@tr+9+aZ>kknT5l=MY{(g}kzkQK%hgFgv z0+_$cRLXcl1CGfDq73Uq<6v6f~-+UI|5jdtMP~f zNTkp~`_8q8y*B zY}QVN`EIMjm>nq0OG}G`cm+SC#v#$dRQ5!JmJ&2*tIyG>oBxg`a_E7mp=F;G0b`0R z?xJ7Fueg@W_+j zIket;MWB)^MY1a}YJ32gy$2n6CL%|mD}vCPM;=?1QPe>;Hl?pRKzRKNninoyAc0*F zJ@{(-Y(d03=xy{z9A2J0{ci9x>)H$`K}@1|>DNnYJ7r~up%+jHzwTePP>da>M#=as zKe7d!wfx5Rt5n3QUGeG^)O&><(Mzz^6#yxPMD*!~S(re^0)?x;ylT$wp*O#=LLU4` z!;iAEvYh>3)ohm{#a?haJ+ zy5EFdgX(PWRic>7dZ?W!<2C;nnoFqV6c83 z+7pK%7=m(I>-+cj;WEGZR)*?bKEy$Z{U;>1n z_%{xrrCib~8>8-aSXo&WG95H<N)am#o8S zE7i*{D0mY0{G%%LYp`LF_W$$oh6XKC(Z?P)2_8)ZMrpf46B-q}V3j~?>G>#j=`LVC zmfUHh)0z-q56X{?+J&pOXE4r+n`NXkKH zJ8hDQihEUpZtem-lC(Sm*WL~+8YRxe5jDAB*# z5>Y1fGR1_!Xo25ZzCDE85rQ+VOkxNN}`1pBApcb!86d+=>}MT!Gfz~1lr}W z%6*eIOWt>66EboUlMM<{Oe&mxKsUj z))Txb0&*w-rR`5Sd+uBpstscOUhrQP&KZBOVEK9hc}R6KFvlgJfGeLer);tXd)p&e zwQPlI5Pnr7+c9O=^zaG!ls#>7P;Q!pePV6vL;(!1Q8sj~gozdOHubCz`5MX9LyK*# zwtA*bPb5^4P2WD=bKLYOVy@}vZE6rHE)ChqAH99ix|J*SdW{D%dW;pcNqx)2BsRP* zGzz^R&7JxtNws9QZGLR79TF5JQ9gLN-q%Elb@ejAQOey zO=o&|om(q$r6uKoGvO_lm%PfD?{NgfYM8#0)1Jy_nERn`9ZgX6CQq=owi z+gH`E9htXa7z*k(=d+mOeT#pD(pT1V(ZP|>)ON_(`QV&j9#&*k>;CbP3P))WEKCNa zOmL-8C%diUWSWH{%z^Waf`Wszk~yVc_1C8kM0U8s?2k;u(law5{HQ?j;&?IWT57DTAedWhfzQI02dC)VHz^$ zJxqC^a$}5k(`7Xaj$U2%RW*|B-O~?!eS$#9n7VX{v5`E$2%o)Qk~Z1xn!b*kd*EY4 zlLr#SliJ#GSZ0P`0W%G_Nvo9Ni%r!+&!wOU;tNE4AZRgh^?m9!6WRHBJi-ctQ_j!@o?GcW$M-Kl0p6IX7gMb3Q+1XxGZ#)EXO zs!W|~Lp_X)B`{e@#tJ%nS8KM*$u*~CV|&a7^siJphVEH%Ze14Y2lX7Bh~|~j-Ln{AL3rJTD4S5J9#=*T z_ZFK2jd5`?F6B0eD4?dS>C*u-1;bB6-9YgJPV(;lM+UP&mDHXn&ZU?l8Tz0OPEH(C zcvh9Ier-73OLkoat!!{pBXqikvD?5OqWo7y$o$g`MIB)ecxJPvL8&Pn%mDJq>)Klu0zh#BQ?ye26k8o?p~=s%h@T;xGMq8%L=*YaiwPx z)!|emyf&0KD?59nzIlf6e#lb{MiivjL;;$P%fva*aSf!+-?^2B%E3otc>86aO%$%A zH3mIyM~v)Vuav!6GCuE^oO(Sc>VT4sx^mxTAmEWt30+tgB(*Vm)Iu>>y88VZgQ~^= z$P3NwjQi-Ys_(aNC)cVqYaWtyAvuKd$g>OURN;<^6}CX{`Lk!Y@80E;C!;eRIMQtH z$R51Wi|vFq00e`Tcf|~DBk+NubH4hdCC>kKV*2jzovODc=I6bbPa`8I5ytuY_=F)~ zml0Uf?2kVcjAUP|f#xq(cMljGA!G~31;1?ytZ`Svpm*^ja>h>%+$=bzc0~JT^{JWh z0=aH9CFf5=2IUxnYD=S~-Uy@@kn6X1YgbovREXnYDE+D;XoEs@0)qavp?`GuKyf(V zi@Uis%ckfp&Y!jQ@i+mC93ctod+XK)d1$s@uvUa?nnnFtQ7B*b-WhuO0?i-8*z;qc zp9~jv{0IZRDDENy&@uVhr!cWBT&(+ok~Zf5;Uh=Y-lDDqw$7`<2R0dk`JMmCy`wCY6uuxaAK<(mwmHYb4j5KFJmziWXa5<= zlF7xcNo=D0($X0v9noa|bdkh#-yPm}<%eU?7$rU4wQC(J6G??CJn+hTrOiGdhejbF zGK4${nT%p~hanm;L=OemipMcaJVIb-1_3brr1Zuzi!db4WHFmRO;($4bYB}&I^}U8 zA@}oVg#W`t;VcOl0Ar*E;iPMk1;{fDwAF8tM~Z_yt4T>F5gDcm@Hy{rcq2Z1{P^)- z-D_+b4{oAFq^~K3BmyWOffU2JpoE#BVN~YR!uuIjt6R2BA(Now7r+`U zshXM)UW@kE%-7d+S|9z?_*gK?`BK)cv~Hy{A=squO{RCyg$ysWz{XJtLGUWbEFRcr zn;MV{fmBFTn({yWp282TO$0h8uO2mY_OSWcG!AhrB@p@3IDdMG|C?E&s|%rJ3mGWZ zA;({uUuCn@H#|I?=c;b3f}-N>muC!5EJd)8-$!!iSn(N%#+b>`nmP42>Sf$rv4^^^ z5(cQaYxc91Go-EZ{mrl#O&=xj!H4ah#T1hKDo8X6Mvpog##$L^_KZTeH%)ie#!x{U zbbG7uEK*zFUiZDEq-5%wp*e#4nc@I61=-B&Ga;cn0@mOfg$?*_!wgw_BMi}9HK`g>ZIw8$WH1%lC|W8*_S6w~!eQ-8z@)SfPChb8!71oSqM}tNj*$B<`2&X6 zJ#NR6zE4qGU8*{Bd`sd2^?wGKokrq z<7#Hgi`nl8Ar8(8hT#7~*k|T2GU*G0~SzZ8+33s6|GJb}1#81$aL=pfGV-72? zbrOfEFCwtp_;t9vPZds$w$|1yn>M|Ct0T8tLszq>A8`h?!klF7!Pil z_6<#q8XURg?@7V_EgtPG`(q^ezgaoxA$F@r5Ew;~P}+4SYi7)KRt+hSSz+aO;=BKW zX&XkNHj1)bB*|A{h!?paG9C$?od{jlvRY6h9IGi#H&=(0_@NIB6IYJnRD`e_)ir9Q z;2lW*gAh_(nlJbH<8w&-9}Xj*jasF}OP4sMVV8d=g0kYCq z-x${Hs{3B=F^N?XhSDKTnBycoksm<%7r@MGqZ9<-zaR`Y-E{=2vT*9;d|GSrRG+)K zLZk}>I>DW|@Bt6P+w5g%+(^E**sM3oXShsfkdt2FhP=9f3_|CC)Eo8H zr64o7gBQlcUgv(p%ZoSf`u6_-g1{}e0$IGrrj;-ei$icOb!it41auuelCo+)4?Sm` zRchELNs|~SKA<&{L(d?qY&{A!2qnNtqJooUFv13hwuJe+-8<1>K{4Sz!8oZS!LHzP z)sVa{5@ysx$pRjk=`sa7%Bq8Xv1(j!%JIV@6`Uru!-uZ}exdgQCTaZQ&mW=rZs8NN zL>7Ww1Tqr*h3yoIq>mmyJ_;{+`X-6MU%qt7x>K){5f_NOZWU#nV1ZTv=tAx%ZriI) z3lcY2z1($t9};id^ITl-XQy*#qp%*0=tdP3d}>V?FdKC*;~@AACKlmjunThypyDSX zMI>SJRzy%YM+?EaBSNftm3^>b7{+iIA)qHH6<2Q4_IeebgEn0mGICU-&D+cfVUD=?e zy?aUW!MN0b=Y3al&1_>eSJrp?udCIW9mszwu{~d9z@^djMD}#M<5c%-bbY&UVabJ5 zZj)AW43#4F^2i(Y<2MJ%#^VZz>_w52Cv`R@D6FvS|l=Q=?;E5kk4rZwhW-zNh?6 z9qs?kZzcN|zEJz&JZB9xl;WAwx?+pLn*5ld{=l)++)-;MMD=Vuv z-ShcS$GX^(uigRpl3sT6!#@{%t%$PTxpVF}6;V|k4ekmry$tjxX=V+d79+RVlKYqZCJ z<|Z$R`En)Y>;5j0ve%J=rXipN(*Oj>QutDGj%ot~ZrYWnH7{P2{W{n0EfG!sx@6xe z+fGl8*apTR-)wB3D;<{aqEk0y0LCwUxD9=E_+fob-#YQl;$?l;?ZmfR08bYxbdHGC z09`ddXdzva1E~vP(hg~y-v~We|7F3loj+)eHaymc_2Rhi6PgssKO1inrrEK7q|SU91vgL&w}73z!p#FrPLKmM!4lz&(#Zg3>$R3ic~^TVyO{GWR2 zm+vY6odn)n`RU_FvTd_&b{?Z5w>S8Cn-EhfKphUdmxaaU-BVM5ygce5mQB$QA%fLa zRmp};2%W0ZxDdmgO42uk{)(ktN9e0B2Z!2w-7iEiH|5O$s1veB17I@r;jwe;t6Ovu z!-Ou`vh6U184vf~YavAa*1`3+8ZXq)%U&2-y?QmpYbe@Of_&I`Vd%>QIlmTR;+Na_ zcm#W?#}&064p=XcG(ETkI}%0nB=pNd8aE8V0>|zZlvJ1>0aw3bFXh(+)F0<9N?=q~ zbppGnL3Jk{eeQeFue9yXac;cSdi!^C)b1?aak)gl=O$Y5tgaS+dCPkaIG{#AkKcm{ z5hA3U)7yQV?VbW`WGgVtQAc)7yr_<#_tRE}&b-Cc^W}0?sBoaxa}NUh&d{|cq@06m zNkcqM;|)Wl0TMC$+P}=2a#C5ylT?LVOWLkK2oVe7U_!V60uc0selX*aEWt#iW^fcXLZDqTd368*auz9H2hfDRj6{B#y~deQIEji?6E6E1M&^7 z?D=DXRE$7g7gf9s%GT49>611?c?Ge!z)mzk^+^je$BoVH&W60}st^V(2cQ@rK`a22 zmeP0%&x%sSjEoO{H75{huUN5S7-Aa9JI;69NoQtQZuz^(?t|?s2IF=w*<7J#YJYuFucYd8AD-2pE?32`BL6L}{EgF6r zNDC;5fAZvsw6o-9l)jK=pu>&ntaB3MjIpAEFtC#4vLD%sq%m*bd1CWpoYtJy{qAXf zU#Y;tPIGe8xLQ1gW{`iTsD>9CzeennC&v-^VBTl8`SDPej+;?lLEzaWNy zv_H5Q($<|fQEmf376mvn<)J4KxUB%1(6kr;LwmBp!j20YtUj0;;G*lY9Fo>M^=?bg zw2ICII96j#FbZnN-c?Ykz{@m$O7nCKPIn24NlBRX(D*b{xhi?ofgU_E4?I#>vFvVy zlr4tLJ0T$f&MkDit*vKa-eEVq?|c%{ob8>zXdgfR0KO0eac4M=JX*%N;~oYs|ZHtmxZ@r;}q55vN#BL+2f9TC8HF%B?|037rH zk$e=UGp7AvZ>;A?80C>U1df`X&Z}=W0EUqOA%iF)-nRn+x<6c}Tk5Dww~Dfuf>1y_ z`oUtsAt9;)Dk+mN0-C;3A1nl8jn?+^M7k$no0zyjc6Fn-J7EGi{UVmz8txU8vTj0ZjQ84_E{QmAz!j za+E@vc{9vq4tZl{rd*t`L=%lNDuI=#Z+JY`L3WRPNc+^*ch=-SgH13Nx-nn2_&4Z7 z($-$h8gn<*pYyKk^9u-6Ve-J|>LDt4l0E(z!YW9X*EO1@)_au3AfYy61c4`o)!-eD zPOg|j3$ljc0T#PWIqN{F_GkHZ zGPWiMZ&ybHv)S%Q!DCwEDS_4S$*x$GxP3EL4oE2~D8;YjpQlA?IZL0S*Rg)SFY8L# z&hs-=_a?#nlnzH+4Dhf}a9Mh7rv$y0z*hu@A|Mt;B6EKT?#;3(>}4@v)xf$at@b_n zSpwEmI3Ct0)-wz!5Eb>Ue0;|&ED}LTsE(Zov;@EetJ=fZKgo5^y)C1@9we;5kp>q) zn*%q8>{fG)NZYlJpnGNks46?rUQgI8WSxjf0EZCZO2!!a0|qrHuptR1f)TP8YxxnPT& zoGw`^uYh<)95GzVUDx_Jn_gOszl$|S{Jabk&#gq$T!PmTn*kFORzeq zD~E$ZBlSY?;7jNgrec>vDd;{}K7>U9=a#nrc#k~Pkbb^@|Lb=vD=R8~TDdX|n7O3? z6plH90(s<-dD1C}43G{?kVW{xW~{Zb-Nbyd)i(1+M@D>sWB}Mde*8FuwBw&V5ykF8 zwS3$@*otabYpgzxTLjBGR4n?*3Fs!C2&_?v#8TOS&8r$k2HN2HPDCajOvkg^9R*tl z6K9yREqz*3RYj;?9rUr2Ix^7KT9+iA*TpiAYL2&R>Y5Ei>l^SB>g3o$Q#QXwFo{`H$A; z7{qbUHk=N`h@tFw0HZ(-W;hItdt(4oK7C?VE_WF`NqJwJRp+l38xs$CLTU` z!eEQ-zga*J*m^bUlzu!&swBrU#!i`79oE*#&$nUo!kBr^%#7v6;Q3=x z5M4Ae_X6L@hJ9CdTvFRq2ow#6qwz5h?LAI-)EBUhHdW`egDnguhaalI)lo;dF@D5D zKu^6YLNM|aLtQDgll{AZn8?Tjh|GL>u0|+E)P)8jL@lbX*UYr-%V^WWQ6xFNmb&MF z^~1=`rYOD;Pi(hZ8!ElDjGoGu3vza_L5s}V4lPZev2I^EjcUr(lqzUvSmR)^bbb^&mdbe%^@{^u>zyl=^HOg-&B3HaosFm3 zwv`LzF+4`Dy}?AzCUat(3#e>#j}NwhtE8V?#-?DUe}|`^%K{1_Dvw#dKFY zbLIgg*$GZ2CMDuUTTO*8doc46?dAnmr$l#*m|y&S`OoO1(-z#-bRpFkAUM&-K_`;X z%l~2H+ZymCk;NH;I1M++H^gp*e}@GBZJ=|!U7^9^W|0>Z8@H7ZWR4uW&n z+BK~&Iw3SW3WI8xkOi#r%+|K9>gjdwiQ=>2(vDN@5iDqUTWALz1!>s40=ZAQ&?rs5 zmqdA6vgE|kqenBVYF6L|>r%~heWnWB*M@!k_))d2nK8z#*45eZ65O}rrVAO!PbKPZ zRh<cHHC8sk&yyhd z-VX}mBr?OcZQD{~~&h2%Zjy_uYE1caAqt;o{|5GRC0K6?h zc?IJW*=p7s3rg6wY`Gb}dSM9FQIU&v;&>*KJw?$ds;(}1ql$_y>N>Ye^vPry2U3uu zi&_tJYdUgpaAc$!Ng#QJftkd=bEmeSu&yc`rIAsGVZtl+4J$G9cEL4fsav7+hg` z6ctu)VrwH??#9#Wxw-7R_8v`L12tW_Qra?^{IxgfKcyzz+IaA=HIZVs-$`^ z_+d@?28k*gh7e+AAV*<(bv+uiUgoAF$LSO0{d~c zw+K~j)o0Sd;ULFP9P_ORpHLQ*=G28VFp>8Gc@d?aYZM_M=st?xgd%{h5w=ek(+kb! z6vo3pnB&(3h6o&w;gkuJctjDz>qU5<>X_5MW$V@ol-POXvGd0HcPY9ny z%K@B8Mwrm3V7gotyqj%YBLwsi)sr5$xE|nr$pIesLoj@}j_)(5sH;g&(vs_I1DESC zh{HJbDbDWc;Ya8LgaU!iD+CrO$ywUmHJ=Mwl)wKPSVm&a9YQ#8lLz?Ut22p*9%Z`# zHLky3GXSce_4K3-2YG_%c3*$Zn=)r`%X4Qf35y}xbU(_q|Do**(STclXH_2TD?iHd-G*) zq3wPo^*VNj&S!JfNcufUd*!0O?Q>&C zdg@MhSxX}>Z-HOdpSm-j{02evc!}8M44(5gz?kaLsN}RN-ev)RtC#m7byVH}iG&y6 z*<^iuw!{LmgNomCA8@~#LK0y1Agz8t&yfcNKQJRUTT1#Sk>QJgB zDG^-SY5>3*B<_Sd_)1tEX_1=fHu%uln)w)t;!k^$C4~@tRqFr)N#2WX1)M8!y17FS zC8q6t4}A;Z0$cIwkDt$<6@nl{m_(Cnf*yA)(91(&fB1q*k#Vw!b1W<2*Ogew9 zLC}v7nK|DU_jQ*L-w1j#Ue}xBo)+2qO(#^%hcG$xNNg)k1=aTDG<41`&h1Y9vg7x0(;hsv`4t#mePkS}G@J;I)=YVc@ntafx05V>b`?+XGe_BgjHnS?%X}pyw)W3Tk z&ft~c>0Bh0Sq~DPBYeZw?EAV4z(WQh_?;1L zR`;5tSw#|?@wWxLRs(eKg5twVoLeoJ%-6x0Ol!NN`GNER5I8?|x*^gB1^$`M?WMsS z*arSY-uQAXXDoXS2geOkjTj^wK2PcHhfn+Zpxk_o)Pm_PpY}1g#vNa1Pu=EqhEYm0 zOFn^SnvWf*1tM72k@w`IduuI;g*ZtrG8GXOT>(O@$uGYM=w$7n7fnNN${B1ogSeg- zz;l}!(=2nB-5soAliTJrXqA4TSNro%gp7$F-iA*18YCK3KZ4Aa%a2f%88`zG0YGwV zTt^LDS0lo{@#mkUch7uHh|GSVbmaECMv?=4u^dlu2gGPwpw)NgmtT4tGbM9oMiL6} zeDsj?gI@BxePv+NPb31Whw=Dd?S1(>)NA;^_R>0ukhXCSAvvXyERnQX%Q7>DaFAt& zq$o?47Dd@kmSk^1%#3}IEFEbiiD+i*iV&J)Pqy#4AW z1DDd)u0jnSJt5KA7MyS+0EO#vAvAar0paew{I#73B~XZ`AU@*i)7AzcPFb;|a{!w+ z0@S8}U`nbX{c97bQeog5V?qFBJAy8izRpEARrBmmSb~P7;G|1bgJ4#qT-Y2!Q*8!W z@o5^A>K?#i2}UThP#5#EcrcS{1JLxmlYr!AgaSMQC6@=WSi~zKMJ+Ta2q86LnMbZb z9;Ppv8x{-2H8$uhKz;iT5GuU(B>*q2Z#fJ>u3%KInF~&WpdinVA38T# zJX6A+86;GQLrqL%Kj_aPuD(O&h$DUn&w}#Vb_9|ub1~WH>(lQ*0K$kshDvy4*5i-- zR_DZEA2xi|kE(f=Y|wT9ZPpAF(;k3I*p^~$VH*}}1A3+#1ZoHgsBd2tY!yOkK?eb? zceSoS|H2R;j6Fy>E(XZRZs-jg0{t&s_T@mkOJ69@>tS##?`S>P003(K;EzPW;x^#O zb!-0n)=MamkpLJCi2N8!SV zD!z^8G_u(r0}68(31@Z^IG zjBAFMKtaiRGN8c+A?Pu>xDC9$C29<^Yjy!)17P8PL~RgH4*}cyB?9s!=G*Hdh}B5p z9UPjO5C-Fr;C2kjJPaoCY6;jI)sRpMmlRZkPy`4#@@V_qF1Ydlr5icJFa-`jvjzt7-cZP!WV~{xX7+Z z2p2HnTqV$XCAc@9bZa~*jq@``d*mKxzf@;NHj1=*5u3U435xn|0RLbJ>SKe1oyO%L zF634Z*cGFa-NeysHZ%tj!Sq~x50S$v$TQ#_C~zMo2zKQL1rA5E;CRx^{FUbV<0ZFCovp8+v}bdQa$icY$x92kvGV zpqI-U077G0Rv8GTn*Mn})9i^V2l$*ciylZ_PE_k;Pzc%~T}_ZRZ38Wld7J}*Jc){n z-v;tgm>)M>*bm@4aTj=S1SL1mlb4jpKbQSW5Rt<1@9)zO34^{8^e9Y4Htb+u?5<6t z3oV1Frn(2fs)E7bAp$%yg0}_p00TLi!%=SNq9a}p=1dq7Fi{iyehiGj+`%QH*o`{u zX=@|)6XyS7OXmiFh3q@b@qu*AWQrA1x*fK7!Y0)Ixbi$*X}GEcGY#XE4Ti>qBPP0fU}3fd7vjHi-dtCol5|g zcUm^u27GNJP(7hm=-Ranl7}~1r)I(g4~D5vHkb4n+{iuP+`QqXO|H$KEVTKM;vx*J zl*f{QOOQCYArDZNnSk>x23S2j#yF4`Zv(}*BM^B0sk&(z)JAsQYIwH1GOgx*moSH@z&PTmZG$uOQcaeN(%n%Y2N z8xll^pj_B+o-zTBWhP`RBvBup)viMF933@?2RXDh$fJ(DxL);3PHE9v;jI^5?Svfz z3T+1a&Ta<$gTVPfOL2pqM@)!X_5kE?2vo%krr-c>E&=*eVK5_5!MM8|5~ZubUAi5@ zd8)fsb~-~8Ta#v9v#T>+zd%{$0z>yg_BNNSB z@KaS*7Daf}#+^b)t<(fPXs44)aU(7>)+Y8i=I zj1d8=6an46{*H%~qs#5!`Mlp18T=f2hzSTx0FQ1iS~&H*pgQAutNP&Fz8EZ4C$*7+ z>G3~>(m1TW(al874WNAPoW!N(zxS%Bh(qHT1aIgGWmMbX(CvVmNF!8Pq{vFi>BK$i>f^Mo3KGqJ{^PR$)a6{qcMoH6 z6g*PLMi9{D{B-id!HMBGq`IM>87V9(lSh{d&6>BevdPw(y>;_G;JZY!S;$mWM?rAkgsmZXk(>vXqP~3jdpE~>C`-ZzLsTKbd5rSJmHf2A6h$uW|*?f45gMzDHpH64Gcn(5b3<0 z5De^r#Pu++h~Rsu)3nks0?rB`>DjeSI&?_oyUskTm7^akkh*-YsGB_PM!#QKzB&Wn zo!vn|twG5AFR$8Z*v zPz@Tgwzh@m$3Sk!8h2>8DvA;tY(V*6F_8#*sP&2$95WXi7Y$PAU2*NQDhl+**bX zE=70Envm-LdBD~lxeZY5Ubfm_LPj=FWU$O`O&r^X=_d1T+gYyDVUA6A>8vt+kTP0) zCG^Q(X))xi(B-F=5z|kqE}=QOFqRV|xi#~4=F?vIAcorWxXFu-+Hb(J8oRfecUxq1 zQnP$4dFJ$^l{s2UykyB8;h^aPF9L?805uB><)Z7ezTRH4h*gk0`kcJ4G;Ym9sTWVo zTuwjG@RD#lAHX096Bn^>*nP{h+COuh%=Gr+JlVg8d*{GNz5-Uq3gG_F1uK6`I345G zrt!Fu!kD$NOXz<`o3&ExpL%?5ZO&xnEwh20*)aug2ea`?US0Faji7r@)?6sSVvR(+iP_ znHUZW%GKTT)DF4NheJ2mAll)5ti7Z9Spah5J^bfAi#%B@(?+dLWG`+^=^r1t82Quk z?@7ArvbUWP6X9ylNm#pl+DV>l_r6B0DW_#pd#yeM&#Plji;Ia(zkwLow&4Hq!zql{ z7s;Scc|+fqPl~5wobD|7$O;X&={}A0^S?@6*u17 z!PUjrPRP!M9IbNHjslVYJ$!X8y5GD{gHFvil)|_$B3hpx%JfX5lfKI9GOnD#`zg@r zjmV&fYiFij&fl$tlD%1Jv{Kiq?+U?JuP!?L6Dkb- zvUtp!#{eEY(Fy9%ywD67X`V6kq%{_bnOS{1Lt3$mX?4+4hwIEwGmLuKHk- zR=mKvMq}7dWMb@H9-cGYrBt%;lQFmi%3c&SWu{IzFrpXM*d^SnhzS?d3rWUcZhdjx z4u)XU!WMCHl3MOlfC=yARVs)U{r{|C?d!$VNEa|2r)waLxez>}IY^YS@M08Hl$AD; zbH6Cle~|Gw_9wU0!Y2*edGD*sc>K=VlCylq#JWzQ{+5OA!ET+gu|G=XQmd(^mim5f zQ%9@biW=sJ1BrKeLdsG$7-I`t-F7U~IL$Qk_`RW68=W+onym;1z?0^X3;n^5BQf+Dn8UOQvOvOAv`OG|r+_m_rFD(}xU(fN0MU!Wva3ROI z-q5vTZc-I_J*}#*V(<8LfA~PoYbBF#Y`f<;xi8`})n+a=^97uOp3;{xa*6%iS}J8p z{$g6w7HfHpdT~OhQp6*9xtur=NByuG!Q7Y?X42QPM+_In4bv5@%4g5OD-Nk+!}f^W zxfL23TDL2@WOAC%#8TD)hXh$M1s!p|gama#rD4wi6bGq~1K|6ofw?16*PfXD%c6ZF z=gG_GkUB-qX7@&u zCu>~5aQ1HV=AH_@yQ%l7KmDEPbpc;vgx@5*x)=J=)7ryT;z_XzUa8P%84D70YMz>z z5~M$^ij`{1%gpREOFw;Pi<(P}7`IdN`s*c89oYJ$+G;(Cey2NmldE1T7pssv3xg+W zjR$P^&ex_|Bt`7zuct#s{y9nJeVl}`t|yKv&n=0TO~+@Z#ieaolG;(+f3jnnwaYC# z0i1k9oP!={J&eXaZHbjx_R*9q5n^Jj>IP%EqL|lV)iz`zj?z`LLH_qI%gb$u6WK!- zu?&qWBwuB#9cI(!@Xv0MFOJa^6bX`x*lu1+(&{Yp+13;_BY?|o6gZFkRI3uQTEi;{dhA!*O22^9;XsOSEg0uib|$=*`mez_&wY*F(J(h^qAstIC32oVY3vtT@QuPQ zA02n#G8$vaT<*%Jmwa;yH!r4jJWk3XlNuPap4gN)B?Y;vI1lb8m0nZ)YPa*AKsd9T z8?|{61Kzwl6y$TvGJZIv-p*iY(J?D-5t_0h4``bYC}#{EdC*~pDDSR);Gc5zND%6l zL#1}h-WT-P2^1Q6us@YJnc7CaUP3jiICa+r;$}zrL5|OUPG&haW>)(W;zUk`=9Q05 z7DQ0ktzJOqS|MhmCRTM#R`qHvC37a$bSu)1{qj|Dmo4(L-}S8O6(-#g&N_2$_c{}2 z`St7=D@n6|aG|n%EEItbx>10~Lk;Sn6KNNtR6+hR=}>wMIg_zXI@R>Pi=Bk&xX$yO zt-{2n*1W#;f4r45)zzO&-?~{gq)uET!cjMAGuF3bv@HFM;z23;_FrcQS7i-Zikg@f zs4usSP}>&SBO6F)TAUHBRbVzl716HC?2D6rt^z;%?2xi*^VhZePp97^QbVbmbm+ax z^~JQ;8BV4aRNt1!vBn?#6Z>r7u+>Vlo$Ypa)x}Q8Yi!>|$=3dp&%j}pF+#djgSa(}nC%2X zXuS6}&O(x|FznX(!NG8;wrZjvjgie7l%+XkPe@1~Nw3kQ?E4m{q@mk-?;tnH^tXcX z*&uqx zk^Q~4d0Mm@id1!KU0ul~Mj7Wv5`V1?Pe*U=9W!yP6D+U~G^5fZEvSutnSoA`jhVH0 zQW42Kshl*fx1sQ!Y|b%vg8<+ZX2LiZi&R-!%~)wPkvc)3mXdnWjV|FnrIn_ z!`keqZr0h!*0CMCVcW#kDP(Q*t0Pm>HYX!+Dc&dGoYAm9O0*{0T^pJ}o*GZ&|5{ro<*xeKGQd3TK<&1|fxd}-afM}kFs zp}7Be{`GLL#Sfw@A2Cc$>6^>dH|zN54&MAmt{-?AVU277ZZs1oZlj+>$ZRFmwtH7T z<$A_=k4*D5#wSNr7vGIu{3yDWyf!N)nIq&~mtRD4^P0rd%ScvqZ`n0%)J4zFJ*gDO z?2WK>CW$ic?}Snqv%~CC%CCh9G{loLv`DwdBOE)=JGD|$bIp44vsz$HKC-3o9FTp% zi6WD~<nbDl75xlfEv8;N~nEzS_t*eVimW9A|1-Ko8(8brtYYGbjoboHFjOB)HTerDPO_*y1Fb)pk zB&%9a_%Mc|_AzmicE5^>1T_6KqzmF$_mnEw8_2B*IzCQ+5Y1t$w$Dsl2*BC=$jq^y z;B4HWPmLnE7%()+Nn{#>mYjO(cO8R3i53236KruSgjsifvjErflM-2d_hel`7#`q&}4Iz zE|=NgAjY2##u=JtR2J)S&E`V!Zv1mj$^W$0P-&wh9sf7O$UHreka1Y!#%k4_RV2gW ze70bQQ_q;?0s37^k_TxopBo2E)(AB?yX$p+Ame@Tq71W-EZU^^^^%FffgI;-0uXA5 z07ae4z}vVKT%gE2QXlpXEv>)C52Xtn*8KQWxtR_a<>jP) z7O4zJ$5I#vy*TGgD%2kRTA@H4J9CG9r-!asbu`-%e;%EkB!}S3sQK|=F-4oA711PS zL-(*uCDT}0rt+nv;rZXE>f-dE7Oo-rqV%}ACqrRe7aa;U$38UU0FgA*Zgk8?o&!hWnzq`=e-e#kSy4V0#O$4$RO7E{JigQvKO|;s zDEuBDNQlS0q95;CN}Qp?Uif6@;KiFlz74rAHKVi`st@s5LxUH2RWy5JxikJeob!aE}7sN(!BjonTs<$!)Q&wFC$RSq{n!9 zRlh$Hz*s+i5&TAakAzKzd<|zN#Qv*D1jkO1_map7Jc-VrH;R5_?crp9{1@MOS?&mp z#e6Srr@w`BBI1%t!ORc-;U;Ew?0iMK{>W>pjrM_@x|h2qyU?2(wjVKx)2dWhkGbo& z{nRp;bO|q0f%l}hvHHg*QXgwyQD@oveMQkKf3I)K0$USPw#CN9y@Qm^`uzJ$-NQ+; zbhh|g8qQAT%tsbJP;X{msW{+byly!AXeXP*e&XS$K6PgPPYnL|{jiW3Aq~$SYl~N} zVCR1NBdA$*C)=CjI6l8xpUAh>1HKyFW?oO6Fu}VV`&M9FN%h?tBCICCkpZ4KQb&}m zR|zd$9~ffGUu}t%Oi%GY9^`@Si8!a8_}pXp;~t(kt%mbj)UI0tf+RkJ}jLXUNbuX1FFaB4q3Mn9EBut7kp}C;3 z)SJE0GI9B}>&70sL5xm@Y@N$^XWPhbFTY<@6yV1R`^)YT#~I&H&}#9KwN42(+&y++ zrM6Q3HL~Jl8_gr| zgs~Kkkbkt8QZgXua)}(lh@tRl@c9iRrkfnwmFbZtXChk~w<98!zD0}XG?t!!jn@BL zx2}lZnBC+?r;Q!sP=r6SHZ2Z{hGpPf5(nm;SG)XI;E#5wiMpw2`zz<8ri70yr7g}= z%T?Olm+v$8pc}0GC|JmUulqfNm6nB>B^2p)^Dd#?w5+YsdgcuK^edf-dA}1GnI1Y% z@=YJG@bs3GoFUn3H>St6f*4o0=ce1AolX9AAOeY*=2}syj$F$?f@(;BwIA0rJFO>f zNz?hY{I8slHF$w*#rz>`2_Oaxr81ClmbDl8o2jXY*5_3>@JDG}WQq;9bs|ZB%A+Z( z-;4j1l)D82{qDC^+Jv#fmh`KdHomRX9hgWI(zY==?rD!m{l8O_DrI!$& zEs0MQdFV1V!~Yr0nemIB1s$AWoyD}!fg26>(q9&lAJ8rcxm6lUS;n0&3|fvGrGMqixq#OyxP%s&nZYPu_dh>Y_6htHByF1sK3t6vYbQBQy52{!l2t54EDf^7>DK~GA zp_vZ)3}4!%sF&cDw$f+5s$2`^zFR%)qtMPLcY)BMzy=3}_9Fz0mUFV@m0_QeUqv#| zeIsS_^`tUS!>xuNa^`;YDt^8x;yXbXQ#vj@f^BJBFd#C{((7sg`G+f98l`#t7yje16N zSDxy0JO9}a0uNYwBv-a{T=C+sZqCcuDcc9G6`+m0Bft_tvk9 zcA!MkN~+O6*4WU|HT*@4OYbxtl)7?4&a0gNXi0p8to%;v6VfAU{A*qiqba-fu=R#@ teLnnW_s4(O#eeAk{`0?Y2O5sdYn15?oX^@P-i>B|@~DA!mX`Ik{|ABY3?%>n literal 0 HcmV?d00001 diff --git a/images/easyeffects_players.png b/images/easyeffects_players.png new file mode 100644 index 0000000000000000000000000000000000000000..fbcc3e25709c80d3e69917d25c66f902f760e688 GIT binary patch literal 83352 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%0APC-T|uU$)W`SlI$ z$>$8W@f}#h+!jA*tOZ@N<|9bl^BJWtsG~9;MUwjw`q7Drnd71Nsz{#cV6>r6)3_bJ z3nyf#c7H5q>h6!L{qj8n7@fu&G;A+_>!jX1clqV-BexkolgA+}wo}1@cHDq*Vnw0s zhtZpZsv}oKf0tqq=k)za6`#~hlx&`PESq-LfB-d##l%6aGeN%&sfmJpr_HJ{n9Vmw2V#s${!4)tHU z>bvod>IilL4Zo%8Q;!f0ak@tSW;=KQZ(|dc*Im?e$WD*;n*Go)?2by!Ow!r4OL0MK ztxz@wwkXJkDI8m;i#~J!k!v#iU*-APF|zngzP-JQBx}%FV*`R1wSkE_m`PC$qdQi1 z*RS<~#|5VOV#dbCVIR`ivmE^sg&!V5cF>*0;J`ph8gh|0KPl(O(Us-rTYBT(7rod)k5)+GP#IZ1&Fop$2I&nKkWQ6Sa(Q~h$U(z!eC(oUNbVm z2w3mzbi>!chNP|>ME73X?YDS7Ol7HLfWHp*izdI35zViyt;R5b$@9Ti4g}a20tsnD zunDN#O1))e@g_Z1^R(Fq4RXNN$!9E@;5@ldyF<^AmHCVH#5GH1-|2FjcYj&4dFzlyc*uLynh$NoIIL7Uvg6=k& zyey%PA@P$#)!;Ez38>`#^Wr|dQ}XjQjJy0wIzPG9`i3?%HT4<{s;gC78yQ`N>Daf? z(Hf>cuvR_y*Tg+MJj&YS9y}29@u|<*lRM;cK`ky$!C3Y$n0o*yJ()!5_v@E&srl?r zOldIVg!^_~U2!f#Mphu9e*6AC_g(?a?HM2Zo`}jX(awXQo@XZyNp}P$q+m)S-W%aKSdtCBG}cou43f3FY*R2J=NbHc6JiNTde3 zCQmoHFgC57P-baPRCDZF`a>l@6s;l$PaVZ$1Jg^H8U;voMhrO$$_hNa06+rB6Dlm^d`-oJ z_wL=hsPdD;gNE}kK%@9q?qEV_Zv!i2-Ff>dw^@RZeD>(z=@)a)no8e&o@}@pMgo!1 zS|qad=IQWa;^54}++F2d)yY;HeZJqfAbOwRmoG8BcDi^6e@Dj0hl+R~CBvgYrjTGl ziPL#SwW6n4N=k|nra!eSY{L4|WYQi+GP*%6bGyqHCew>^whHZf{J;x#dSCDQU6 zLa%3+Ul=)a`$?w z$fI{&9WsJR9VT}6R(P1fY&zwt9^>!`OaSkH>*;Bmtn<|C3=Ik4eDaMLLDg>iKh0+B z_&6I3prO%Y+tAw_`Ue3SL4ECEwW!lIz5Dc57b$G+LVgQT@(qX?q^QfbP z%=4x0U@{b$hX-te@q(eSxRy;3O-0ZXK>K?88{OB+3w`9KVFA2SbXYA_sgW;ox!W;`7F$wAE<+?oKR0g zshIju=00LvZ{sh&IS}#07$e$iau3A|$i76H9mX_3sr2bybLNQAC7kcZL0W6y_^DSu zW_3QnV0CFsMh_YE8^s@?Ax=YQuG-!8`S+;js$h!(NJ({E?9TtdNh{zarms&2<9#TU zOAW1o_a2$gpBWr(%OQMJZ>7D-Yg)k}wgLcYhOm5)1%_haxelLGld^zw+|_e}xZHB*gtb z$*=kSMS@89CGV8iWt82*_bW6)Zp480BoyD4xXQu2IWgUD5ww2Dd3KNjXQK^##39cK zi%fm|NK-NWMm-%nRYrs60?eS~0?H5@iMVz>&>90x^8 zO4?{#lq?ZMIJf{~U;!{fuV)_%PdG?cry1s;Q7|TTz(+5ovCb`!cEJxxhw{lcGrGh#=s%mt$d9tw41pPbL$si zdQ?1`U60do;qlzuoLiKPp30)gM1>_OW=_>gQ#^b8uM^R{ZlYJQfpI+zs>Ywu#E-IT z63tg}nj$EE(T#IOKWg`Q8SpWnPaQw44EN^H{r8%oidK%FBOKbFFhfy(zxi{JA3E9F z0&F~PJ5qE1x7Qk-=LIxa2*{4_kHqEnfWzzg%OxAo{RT|zJUscWBm^1UMy_5PS_&cS5JT{hB})jh0(q3~l+P zCgS`s;o|PDl?KsM6E-YkQn5t}zl2wZ#Nv6M;Fo8^e7%DOTgEI=&r?54u-NvQ457@> zdvCFzrKJ2Uj3Fqb3^lw**7$_QuU!>4t%{iO(bdNb_hVS4ICW(0^x_l5@(I87-!H~U z9_W0LdK>#S9*w&|W2RX8tNa8@u-$<#Cju4-4h{}?5&`Mpt$vnI2-#WenFW&#@Ia7y z_KYdfV}-fG8V?U|+~;>+8V*D`teT16+UhVvZ+&Ig!#lvQRYgHK;PNeb1Q+LHDFcms2CYM!}} zFJ{3t;tNnNh!sFV#|6F&y(E}<2cL&`(a}M0T^Oj7lM};|LHz>I@OKlm3YA)tE}X{& z_8t*f@|j`zp`ZIPFwYmGw9KLP?~{}qP6Qu-Yd3CS_Vtl9sM?N}GM}8Df(Hfq zNyGWUc_B>Jf;#~=j3#qn6VbgkX?tTd^CbZH!Ug;F5-6@pfp`J>u?;FUMNQ3MIC!FA z@WV`>41LSX3zw1210I(`FgZ#o;>Cwd7!%S8Ot(-NAaQ-6J0XmYhoVIlF9_W>;x_cK2ndM{#BFVuc>i;E^O4U2?Hh>M)29i-z>!6D#gw8A!=$8v~) zhi8x{%3W2JR62|*faJRL^q_`;)ap=Pkx3ijF8B~Y1sFZHW#F-V6R9Hs>mzg<6|ar% zObkW5koz4;OqlYOc<=xhnGN6Ew1cTdbQH4Ia|T1sj~mVQxB>+=YuqB z$f&Z<DIR+d{}zN-4SjSfZf+SDR>wrO-M3`FCkQ`7nELYK<#%XsC%l)QWE9{*EEe z8li~}Y@Q*`&**NsrEhpiVkW&Xz9+%VjusMPc$@uY-X~o3M_k5V4rb2eANiN~h>0&x zce>nG%tc{iDQ5=G=8AsOB;ejqnq7SK_sywlFomE8HP7t%5C*0F=yBDluxYuhAfz;3 zgoI0ob!c|w>c~_(*gq6K?V@@a7>FRsO32rG$8d+gU__Eqz=>%H#_-3-b!qq=FadPt zZ|}^H6q#%Ra>ap}-mftDjThgAU8WrdDC%U@;QR{!hpojV-(O(A(*y`7`+FNu$3Pgj zMcjOZEEiV&TFQ7{+g6w?w1dgkB_{z?_Yi-N@Bs}utLAiEiv=*me-ktm>bW`%8JTn5R(=%AXZ)gRv!&-m-PWL%I`U8*wxef#Y0;0&>r5d=&!!;OzE~Xb(igH5j zqR?eki2V|;DSK!3U8FupYPn8NE9SHl6W8(MA?7ugQe2j%*fmzGn86(B68aNu8pg>V zl;K2{SY_IJ^Kws0#@-3fNnqYs7uQrJBrT&=6hz6HD;xZ=eR!Gr(j9?oDW5Q8X*|UI zo~d26As7vJ@yY6@xLii`^)spOqmLL+hDcG4bE{#U6E>k};Kk8Ku5MtiQvCBE)vmp?IKS>wvo%`ZTi%y9aT+Q8^hVo$< zvG&mH2@snt@ZY7KReRfJQ-S#GK!FY`CvX_UMQy%E^juO`_hXL15=3?|1gnd?Q<#~F z`{)B}6Reo&jg1YeKRH13xJ~=xSbX~UcU#PPYL|wIZ@)?#sW!4M!@!8nV8TnK=8+05 z=NZTKU&0$`7b8NQET*j5-Eq7{m?Wr@HoM29h>F5vzB$9h`LRh*H1W%htNu?n;f*sV zsvzai&Dqy97=YKIVC1|6ZL~399__fGcnXpJL5&lIp<4m^IwC9K*NX?3^(`m5K-T=%6!Ls#&Y@c(edfQMgiwYvwcmiL^K^?{I0?U0eZzn|9rX;wYQ7p~+C}=~G5YOxV!S zkZ{No^giOIA;giygyI|;D>laqi;LIq-tD&*Xubnw0$7_qkdq7eX_asH9U?M>O-Uea zZQLotT4fLZF_qW0)e~&`R2D>u^n#4^(l-A#DH5>$HYsq#R~L!Oj_xQZDTy9;-7b@%o^M=%eO*j_!0wio!EB888L%2r!z_7)jj6y%J$sIRdo`F|g*~p@tHJ3=8b;+|bceU~`Zv z(WYvie7M-Q{tz1qe>cGIXnYvgVMDh-R|nyFp{S}*=S3BI9Xi0~uH3ihqtPrf#sa?_ zVoFL};I-i648i89ci9ObiMXL51A;2vU6=V4NNwY%zA9qw<>4VvZZiQnED$F6(NKw= zzxkO$o`Z`GDY&?OfnPBp$pfr21RI)f?d?rp0xl}4s$#vUwKL+tnhVMCOF`Xv> z_H9(g_I^)LL%&qtwM4th;U*N_TS)E1%8HMLh4p8xq$hjA44fMHT-GS{eGW|#Ffm@` zh;))gj@RxYt|BZ^cpSBx=<2ze{?HFZs`~pugtWaiuC}GN8*3iJV48z?j$Nc+|GLv7 zYA{2oQ*PA+fW;r8-hIhwJ3b&z=#h>h7-OJN(~bTZn$=FsK)HgORuI@vOv5V`b8_NF z8G<>8W}OEQun6;U>z#(2hEPN!7Gkiq0Alzd?-mTb8lm>ZL}^yo(AJ-yd4kW+1P>X* zzb4r`UN6R8mCv55oKCj1>S^vF!K)Gt6E?2S8?eA^#-hR+(v-7w(deX<^4*TMiVYQJ z)&!NfGie8Q%EeC?%|S)2ndhQ8Eyg8lHhu{Uk2F(~Kx#no6%|XL*zXne9noWkPZAOZ zHI`9Dnyh@D`>bF}r>B>A?fP{iZYo$@b5tjPl;L7w8E?)-DqLgzuB8Da?$VF+i$D%$ zkKbZvCsYtQya6VDXpMuTW=K}lWJT6E9^RMh;X=S$p|6cq5P>ZN@@DM%<#>(2c_W&2 z41-9>uQiOi#;3cZ<9XjR#2W_e{|Qk@@i$<>toh2~|Amm-!O_8X{eg8EW#b_6QaWMc3_#+u-Ojf z##%O-rS%0vgO~(d1O4<1T-ge2WLt}i;l0P0-hJ&Z5Ow|E!su(ET-v&SI4!3}-)ecM zQUytl9-_2XGfhm(BeJPN7Et8YK@H3Mp3OLJTAy3HSWgR}^Q+flxXqQL z(l&fy3m^;m>Gv4${l$P9Gg{xHJ!kg6-tOQ_0pZo5K~=5Qgi*rn_Zdn#VBhQa4cqA1 z5MS|qiywt(*Qj4!y|L7xz4e|e_A#JDsg23H+qtX#8AR~@^h#9C%e0{aQjd++F9?Fi zKoF>VMme}XyRl(llmxmD2Jlz|c7*tytl3uqD3M5|>aK^k4{O>B$RIZ8(8Bc53k;)4Y~!ii*_ElpzH6iZ?8&l8h^$0 zf+id|?-9V8L`+ydiuz9GjSYfk0kLml)hfmWlO#lPLPAe(V48E~uN0#G&##NaA~5nl zQssCn(e2j-R3o_jZ6ZE)P~ilF3`I-~1z-ux5&d9Hw|e_caIhaJL%>3?t{h)E zY9S-=uHPp%IRR7{(0GG0Ja(+rvQXRim0Rn893uaVfRxf(cpR`N5xqq4n>W%Bq`<8S z`AtYq(_okf$v^_OB8m^k-exeH3@ra(S0bx-7ARRM7ngha4QC#x?yO#F?q}1ZU~+>F z`V$F&4se1N?7HWGrYf-|z?V#VtlU~jSNAnAbkNU2G&^AACt09hr#nArQTDg=p%;B~ z*Q`4k{QNe-Ko9)C>?fRu)s`l~W$SLK#UNg6Y%Eg!0xs)?J3xH&LQ<1G4}L=&cpxty z7;HHA?Hv;{vpBTEllzwqIVq949=gp{+oeCP;7}akABD%OF%m_*sbJeVQrrIP;0LeN z59@obYoM;6SW&s@?bwZkjc8)B{bX6M>ZS46G2J@Q1wBw`>CCud3M7ZN1T_C+beh?% zL^^*3wS~e*$;w7vpgV}3>yiN781w}xzJ!r308E<}6d<2q|62j5#ejh? z0@`31;jJRd29Q}81St1KRafdeIye|sjB(ljlJo-RQ!!^yqw3{wBBVx4a7dE|7=Hi$ zeOR8jb^75%q9?@R!uyo4<6Z()JOkiFqb8Fs%W^*N0?^paz!(L=i7q*Mq}BKkPAGY8 zXrNO;^fDlz$&gb_(hk}^vyg7;Mq2=_aTKkRlPK||rltaI9*eiUK{p3chY)B5m$J~U z3blIuuBUh5UIKv~p(?1|4ry~oI_y9LX16HoQ=e^x`@)Q>ej`+^O3KR5foG0+%!mk< zV7Jzewxl%#|FmkgEU1HCvs+oHLl+5&)A}f)WI#@wguVgv#1K6ew4tiXb!y$XM8I0B zV5edHG&p!^8}xUQb1x9LKM3Xe>&62YLQ)OKEA0_}47^z9wtW8UgRYaUQ56DaMF<&? z_BFw4`m2W$NFW4Rz-_8~R&G&`9{7?)w!egq0ol!)H#KUQhChO!?TMM02@o(4ULDxN zU%f&EWV)gp&`Q5Z&bldZ-Z=r~C_6n;!0}9<9PS{o8NAvIjPxLrZ*Om-P;KG#Z4i3& zI^`HI1JHr)#B*SXYSyDadZ4)^;^Gj5n^H&92)wf$K=`N6E48e z{8^V0KL`Yj!TU$HI^x>mN%^)L#=9Msur?fOSw5S5Uew7RkmO1_tk^TEt&frS*@39J7 z!mKO;I1zbJPGvFRmChN)NS*y;(|3 zGROr$x0L%?uUNU&&tD&)$XOX}eOl5E0Pz}2lq_UfEI-5(79abCWjrk14j{VIA;qRL zg>c(Wj+dPP+JI=9aJS&T46Vh7(1VgnS4RHj{fgAQ|Iq@ZLn!%W$0sTI^~s%fSQsr+QwE5YGF6x~ z;GwPIkGizRB|jze)H~sga8#{>5$8>?u7!@_bujAvwXwkgzZ8QKVE7(X7Vn^~6#_qh zdfHHlR0{kim$IWFXoTn&M1!AQsC-5w+$Ef!wY`#4P)&Oq{O-;UdwfHZl9IriH#C*W zVOY=gRo7ETYsc-mhs(VwFJ1-(JyKPD4-Mu{_{kF;V{l8uJ>U|GOe6L!JJ~ew)_=-A z&VKBCpdv5-#%XOt2?eF#Yp37iTHq}xIrrlrGGj09?OO&gb0yAGzb!5RD$ zu0_{xWREIH&ed$xN5Z2vAFnKW`SRrh#6FRkdAWe!{90-bW@CRkR|I=HSEO`0*Zbrj zF(IG1TO9_GI3ltP>?nDeHXGPu+GN4I$%m7kVy_|2x?tZ*LIRGJ?*XPfnyUBK8$)gh zes->Q8RQGu8=|69WwnTfZCo77wQCSlFHupkfcfS&ki#(XC?OA|`S_bF6co3h8%I$y z!A=+?0fGLuMcF7@C2UqkkX`22g{lMzLv!g89UVK={ZY`1=zxe~3aZpgSFS9(5cnR> zQ}8>lybtDEo#__bc)zstZ1@No(hn3B6$4H{etZ>3Yx0txtk?o0v?`&cQPvz(_6TODv?h%W94$-ZvC~T zI&un%(1wNvq@$j{i1;nHSd_`SxRj&bf^2%2YdBYHR^4~_`P!P*74XYt z3c048rw$#DdGZHjB+F9`4Uj|zt$(KfuF2jPbX<51trrd9(RG*DJEkFH8<-^TIKCK= zE*TB8T}!o4y+^qNl4dldJDucv#*dW9U;|2t`l}Yyt-6E+HGBJ_+e!b)Zb85)^Xyrs zr90rl-coaw;UYw}0ZVS&Z8i+`QNKO_}u*8Mo#9C zUXZrp77!^WKoWwAMaIFQcue&R^na+qu77#d2exwbN2zv@r-6pcZ6zziZgX0EZL*FU z{w<<#5`m1ZEu2yP*~;avLfaE~gq5s#AAI7!4Vw}+Xc-)mG#buNqChHMYYR%2;@z} zsTZEXGj1wqv!og|2Li@Pyj^hR?$c?w`-1lV^Rdv^ufGC){|*|oKqpZn`4W0FT<+U* z76&`K^)(}a4gx`*#Q^>48aSK_SYWQF-zfp~+ka%dmP*yQJoqY@T}50R4MgVxPD|6} zC#}@BFM}CiSMC`Vtzmpi=e8atb*Y)K)`F-t=0@)B?(Vh_Ylhg}0(o-{h#eGPy+6gu za6vdoY%ow@KkkQUG5|aTzj|eFeVKwH2+Tf>z{nPAnn3BasyUu}l=#q;af8qfnp54* zw6wH7puk4?V+B~Cas&m2fzRPhKuoiHXQmju(G%3Lx=NmQeF5-=0}YAbU|dr2GvEE+ zf+8Vzwr2mhy70zNUPQa(an}ip^?{0#g0Q%hR4$GODamSz@rG+6!G;i@yp^T`oFy(b zAR(EBhxwLR_CESU2LBtMY-6YB{ZC0Q-@kwFC2P__oixYY9-*D@HjEqxH44n{`Y;^4e8@DRFCy{6H6 zpP~Px0m0C@TEoCDH7Voz)G(NwGKq+sWtt{=Z9f#=?UnF=m8q(&oekk+Jq9hPK=#3d zUg3lBG$0FQh=h0FA{{DW_z^Ovdcu>7Q1Gd-FfnD4XA;l~sNSQdS3o7F{CR|jYFpm) zeSLN&@oOdt0|SG4z8Vgu=mmG#90*9vkdL6N*Ac`ppa9j~K%J+no_z~hVpNChqenbo zhTj##C4rn6U_>b^CznUQa;mSW_!hspck28MJh{60Z>1h~eK4YgKI&UYo+)4}tPEOb zf^0Z|;CDY5-Q!zyT48=+!Qyax-eRi$R7s*nr5*Gc1#lFIIg>f|0WJ@m_iccPrM9Ayc1GKK=N~Y(~T_zWrOpW zb%nbJ_rPvfR*SI_lZG(NNhm=6JAzDgLyfR3D>Jhf+PmvouT~Fo;t!9HH9Xhh`3*ub zI{_-j-NNh_@WwK8a~}gAqzKKj7b~Es@rT%=V)}4@>fp^zApDfho*o6LBc9atfby;v zh+4#J9S#6UZdE(-QqoJzXs)9R*KPW))6);e|L@BbF7`3x1Xp0+97|MMI;(WTdSyOF1n2cR8(G7J0#-#^XtP9TwFVq=p7iC}?)Jm9Q( zJ3d&rL|JeeL^YiHLPklM2}ab}Fz!Mn;FJlB;jNm9{BsbH9*s?%Nptv5fo*XBaH+|+ z^DFPeArwF4cqcwV@80c0J6Nmd=2x#|3k)J}Y8jZAp-2Uhte6-|@2wV!wvQMKZgANB zN_w>Z5Aer*pOjR9=$7C;XxF+GP5PdDKLl!U=_+(j)4nxUN0M_+i}MuAW(bqs*02IsxY#@0uxopXShVDvsaT-2_#O94DLyG+Kc7B~wqgNoBo z>_rgCJzj9c?t^nQ3LsWk0)RMz!2?i-!JN@GB(x_wK=bGaTwVcGJj;+aKlCpPEjYTC z?tJP%E7YsvQarv@AkMerQJ7mUtLyO4TCt@uE{RS58==~c6oN_y+ z9J&`#DAXoPbZ0t5-_t*{;Q|1PBYn*a?1mCS$b-{0<>v17V( zM;VOul~s7LP^f~<1T7SNj-Ll?Ny~w#OK2#*J{X^XkANo3bzG0X-=MrO#fkoY=NHa^ zd=PwXlKlNa@SVu>WSqah)hI)}`}Z5vAKd43|GuL)vRuJNi8+E6Dgzb>Rrt*tH@-n> z7Xe|j3{HE9ijKYw$0(GXKlp5J0d#f5C(x>Ev8p*9K&74o`xve(XUhZdXn}o$5#g`*_^_b3i<)=?S1ACye9@D=(0DlCK?o&)m zOxlpau!HjahLVy}pHe||Vq!jov~QfRwO5@NkllX@jkRJ;RtG*BJY3vfklYpY%L~dWo4Ntbi!Z#{h`|$x z9Tbj(gQIcmXHoJK3EVv07ws+`L9eG2I-$acbCFQoWEVX)H_t+X8Wf?+NS;~al~Vym zdXU1v>*_-f5J2aAJb+BH0vg`8gBEJ;?p4)J%c&rW>Udg0t5J2mv%sK19|qu_m6?FR zBo0&;XGg;gbbDSj4b?)voB2=z)}8K;LA?9`&lF%J2#X3pwT+#mp{$HJ!J7lx$HT{0 zg(xjAxXz92^kVJ2FmKDuAOr(|)jI@t3uK+iUpUdYff|r__Uu_0eQ$clG=qqUezdN` zD`<_G#(jpuXb)y8vw=4OR2&U`Dm4ID2%v)C0&43%P(1F!5n`(V0`iB0js<^L&c@Wq zcxiz@GKjF9zdJxC@Xg-KhPNIsa(?0np*jat-Vl)s9E2bfCVB72+SG1I?*SLX&(H4x zrylJAU|#C+J#(zMS|n;y*VoSnkiL{#()|O$g2lymy1<4XA^4#6@G5QpQ}(KR zLEU~Fq=h|r8SogHuV0rqhljQc7q*g}lP~bDBE*CbQj%LeY8o@O;10^|6~HhNugXPg zvu4f#n5rx@@0ae3=7_%0($=>6LB~c3aNHBhKmZrc(8z0FcA|6Eq|A1#(v9PH{0!IJ zs@<8VU#AVh37Q!yQKz7iLXzbkR4-YObOyUUfxC=)|Nav+WZVP8;D{A{kbJ3$YUN+Rki7nhP*qWfn^ z(emF;Q-0^yZp-TV9L~#4K($~Bn_KKU>=7J78bxL0A4;7t^XJx)YJ+rup$?D--Ij<& zEZ`O>C=`Ie%5_~O232GxFB~`s0pOBz8ZsH37rTXxly}W}$ zxLo*{N2aExuvZ5?4AD{9X+$?s11~z~v+t1i|jB5U}f{arQo?RD)zzVTtFFT_O+F0RG<)%T;Ds{*KYM>wR6iDgl^b3d_0SiU2 z7<68z{f$=azVmbsh|=zP3+4WecQ zKv2*swAC#D+reh5pRMg&n1Rs>Rp1*-fj0vv&jNRVlrS(4#FhXc=r2N910`lM%vdAa zJJAuUg&g2tzOB3DR90%j_Kf4RPc^HruKw@}=1w%~*rOkT+PV+m85tE-HVnS(!NDwm zGCbzq$;gji#6@)xLn;}Nc=+(uBplVma=hkJL+7VPIvY6-Y)CL^XT zSw3|S*kZcLHU zOl*nxW+rsbN0`U)wjH2DdJlx$x{^}f9zz5zl1;BMIKs&VrX@U~ z5X{+5IV}XPj!9Vfw6Z=yi0qb0qNr~@OtI*#Dpp2BTtfDt?_sCG8%yS?=EVV0!r0Ht z7cf_}^BHB1g-08F8=zGEN!8;HdkfTA^ZnwJuZG^jA`?9EIuWUT&m!?7P4261(hjJ4 z&zE76rWX$TxDERe1Uu5cr>h1$E^C_30LMlTAv!r!=|Y{W2&pnx-Lj0%y*?Xq(F#<5 zpE?+-MSjiB3Kyt|iTMGEC&Z>-TRCaEqEaxnJ_MawZfNj;-NS^6N(NYIA6N;ur7;Q^<`+P@l+{4iu-R3^acFZdaQTNAqh9MPmRK zbn%D2tDisuvAiHdC_h@{@`#D)sF`k_z)ea;&R2-3XOYiRs_PlF_0L)x9Y1~>#X}-8 z7p$<8K^FR^BjDQVfsk5C&bR_tMcvc{*qBu3we{5iE!s8O zYNVyrd@EzMXTLYO1stfSP@rq$Wf%aGV_V@GE|S>I|?3Z4c<*AF^0XWOY0YgpgDxE`1@|jinwQeZ9SA z;BF%h86OQ{-|WbDt(cVb2r48C!Up+0`m-)}O^IuO{EZkHA$^2_MkLK8XenYw9MV4+ zhL4>%S#u<-vMUb(%@R_eLKJo*ZiYvX-h_B*s**Qr5P1-~Dx#33=UTN2(l8!+L%+Z_ zghK2gN3Kn$F61O68HVje+G4bnratOyQeD181&KIj4s4>bx?0NI=d=Mt`Yt{GqC%Hz zSRFxc;L$XJXi;gM-9#}=ZrCt4C#M2J^^xIU7@%ee)gO6bXg@Tuo>4O>g$o`>MTme; z2JixKKZ+zG?W#LaYr+vB`9d$j7|xP5VKQqHOBP4hS)@uCP8}AxF=}#wi1i>&0wuCX zjIn8B*fdLbpz&<%1`X2mm*x#G(eIEDAJ2_}Xr!S4$LtOLz5tE(pAV5$;TNUY&)V2z z;sIey?0kyu&b3n0+F=89-%J>NIF%yece($OL)Z?hzSIEaeOgHk3f+wxH%^nJhFm*I zEnHj*Aq@f+#_i8^SOFd&>Df|bsR1cRN`}L18w*Psl)}r8J!B$^kVReh*}N-7<%u-v z3Efin5=LMPAc%lsz1?!IYhsHx+o>F@lA0)3A z9#5r6tC%UTw|MF0^3JX$DpE*tWq<*1waQb!8o=5Zh%+B-qyu87sG~Z?_xK86f)o@& z8xcNvvx@5nd{ttXfTB#1dH_%7Mf(^z=RjwMKW3vC_QXn{pitU_@&V5Xd1=%wBoL&o zK{ix*hU*`l^_OyX1RIKSdmjYnzcJu(IB^UT{rFFGm@Cv4}Vk9bw~?fAdX zFhZ(9C}dvm#nqXM$@Xftw|!1%@tV+3tI3XtSbQn;r<$C#97&w!`T8WOMzQ1~qXPZQ zw!dy!fm>IuQmilD=G)UX&VL)zy52C$$8>G-yQ7xnzQz%6sU~VGwu(HYYSV zBxO{JX}Eckx^-b;*e#~IR;AM=CKlgoi!3SHqIdnrzZi(;r7DM_T*n3%M~RHEbdkt2 z4e2eHa$6g-^;8n9^tl>@BIli$@2@OpEPp-mb47iZ=~T_GUo4T2d9Q~%v@p8V78%mo znBVXZqyvBY*2-_ev5#N<>7jL|wf%C1FC-^vj#8@Hr70tESgnci@D-02f-3wsv^kU7 zM>JQK_xBvO@rOx=YpuGz-`_1Hsn%N5P|}#1*l@s`twAVP=33V8nM-Md=eswSIGr?m z{H*5(0|Wg)(;MFhD~OKgd=3l4@0@lP)~P?Oi+$YulWJ)Z$~l`{0N7q?qh;8^z>{fe z={OkVa5T$E$4=HY$0;p7`6Qm3(5avQ06?nRiDw!%#krqRx8XFA&c-i(d(DbpOjXZk zquLZG*=@aHQ=mqYjTBRL(ewXk0W|bAl8bMM8?s0{)jF?wA)E$hbbNUxYTL}GJS#pE z)cQ2z*)#ZyF5fL(#c!!4<$@^xd!~;&)09{9^%f;A{Bx}8lh#FtbR?tRBP@=WUMfTn z-S%05uI#AhO#5he9{9???5RbQnsjK{^JwH#`MdeTk>6}jG&v8KS4fqq99c|O&ggAXHYLNeN-?pwq9m4f2C z#+I%^f3P(g8jn3X*j3INzpgy(*Yr&Df_j&-w{Y6OkNrET%f}=f)#qpUu1f5jrge^@ z^>wmVIa^eth=Wh*#t|BY|19y`X6rUyK^`r0J<+N$rxx+vD@C2BPIso?N!H1=X~;~m zea{b#r=innda) z=BYoKf5(fmQX(mSNk^Tz&acc?yn~DGn_n>H&$3Tmv)#RKU9bH9ULxi^VHhQba4wOd zEi*UQntRw(J;Q!DA~9vEvFl>a{Lsso%iOzne_xyT@``ZP(~5RpvuPGFoqXk}14#{< zS(E?VzfXISz$upe{WSj5qw#qK{qL_<5*aN_R8+J!H$z2YE-_892HyXC#=xaaQ<%-~ zZa{M(4U5pgBAv2b+R6)fiXus66CV9F{osVe@tZN}qgI{nEmCbownia~i?ut`^ZSd_ zP9#a~R*aZjqU7P>vAM^&@<1r~#RW$d+jW^{9^2&C`bw(h(6|gs8(-CO%H!-1IDW3R zRXB>b`cLi1y?ggHN*n&Bf_mm#a#EBU{s-FRihJ`$cHgvwyoiiULef&Ab?Lq;i=26f zk9&pNpALMTe{$p)-u_wD34=JPbFEDQHzvofN#uCQ6m;5D{~fhAxccRIP&}q&3Lm%s z=i!8{Tfc69inh$T3@y`(7rF7bC$!ESpC;6HHp@po;V6oyP?Yn{+pM_eOoLki`wjsm zbx=Q_EVa>evs7`QYq^76c-&~QM{Qc>+8vkK(GpK zO!ptL=TKby8=Yy?V*7x@aj2tUe+~0vii8(<~}#nCk$} zWIZgq@I`a)3A65JSsaRMY9(^^M-XJ4z~a&@Q>@K`uWw%}o`11bH$U~)pWcl;Hrk2+8!ie0NVV4AA*335yawv{3=vXP!PokxDR2MDN;?0B)2R<15TI_Kyd`j zBpyQtLMx>OZSwU9Its8mmZYZ3HMeom_S=xrq$MMo?raD64q7~~2ISP9Ep;nP(rJ~ z)$(Vki1@ZJHgj?`tAIN>1Zk#%C2Bj2k7r_N;K%;nMVRW7UEDu1N;@n zyxNe^P?wwGNYT0Z`Bl(vqKXpRN+go#32yuN43{o1+WJo?qFlg%2SMYDR;ytQlZMcQ zBjtr?Es9mb;yJtgiAq-QvSht6A4z;Rl=sbOCt+#F4)>M4| z-vA{0{!EPIIrylg37=6^R&EBImo|#Q(Aq%fU(fZkD28~Q#aaf>C}j#c0Eo7ikkv7d zRDb-aijsI>091TReEcyrQ(HDvM39#Byw0ajI9L6}BwGj1nW07SED|-67$DnvQYW(3 z_ZAP2h@tV8vq1K_ZUp_47Gxb#QU~NCT$9s)wjS%&7su6117lEWX!8aGi3V3$Ipk1z zDUJCq3#XTXl`NyN<< zLZYD4FdCV_f$e@+fbo!f4uNcc2=0SGoG9PWWqu5uHegQ(IV~w(_URc`ME$a_l<)G5 zXJO(pk{VSPvNuD)iZ8p>JC|79uh;kO6=$WbO=fw2NW;+3FynJKb!?&?Cy;UkLt<;$ zn5xMOu1dvYY4XW5Bu*m$y|sZSyq+KC?eth)ycZDAOx7%_LZa#W-OneYlf!z=L991h zHv{W}%OQ^IA978pXJX(t<{?{Dz%fP2eiS#47Y?7g;SiLmgig5n7@L6uz^@Q(##nw= zCfsj;OQoPpBE$!ZYz7tk;{GHD92XQ zu%;o2(uLoC|5R^#6rrL~1t!cTNj?eoSc#*aVZ&(uzhvX<{b-Y<|K8iz2iOS1(;b82 z(UY(rG8yom&GiYVr$MT@u8t-}Hjb27v`BGi&U|JPv3d;En910;5*N3=0jtplY!DI^m44)Ban2UQ+djX_#W>`HrtA8-J{{aI zt5z4wcdVYGLC9$4UGB;a^$eT`ObvV>kvY)7zFHWMJ5+<|14glH;Bb8aMJdsq^aPC% zP6J}fzN-ZUiJ)PVe5I`Z;^L)C7QcR!F&}ZV3RwhxMpP02D4Q_79UH7^?i=;{S96k`CCFhsTpwj;zctA z3b0z5Ge2=W0T2p`hgZkSf2|yad;=_GmQxAfR&&JlZ>3vS?ugqqxj;I*qE75sFx08Z z$qyQa9+^iNmev5nOow(l&9o|1;%D(BiK)E%_bWnbq6tNh%j|f@;Tkb{KyXB1F;EPt zneq;OJ1+wGJC3z!;-b`bbRGkO+^t9?IEYOIJ??WM`xRVS&-CAw3wWd58d12ay6MZ! zZSM~$f1Hk1PP*KlD=c4>-#;3)doT zaeg3?9t%CY_9==)60KJY%zjg{UeBK*;uJuAQ&SBpt~X;KO-=rmRYeUSA%DkOU#*|s>qzR3xB{p5g;y2xp#M|do zXgX|{tlnDnvD@LJP^TcZA2m~Dmv*vkmr<(eqz= zTU(wT_p_LsT8P2n2^4=CWP)X5^4UVTHBN(yB8)E;9bF5W^QR%Gb&L`BPrhE3Z{5>bsibbbVE@v!R<6_W9HqZxj;Vjyh4-WPX#AQBl8##rGel1f zRURn$T}He3M=$1EM7_%Ps$VL;7b6lYD=Qy8(R;cq`6pl|ao|)U+`9AuW=+oWWF68j zOE`{=C3q3_2KO5oRbx40D!PD2MISP5=e({D)!bh=7OvO$!g1kBeuW;^PZP2vMWUd9 zRQD-pK2<2kh-w1TKRDSL?OMw|vpWU*saoJzLj^mJzxc`%hX?v3Y#n z({G~(PD;#oNS2CTkS$iAzSFYCUS#A4SLjF={om9ZZYN9H?ZkS;pJ&M~M+u&$oV+K= zUhC!kH}|k*5z63;;*H)F7GDv+shO^7h&|GNn6%(McW=X8)nj(?Y96hbJ2)5RXG=uR z@zGn*W-!a++7N}H6XZ_0I-LP7eF#|p)FWr;xP;(c4erbWCaW}56)SgMj6rxrrM_n= zTOo30Za>e#FMmTKZCdXg7JBI#zvN<4e?@z;g(X-h-t}cUrW`(gA8v8=`m5%2%5Q4M zh7UUu_vf2iT(j}Xi?Xy|Apm#lN`yIS-pSL*b# z%Xz0<%}i!Ub;3a&CW1a6!79*3is$g2Ml{*9YMCzb;OjpZ2>pTjzy;@&icb5=g-$S3 z=bfl+%n#0GZ&%gO-#c|mKq>cER~qiGu;ay~_1dD27rDk{bYk@k4b-!Y^}&il4K%rw zt6EU>`y!h~`?odc+CrkoH(up<-{6-tU&@y{I9p7pW(B-C^;{TP~>zRaq`+!*~meQ5N{6UUwhYZvE! z1UN=KEdYbnI^;V2`<92I%_r*!9$x-0K08M^)MFl0JW8p1u9|zsYJY<@&yl@)eF+RN zJ|?r)o1T=|Hm{SheI2FG$F5o<5s%22`9H>vgB{<}X6IaY-I#hvIFJfxp@y)Q)+5B&1 zShHVybXZ2bDS=bvVq-DJ>Y!-z0nlKo-ArDHd zK|&MJuFb3N^__O_X^6H6d2Nc{!NQX$*<-Gf8VDtLca!C=w3@D6MqtO04HIc+R$iRA zxszNifBR(arOVkjkM1ooDlkud_EN{RPuZVw^UtxU6MNTxNQ>`Cm<_wcdUzCW2t53J z+P?!M>G+=5q`n)f^Ln@V;^Q9m`sZ8TPyKMMO}V^0j&qRY3KG#lXQBm?v)EisA_`}Q zT)2C)H4@7cdA#@L>m|nLo_5y+^`38}NLGWH)|m#$%yq^GwpR(rbY2iWm1KmY2a&k zMCCUrHTlzFtVvTn<}rt2D)+UI-FB5@PDl)($HJe=;mZvffgS0|kGX53q(ai{cj`)g z77B?BNi%3a%sl44Z~wuA%4lq~YP2Mu@6D%SGa~FzKZGl9#`# zz3JwjWNz*JW`BAPMYa59b{-ykm(@`bV$sS>+x=)S4lH}r^@z~<7YS|a+@oON;v|iz z$QRa-kRII{G1=%lKX}`@vNM<~zkOeRn&8w>TUKzo$Vlw-q^oL|-cL41wiUS=#RU$L zQ`uAf3;fPV=K`o_h*!`e^14lx-S>U$**Jy$AfHM10o(@tr94P`-#SW4OBj<{wC82O z^CmRTa2A3=Er_vE=nEsDO8x%0H^u~wk?I#NJR^eiX<#YHiU=bf;LK07<6N7ap<2v^ zlN(W(=EmeeJWInWrb@IA=pAC%y7d`pV6GhKMn~K*96SgoEqt~2B&pxgjhvkQ8kyiQ zvSffo8vYfNkl;HEs;WE%_V)}+G6mvG=EIlnqX#_Gu!M)J#t;JTM3pC*PzovmbPDED z$(+1r$(3_y$5ijm^ao9CC)3_V2DSHTI3yeRDu_7W@T1MGvQBL_V#{ym3s0=9s_b*p z_K~z{cvSZM;{}~Zbq8Ywzl(3{ebs3rZg8+5>Y%mZT%=*aq%hy(#gJ39p&HGmCylps z`(ARA5faETW{vpXs$qWRT-?kG2H>gQ1o@*Qv~qv+P!e;7y{pV4c56gQPM zHCkxe&8;;l)o04fQ(putz+fK9w#Q&$+zD9EL3=|J)P_03fQil#3 zqKF+rGsg5ICP;pv=hW2ENrto%nge;rI?}XSDt39K6Sa`c;#6>3epdVN7YMns$O#8g z2Kh0h&-0MLa414ol>NkNN4UOH) zt=3Mpw<>M&s}6Ii^c71o@LYS8_VSrVU(MA5rLc~~zjXowu@SuTY-wdYeq}rjW1;O1 zRsGjSKfNbM6~(l=zJ5BvYM`=@i8%ylr2$47kD{ab6rt#Hf$O0VG|L3%4QfO~9nOH% zQwH$dt_K`MNc_`5_@u&Up>oMLN45oJejVgldUJDi7EM5nGO#@s`}jRlraMUcCB#JN zOVB)f_92^d?-tUfLE1I5-4qmj@@%^@p~6nA+Clh^y^x{-8<1ptgOCtuU?Rz|TPdD4qHIj}c}S13*Q}#!Z37|<>gab`gjMxP zI=$_=nBDeBPbafHB91Hnxqhh0+FJm9AX)6rHWt)ujjRw-S~pMm35zu(W?xc6-%wMJ zLxF~xVQSF53y$OMXRnnADema9^IBL~?6niq&{a$Qar1&o;O?|0PIViVr`y=*o%C}s zw+3GU<2kj`!Js1uP6v}vOXSNDlFl!H5gWpYQc(>W3MA%@fbeujuy&iFt!w`-QXPFH zzx>-Fats428qp6lW^{os76ThwX6fRXt#BwD9peCx5lyS*^JiUIZMUb~k??c9NaRnJMrW8I&>BeFKH^U_rw zR%y1TRSY?B7dpn5OSuFqbh+lfGkJ$(9alnBb&oXLFBU4P*s{r_DJh3ds^00xy?uj>F7P-dn1?`}n`01hhUh%>HHqVfY2S&$pWgz_6@witPo7+O=) z&@_?84y>XfI3(ADG-xWYzf1(AX)*ort?Q)L6dp?{e);ewqx_4%ltTl2bN(VHYHRg= zHzhdQW%MlJc0d{>F=NC3{(=T=hlG%}%Jq|v7Scs-ObzRYgoRY~IqXl=e90+&Ep2NN z=hE`l5n5l=QkvJFs#|aU69^FLV6|$JxFu~`UfG& zy_Rce3FL%`7KM!8ttIUZ(-uh@1*7x--6tmt6Tcu150B-&iAR3X_zR_7=_z=wvT1Q- zg!=Z0{Hd$eA@mHC>u(RHIf@tB9>b8y)U2%Lv8E@!`9S|q(6}P+#UCp#5yz3Pb1Y%D zGt@a$FDO$F96HI=E;u#AXmPLgKU#pvU4s!v6e^*>bU2;Z&KK6cFX?>>RNFfbh$SCC zT&j6R?uw}jTjY~bCl7`&?SntZ(FY>*JQC&|ZWrF|C%0AXTrm!Hs!f~J-Q3)AO@L5g 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�v-%-KxheLdj3Wvb_}=kWWZ4 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 z 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 literal 0 HcmV?d00001 diff --git a/images/master_screenshot_test.png b/images/master_screenshot_test.png new file mode 100644 index 0000000000000000000000000000000000000000..a658b6c0e2d0ce2471e4cf0afa1829e5646342c1 GIT binary patch literal 2216213 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 ru;;!2hjmd4a1fj. + */ + +#pragma once + +#include +#include +#include "application.hpp" +#include "node_info_holder.hpp" +#include "tags_resources.hpp" + +namespace ui::app_info { + +G_BEGIN_DECLS + +#define EE_TYPE_APP_INFO (app_info_get_type()) + +G_DECLARE_FINAL_TYPE(AppInfo, app_info, EE, APP_INFO, GtkBox) + +G_END_DECLS + +auto create() -> AppInfo*; + +void setup(AppInfo* self, + app::Application* application, + GSettings* settings, + GtkIconTheme* icon_theme, + std::unordered_map& enabled_app_list); + +void update(AppInfo* self, NodeInfo node_info); + +} // namespace ui::app_info diff --git a/include/application.hpp b/include/application.hpp new file mode 100644 index 0000000..07af272 --- /dev/null +++ b/include/application.hpp @@ -0,0 +1,67 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include "pipe_manager.hpp" +#include "preferences_window.hpp" +#include "presets_manager.hpp" +#include "stream_input_effects.hpp" +#include "stream_output_effects.hpp" + +namespace app { + +G_BEGIN_DECLS + +#define EE_TYPE_APPLICATION (application_get_type()) + +G_DECLARE_FINAL_TYPE(Application, application, EE, APP, AdwApplication) + +G_END_DECLS + +struct Data { + public: + std::vector connections; + + std::vector gconnections, gconnections_sie, gconnections_soe; +}; + +struct _Application { + AdwApplication parent_instance; + + GSettings* settings; + GSettings* soe_settings; + GSettings* sie_settings; + + PipeManager* pm; + StreamOutputEffects* soe; + StreamInputEffects* sie; + PresetsManager* presets_manager; + + Data* data; +}; + +auto application_new() -> GApplication*; + +void hide_all_windows(GApplication* app); + +} // namespace app diff --git a/include/application_ui.hpp b/include/application_ui.hpp new file mode 100644 index 0000000..8490266 --- /dev/null +++ b/include/application_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_box.hpp" +#include "pipe_manager_box.hpp" +#include "presets_menu.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::application_window { + +G_BEGIN_DECLS + +#define EE_TYPE_APPLICATION_WINDOW (application_window_get_type()) + +G_DECLARE_FINAL_TYPE(ApplicationWindow, application_window, EE, APP_WINDOW, AdwApplicationWindow) + +G_END_DECLS + +auto create(GApplication* gapp) -> ApplicationWindow*; + +} // namespace ui::application_window diff --git a/include/apps_box.hpp b/include/apps_box.hpp new file mode 100644 index 0000000..d968f73 --- /dev/null +++ b/include/apps_box.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include "app_info.hpp" +#include "application.hpp" +#include "pipeline_type.hpp" +#include "tags_plugin_name.hpp" + +namespace ui::apps_box { + +G_BEGIN_DECLS + +#define EE_TYPE_APPS_BOX (apps_box_get_type()) + +G_DECLARE_FINAL_TYPE(AppsBox, apps_box, EE, APPS_BOX, GtkBox) + +G_END_DECLS + +auto create() -> AppsBox*; + +void setup(AppsBox* self, app::Application* application, PipelineType pipeline_type, GtkIconTheme* icon_theme); + +} // namespace ui::apps_box \ No newline at end of file diff --git a/include/autogain.hpp b/include/autogain.hpp new file mode 100644 index 0000000..f809b6f --- /dev/null +++ b/include/autogain.hpp @@ -0,0 +1,94 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "plugin_base.hpp" + +class AutoGain : public PluginBase { + public: + AutoGain(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + AutoGain(const AutoGain&) = delete; + auto operator=(const AutoGain&) -> AutoGain& = delete; + AutoGain(const AutoGain&&) = delete; + auto operator=(const AutoGain&&) -> AutoGain& = delete; + ~AutoGain() override; + + enum class Reference { + momentary, + shortterm, + integrated, + geometric_mean_msi, + geometric_mean_ms, + geometric_mean_mi, + geometric_mean_si + }; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + sigc::signal + results; // range + + double momentary = 0.0; + double shortterm = 0.0; + double global = 0.0; + double relative = 0.0; + double range = 0.0; + double loudness = 0.0; + + private: + bool ebur128_ready = false; + + uint old_rate = 0U; + + double target = -23.0; // target loudness level + double silence_threshold = -70.0; + double internal_output_gain = 1.0; + + Reference reference = Reference::geometric_mean_msi; + + std::vector data; + + ebur128_state* ebur_state = nullptr; + + std::vector mythreads; + + auto init_ebur128() -> bool; + + static auto parse_reference_key(const std::string& key) -> Reference; + + void set_maximum_history(const int& seconds); +}; diff --git a/include/autogain_preset.hpp b/include/autogain_preset.hpp new file mode 100644 index 0000000..fc29cb1 --- /dev/null +++ b/include/autogain_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class AutoGainPreset : public PluginPresetBase { + public: + explicit AutoGainPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/autogain_ui.hpp b/include/autogain_ui.hpp new file mode 100644 index 0000000..5dd4572 --- /dev/null +++ b/include/autogain_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::autogain_box { + +G_BEGIN_DECLS + +#define EE_TYPE_AUTOGAIN_BOX (autogain_box_get_type()) + +G_DECLARE_FINAL_TYPE(AutogainBox, autogain_box, EE, AUTOGAIN_BOX, GtkBox) + +G_END_DECLS + +auto create() -> AutogainBox*; + +void setup(AutogainBox* self, std::shared_ptr autogain, const std::string& schema_path); + +} // namespace ui::autogain_box diff --git a/include/bass_enhancer.hpp b/include/bass_enhancer.hpp new file mode 100644 index 0000000..bf55922 --- /dev/null +++ b/include/bass_enhancer.hpp @@ -0,0 +1,50 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class BassEnhancer : public PluginBase { + public: + BassEnhancer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + BassEnhancer(const BassEnhancer&) = delete; + auto operator=(const BassEnhancer&) -> BassEnhancer& = delete; + BassEnhancer(const BassEnhancer&&) = delete; + auto operator=(const BassEnhancer&&) -> BassEnhancer& = delete; + ~BassEnhancer() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + sigc::signal harmonics; + + double harmonics_port_value = 0.0; + + private: +}; diff --git a/include/bass_enhancer_preset.hpp b/include/bass_enhancer_preset.hpp new file mode 100644 index 0000000..428ac02 --- /dev/null +++ b/include/bass_enhancer_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class BassEnhancerPreset : public PluginPresetBase { + public: + explicit BassEnhancerPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/bass_enhancer_ui.hpp b/include/bass_enhancer_ui.hpp new file mode 100644 index 0000000..95ebe70 --- /dev/null +++ b/include/bass_enhancer_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::bass_enhancer_box { + +G_BEGIN_DECLS + +#define EE_TYPE_BASS_ENHANCER_BOX (bass_enhancer_box_get_type()) + +G_DECLARE_FINAL_TYPE(BassEnhancerBox, bass_enhancer_box, EE, BASS_ENHANCER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> BassEnhancerBox*; + +void setup(BassEnhancerBox* self, std::shared_ptr bass_enhancer, const std::string& schema_path); + +} // namespace ui::bass_enhancer_box diff --git a/include/bass_loudness.hpp b/include/bass_loudness.hpp new file mode 100644 index 0000000..f3548b7 --- /dev/null +++ b/include/bass_loudness.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class BassLoudness : public PluginBase { + public: + BassLoudness(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + BassLoudness(const BassLoudness&) = delete; + auto operator=(const BassLoudness&) -> BassLoudness& = delete; + BassLoudness(const BassLoudness&&) = delete; + auto operator=(const BassLoudness&&) -> BassLoudness& = delete; + ~BassLoudness() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: +}; diff --git a/include/bass_loudness_preset.hpp b/include/bass_loudness_preset.hpp new file mode 100644 index 0000000..10e22b7 --- /dev/null +++ b/include/bass_loudness_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class BassLoudnessPreset : public PluginPresetBase { + public: + explicit BassLoudnessPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/bass_loudness_ui.hpp b/include/bass_loudness_ui.hpp new file mode 100644 index 0000000..081fa8c --- /dev/null +++ b/include/bass_loudness_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::bass_loudness_box { + +G_BEGIN_DECLS + +#define EE_TYPE_BASS_LOUDNESS_BOX (bass_loudness_box_get_type()) + +G_DECLARE_FINAL_TYPE(BassLoudnessBox, bass_loudness_box, EE, BASS_LOUDNESS_BOX, GtkBox) + +G_END_DECLS + +auto create() -> BassLoudnessBox*; + +void setup(BassLoudnessBox* self, std::shared_ptr bass_loudness, const std::string& schema_path); + +} // namespace ui::bass_loudness_box diff --git a/include/blocklist_menu.hpp b/include/blocklist_menu.hpp new file mode 100644 index 0000000..54ec6fb --- /dev/null +++ b/include/blocklist_menu.hpp @@ -0,0 +1,42 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "application.hpp" +#include "pipeline_type.hpp" +#include "tags_resources.hpp" + +namespace ui::blocklist_menu { + +G_BEGIN_DECLS + +#define EE_TYPE_BLOCKLIST_MENU (blocklist_menu_get_type()) + +G_DECLARE_FINAL_TYPE(BlocklistMenu, blocklist_menu, EE, BLOCKLIST_MENU, GtkPopover) + +G_END_DECLS + +auto create() -> BlocklistMenu*; + +void setup(BlocklistMenu* self, app::Application* application, PipelineType pipeline_type); + +} // namespace ui::blocklist_menu diff --git a/include/chart.hpp b/include/chart.hpp new file mode 100644 index 0000000..ef67a3d --- /dev/null +++ b/include/chart.hpp @@ -0,0 +1,88 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#define FMT_HEADER_ONLY +#include +#include +#include +#include +#include +#include +#include +#include "tags_app.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" +#include "util.hpp" + +namespace ui::chart { + +G_BEGIN_DECLS + +#define EE_TYPE_CHART (chart_get_type()) + +G_DECLARE_FINAL_TYPE(Chart, chart, EE, CHART, GtkWidget) + +G_END_DECLS + +enum class ChartType { bar, line, dots }; + +enum class ChartScale { linear, logarithmic }; + +void set_chart_type(Chart* self, const ChartType& value); + +void set_chart_scale(Chart* self, const ChartScale& value); + +void set_x_data(Chart* self, const std::vector& x); + +void set_y_data(Chart* self, const std::vector& y); + +void set_background_color(Chart* self, GdkRGBA color); + +void set_color(Chart* self, GdkRGBA color); + +void set_axis_labels_color(Chart* self, GdkRGBA color); + +void set_line_width(Chart* self, const float& value); + +void set_draw_bar_border(Chart* self, const bool& v); + +void set_rounded_corners(Chart* self, const bool& v); + +void set_fill_bars(Chart* self, const bool& v); + +void set_n_x_decimals(Chart* self, const int& v); + +void set_n_y_decimals(Chart* self, const int& v); + +void set_x_unit(Chart* self, const std::string& value); + +void set_y_unit(Chart* self, const std::string& value); + +void set_margin(Chart* self, const float& v); + +auto get_is_visible(Chart* self) -> bool; + +void set_dynamic_y_scale(Chart* self, const bool& v); + +auto create() -> Chart*; + +} // namespace ui::chart diff --git a/include/client_info_holder.hpp b/include/client_info_holder.hpp new file mode 100644 index 0000000..5b14947 --- /dev/null +++ b/include/client_info_holder.hpp @@ -0,0 +1,45 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "pipe_manager.hpp" + +namespace ui::holders { + +G_BEGIN_DECLS + +#define EE_TYPE_CLIENT_INFO_HOLDER (client_info_holder_get_type()) + +G_DECLARE_FINAL_TYPE(ClientInfoHolder, client_info_holder, EE, CLIENT_INFO_HOLDER, GObject) + +G_END_DECLS + +struct _ClientInfoHolder { + GObject parent_instance; + + ClientInfo* info; + + sigc::signal info_updated; +}; + +auto create(const ClientInfo& info) -> ClientInfoHolder*; + +} // namespace ui::holders \ No newline at end of file diff --git a/include/compressor.hpp b/include/compressor.hpp new file mode 100644 index 0000000..298c022 --- /dev/null +++ b/include/compressor.hpp @@ -0,0 +1,62 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Compressor : public PluginBase { + public: + Compressor(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Compressor(const Compressor&) = delete; + auto operator=(const Compressor&) -> Compressor& = delete; + Compressor(const Compressor&&) = delete; + auto operator=(const Compressor&&) -> Compressor& = delete; + ~Compressor() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) override; + + auto get_latency_seconds() -> float override; + + void update_probe_links() override; + + sigc::signal reduction, sidechain, curve, envelope; + + float reduction_port_value = 0.0F; + float sidechain_port_value = 0.0F; + float curve_port_value = 0.0F; + float envelope_port_value = 0.0F; + + private: + uint latency_n_frames = 0U; + + std::vector list_proxies; + + void update_sidechain_links(const std::string& key); +}; diff --git a/include/compressor_preset.hpp b/include/compressor_preset.hpp new file mode 100644 index 0000000..0ab776e --- /dev/null +++ b/include/compressor_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class CompressorPreset : public PluginPresetBase { + public: + explicit CompressorPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/compressor_ui.hpp b/include/compressor_ui.hpp new file mode 100644 index 0000000..c8341c7 --- /dev/null +++ b/include/compressor_ui.hpp @@ -0,0 +1,45 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "node_info_holder.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::compressor_box { + +G_BEGIN_DECLS + +#define EE_TYPE_COMPRESSOR_BOX (compressor_box_get_type()) + +G_DECLARE_FINAL_TYPE(CompressorBox, compressor_box, EE, COMPRESSOR_BOX, GtkBox) + +G_END_DECLS + +auto create() -> CompressorBox*; + +void setup(CompressorBox* self, + std::shared_ptr compressor, + const std::string& schema_path, + PipeManager* pm); + +} // namespace ui::compressor_box diff --git a/include/convolver.hpp b/include/convolver.hpp new file mode 100644 index 0000000..6d48f67 --- /dev/null +++ b/include/convolver.hpp @@ -0,0 +1,109 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include "plugin_base.hpp" +#include "resampler.hpp" + +class Convolver : public PluginBase { + public: + Convolver(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Convolver(const Convolver&) = delete; + auto operator=(const Convolver&) -> Convolver& = delete; + Convolver(const Convolver&&) = delete; + auto operator=(const Convolver&&) -> Convolver& = delete; + ~Convolver() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + bool do_autogain = false; + + private: + bool kernel_is_initialized = false; + bool n_samples_is_power_of_2 = true; + bool zita_ready = false; + bool ready = false; + bool notify_latency = false; + + uint blocksize = 512U; + uint ir_width = 100U; + uint latency_n_frames = 0U; + + std::vector kernel_L, kernel_R; + std::vector original_kernel_L, original_kernel_R; + std::vector data_L, data_R; + + std::deque deque_out_L, deque_out_R; + + Convproc* conv = nullptr; + + std::vector mythreads; + + void read_kernel_file(); + + void apply_kernel_autogain(); + + void set_kernel_stereo_width(); + + void setup_zita(); + + auto get_zita_buffer_size() -> uint; + + void prepare_kernel(); + + template + void do_convolution(T1& data_left, T1& data_right) { + std::span conv_left_in(conv->inpdata(0), get_zita_buffer_size()); + std::span conv_right_in(conv->inpdata(1), get_zita_buffer_size()); + + std::span conv_left_out(conv->outdata(0), get_zita_buffer_size()); + std::span conv_right_out(conv->outdata(1), get_zita_buffer_size()); + + std::copy(data_left.begin(), data_left.end(), conv_left_in.begin()); + std::copy(data_right.begin(), data_right.end(), conv_right_in.begin()); + + if (zita_ready) { + const int& ret = conv->process(true); // thread sync mode set to true + + if (ret != 0) { + util::debug(log_tag + "IR: process failed: " + util::to_string(ret, "")); + + zita_ready = false; + } else { + std::copy(conv_left_out.begin(), conv_left_out.end(), data_left.begin()); + std::copy(conv_right_out.begin(), conv_right_out.end(), data_right.begin()); + } + } + } +}; diff --git a/include/convolver_menu_combine.hpp b/include/convolver_menu_combine.hpp new file mode 100644 index 0000000..a15f3eb --- /dev/null +++ b/include/convolver_menu_combine.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include "convolver_ui_common.hpp" +#include "resampler.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::convolver_menu_combine { + +G_BEGIN_DECLS + +#define EE_TYPE_CONVOLVER_MENU_COMBINE (convolver_menu_combine_get_type()) + +G_DECLARE_FINAL_TYPE(ConvolverMenuCombine, convolver_menu_combine, EE, CONVOLVER_MENU_COMBINE, GtkPopover) + +G_END_DECLS + +auto create() -> ConvolverMenuCombine*; + +void append_to_string_list(ConvolverMenuCombine* self, const std::string& irs_filename); + +void remove_from_string_list(ConvolverMenuCombine* self, const std::string& irs_filename); + +} // namespace ui::convolver_menu_combine diff --git a/include/convolver_menu_impulses.hpp b/include/convolver_menu_impulses.hpp new file mode 100644 index 0000000..810b452 --- /dev/null +++ b/include/convolver_menu_impulses.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include "application.hpp" +#include "ui_helpers.hpp" + +namespace ui::convolver_menu_impulses { + +G_BEGIN_DECLS + +#define EE_TYPE_CONVOLVER_MENU_IMPULSES (convolver_menu_impulses_get_type()) + +G_DECLARE_FINAL_TYPE(ConvolverMenuImpulses, convolver_menu_impulses, EE, CONVOLVER_MENU_IMPULSES, GtkPopover) + +G_END_DECLS + +auto create() -> ConvolverMenuImpulses*; + +void setup(ConvolverMenuImpulses* self, const std::string& schema_path, app::Application* application); + +void append_to_string_list(ConvolverMenuImpulses* self, const std::string& irs_filename); + +void remove_from_string_list(ConvolverMenuImpulses* self, const std::string& irs_filename); + +} // namespace ui::convolver_menu_impulses diff --git a/include/convolver_preset.hpp b/include/convolver_preset.hpp new file mode 100644 index 0000000..8173473 --- /dev/null +++ b/include/convolver_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class ConvolverPreset : public PluginPresetBase { + public: + explicit ConvolverPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/convolver_ui.hpp b/include/convolver_ui.hpp new file mode 100644 index 0000000..319eda2 --- /dev/null +++ b/include/convolver_ui.hpp @@ -0,0 +1,54 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include "application.hpp" +#include "chart.hpp" +#include "convolver_menu_combine.hpp" +#include "convolver_menu_impulses.hpp" +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::convolver_box { + +G_BEGIN_DECLS + +#define EE_TYPE_CONVOLVER_BOX (convolver_box_get_type()) + +G_DECLARE_FINAL_TYPE(ConvolverBox, convolver_box, EE, CONVOLVER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> ConvolverBox*; + +void setup(ConvolverBox* self, + std::shared_ptr convolver, + const std::string& schema_path, + app::Application* application); + +} // namespace ui::convolver_box diff --git a/include/convolver_ui_common.hpp b/include/convolver_ui_common.hpp new file mode 100644 index 0000000..3be0a9a --- /dev/null +++ b/include/convolver_ui_common.hpp @@ -0,0 +1,31 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "util.hpp" + +namespace ui::convolver { + +auto read_kernel(std::filesystem::path irs_dir, const std::string& irs_ext, const std::string& file_name) + -> std::tuple, std::vector>; + +} \ No newline at end of file diff --git a/include/crossfeed.hpp b/include/crossfeed.hpp new file mode 100644 index 0000000..3e57797 --- /dev/null +++ b/include/crossfeed.hpp @@ -0,0 +1,50 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "plugin_base.hpp" + +class Crossfeed : public PluginBase { + public: + Crossfeed(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Crossfeed(const Crossfeed&) = delete; + auto operator=(const Crossfeed&) -> Crossfeed& = delete; + Crossfeed(const Crossfeed&&) = delete; + auto operator=(const Crossfeed&&) -> Crossfeed& = delete; + ~Crossfeed() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: + std::vector data; + + bs2b_base bs2b; +}; diff --git a/include/crossfeed_preset.hpp b/include/crossfeed_preset.hpp new file mode 100644 index 0000000..58ff66c --- /dev/null +++ b/include/crossfeed_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class CrossfeedPreset : public PluginPresetBase { + public: + explicit CrossfeedPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/crossfeed_ui.hpp b/include/crossfeed_ui.hpp new file mode 100644 index 0000000..c98219f --- /dev/null +++ b/include/crossfeed_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::crossfeed_box { + +G_BEGIN_DECLS + +#define EE_TYPE_CROSSFEED_BOX (crossfeed_box_get_type()) + +G_DECLARE_FINAL_TYPE(CrossfeedBox, crossfeed_box, EE, CROSSFEED_BOX, GtkBox) + +G_END_DECLS + +auto create() -> CrossfeedBox*; + +void setup(CrossfeedBox* self, std::shared_ptr crossfeed, const std::string& schema_path); + +} // namespace ui::crossfeed_box diff --git a/include/crystalizer.hpp b/include/crystalizer.hpp new file mode 100644 index 0000000..fb6161c --- /dev/null +++ b/include/crystalizer.hpp @@ -0,0 +1,212 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "fir_filter_bandpass.hpp" +#include "fir_filter_highpass.hpp" +#include "fir_filter_lowpass.hpp" +#include "plugin_base.hpp" + +class Crystalizer : public PluginBase { + public: + Crystalizer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Crystalizer(const Crystalizer&) = delete; + auto operator=(const Crystalizer&) -> Crystalizer& = delete; + Crystalizer(const Crystalizer&&) = delete; + auto operator=(const Crystalizer&&) -> Crystalizer& = delete; + ~Crystalizer() override; + + auto get_latency() const -> float; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: + bool n_samples_is_power_of_2 = true; + bool filters_are_ready = false; + bool notify_latency = false; + bool do_first_rotation = true; + + uint blocksize = 512U; + uint latency_n_frames = 0U; + + static constexpr uint nbands = 13U; + + std::vector data_L; + std::vector data_R; + + std::array band_mute; + std::array band_bypass; + + std::array frequencies; + std::array band_intensity; + std::array band_last_L; + std::array band_last_R; + std::array band_next_L; + std::array band_next_R; + + std::array, nbands> band_data_L; + std::array, nbands> band_data_R; + std::array, nbands> band_gain; + std::array, nbands> band_second_derivative_L; + std::array, nbands> band_second_derivative_R; + + std::array, nbands> filters; + + std::deque deque_out_L, deque_out_R; + + void bind_band(const int& n); + + template + void enhance_peaks(T1& data_left, T1& data_right) { + for (uint n = 0U; n < nbands; n++) { + std::copy(data_left.begin(), data_left.end(), band_data_L.at(n).begin()); + std::copy(data_right.begin(), data_right.end(), band_data_R.at(n).begin()); + + filters.at(n)->process(band_data_L.at(n), band_data_R.at(n)); + + /* + Later we will need to calculate the second derivative of each band. This + is done through the central difference method. In order to calculate + the derivative at the last elements of the array we have to know the first + element of the next buffer. As we do not have this information the only + way to do this calculation is delaying the signal by 1 sample. + */ + + // last (R,L) becomes the first + + std::rotate(band_data_L.at(n).rbegin(), band_data_L.at(n).rbegin() + 1, band_data_L.at(n).rend()); + std::rotate(band_data_R.at(n).rbegin(), band_data_R.at(n).rbegin() + 1, band_data_R.at(n).rend()); + + if (do_first_rotation) { + /* + band_data was rotated. Its first values are the last ones from the original array. we have to save them for + the next round. + */ + + band_next_L.at(n) = band_data_L.at(n)[0]; + band_next_R.at(n) = band_data_R.at(n)[0]; + + band_last_L.at(n) = 0.0F; + band_last_R.at(n) = 0.0F; + + band_data_L.at(n)[0] = 0.0F; + band_data_R.at(n)[0] = 0.0F; + + do_first_rotation = false; + } else { + /* + band_data was rotated. Its first values are the last ones from the original array. we have to save them for + the next round. + */ + + const float L = band_data_L.at(n)[0]; + const float R = band_data_R.at(n)[0]; + + band_data_L.at(n)[0] = band_next_L.at(n); + band_data_R.at(n)[0] = band_next_R.at(n); + + band_next_L.at(n) = L; + band_next_R.at(n) = R; + } + } + + for (uint n = 0U; n < nbands; n++) { + // Calculating the second derivative + + if (!band_bypass.at(n)) { + for (uint m = 0U; m < blocksize; m++) { + const float L = band_data_L.at(n)[m]; + const float R = band_data_R.at(n)[m]; + + if (m > 0 && m < blocksize - 1) { + const float& L_lower = band_data_L.at(n)[m - 1U]; + const float& R_lower = band_data_R.at(n)[m - 1U]; + const float& L_upper = band_data_L.at(n)[m + 1U]; + const float& R_upper = band_data_R.at(n)[m + 1U]; + + band_second_derivative_L.at(n)[m] = L_upper - 2.0F * L + L_lower; + band_second_derivative_R.at(n)[m] = R_upper - 2.0F * R + R_lower; + } else if (m == 0U) { + const float& L_lower = band_last_L.at(n); + const float& R_lower = band_last_R.at(n); + const float& L_upper = band_data_L.at(n)[m + 1]; + const float& R_upper = band_data_R.at(n)[m + 1]; + + band_second_derivative_L.at(n)[m] = L_upper - 2.0F * L + L_lower; + band_second_derivative_R.at(n)[m] = R_upper - 2.0F * R + R_lower; + } else if (m == blocksize - 1) { + const float& L_upper = band_next_L.at(n); + const float& R_upper = band_next_R.at(n); + const float& L_lower = band_data_L.at(n)[m - 1U]; + const float& R_lower = band_data_R.at(n)[m - 1U]; + + band_second_derivative_L.at(n)[m] = L_upper - 2.0F * L + L_lower; + band_second_derivative_R.at(n)[m] = R_upper - 2.0F * R + R_lower; + } + } + + // peak enhancing using second derivative + + for (uint m = 0U; m < blocksize; m++) { + const float L = band_data_L.at(n)[m]; + const float R = band_data_R.at(n)[m]; + const float& d2L = band_second_derivative_L.at(n)[m]; + const float& d2R = band_second_derivative_R.at(n)[m]; + + band_data_L.at(n)[m] = L - band_intensity.at(n) * d2L; + band_data_R.at(n)[m] = R - band_intensity.at(n) * d2R; + + if (m == blocksize - 1U) { + band_last_L.at(n) = L; + band_last_R.at(n) = R; + } + } + } else { + band_last_L.at(n) = band_data_L.at(n)[blocksize - 1]; + band_last_R.at(n) = band_data_R.at(n)[blocksize - 1]; + } + } + + // add bands + + for (uint m = 0U; m < blocksize; m++) { + data_left[m] = 0.0F; + data_right[m] = 0.0F; + + for (uint n = 0U; n < nbands; n++) { + if (!band_mute.at(n)) { + data_left[m] += band_data_L.at(n)[m]; + data_right[m] += band_data_R.at(n)[m]; + } + } + } + } +}; diff --git a/include/crystalizer_preset.hpp b/include/crystalizer_preset.hpp new file mode 100644 index 0000000..27534d9 --- /dev/null +++ b/include/crystalizer_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class CrystalizerPreset : public PluginPresetBase { + public: + explicit CrystalizerPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/crystalizer_ui.hpp b/include/crystalizer_ui.hpp new file mode 100644 index 0000000..1c99f91 --- /dev/null +++ b/include/crystalizer_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::crystalizer_box { + +G_BEGIN_DECLS + +#define EE_TYPE_CRYSTALIZER_BOX (crystalizer_box_get_type()) + +G_DECLARE_FINAL_TYPE(CrystalizerBox, crystalizer_box, EE, CRYSTALIZER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> CrystalizerBox*; + +void setup(CrystalizerBox* self, std::shared_ptr crystalizer, const std::string& schema_path); + +} // namespace ui::crystalizer_box diff --git a/include/deepfilternet.hpp b/include/deepfilternet.hpp new file mode 100644 index 0000000..079eb1c --- /dev/null +++ b/include/deepfilternet.hpp @@ -0,0 +1,58 @@ +/* + * Copyright © 2023 Torge Matthies + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "ladspa_wrapper.hpp" +#include "plugin_base.hpp" +#include "resampler.hpp" + +class DeepFilterNet : public PluginBase { + public: + DeepFilterNet(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + DeepFilterNet(const DeepFilterNet&) = delete; + auto operator=(const DeepFilterNet&) -> DeepFilterNet& = delete; + DeepFilterNet(const DeepFilterNet&&) = delete; + auto operator=(const DeepFilterNet&&) -> DeepFilterNet& = delete; + ~DeepFilterNet() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: + std::unique_ptr ladspa_wrapper; + + bool resample = false; + bool resampler_ready = true; + + std::unique_ptr resampler_inL, resampler_outL; + std::unique_ptr resampler_inR, resampler_outR; + + std::vector resampled_outL, resampled_outR; + std::vector carryover_l, carryover_r; +}; diff --git a/include/deepfilternet_preset.hpp b/include/deepfilternet_preset.hpp new file mode 100644 index 0000000..18ebd7e --- /dev/null +++ b/include/deepfilternet_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2023 Torge Matthies + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class DeepFilterNetPreset : public PluginPresetBase { + public: + explicit DeepFilterNetPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/deepfilternet_ui.hpp b/include/deepfilternet_ui.hpp new file mode 100644 index 0000000..85c6a8a --- /dev/null +++ b/include/deepfilternet_ui.hpp @@ -0,0 +1,42 @@ +/* + * Copyright © 2023 Torge Matthies + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "deepfilternet.hpp" +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::deepfilternet_box { + +G_BEGIN_DECLS + +#define EE_TYPE_DEEPFILTERNET_BOX (deepfilternet_box_get_type()) + +G_DECLARE_FINAL_TYPE(DeepFilterNetBox, deepfilternet_box, EE, DEEPFILTERNET_BOX, GtkBox) + +G_END_DECLS + +auto create() -> DeepFilterNetBox*; + +void setup(DeepFilterNetBox* self, std::shared_ptr deepfilternet, const std::string& schema_path); + +} // namespace ui::deepfilternet_box diff --git a/include/deesser.hpp b/include/deesser.hpp new file mode 100644 index 0000000..8eaf7a9 --- /dev/null +++ b/include/deesser.hpp @@ -0,0 +1,48 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Deesser : public PluginBase { + public: + Deesser(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Deesser(const Deesser&) = delete; + auto operator=(const Deesser&) -> Deesser& = delete; + Deesser(const Deesser&&) = delete; + auto operator=(const Deesser&&) -> Deesser& = delete; + ~Deesser() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + sigc::signal compression, detected; + + double compression_port_value = 0.0; + double detected_port_value = 0.0; + + private: +}; diff --git a/include/deesser_preset.hpp b/include/deesser_preset.hpp new file mode 100644 index 0000000..f82b0b1 --- /dev/null +++ b/include/deesser_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class DeesserPreset : public PluginPresetBase { + public: + explicit DeesserPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/deesser_ui.hpp b/include/deesser_ui.hpp new file mode 100644 index 0000000..d48bad0 --- /dev/null +++ b/include/deesser_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::deesser_box { + +G_BEGIN_DECLS + +#define EE_TYPE_DEESSER_BOX (deesser_box_get_type()) + +G_DECLARE_FINAL_TYPE(DeesserBox, deesser_box, EE, DEESSER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> DeesserBox*; + +void setup(DeesserBox* self, std::shared_ptr deesser, const std::string& schema_path); + +} // namespace ui::deesser_box diff --git a/include/delay.hpp b/include/delay.hpp new file mode 100644 index 0000000..6612ac3 --- /dev/null +++ b/include/delay.hpp @@ -0,0 +1,44 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Delay : public PluginBase { + public: + Delay(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Delay(const Delay&) = delete; + auto operator=(const Delay&) -> Delay& = delete; + Delay(const Delay&&) = delete; + auto operator=(const Delay&&) -> Delay& = delete; + ~Delay() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: + uint latency_n_frames = 0U; +}; diff --git a/include/delay_preset.hpp b/include/delay_preset.hpp new file mode 100644 index 0000000..7e54007 --- /dev/null +++ b/include/delay_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class DelayPreset : public PluginPresetBase { + public: + explicit DelayPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/delay_ui.hpp b/include/delay_ui.hpp new file mode 100644 index 0000000..7f78857 --- /dev/null +++ b/include/delay_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::delay_box { + +G_BEGIN_DECLS + +#define EE_TYPE_DELAY_BOX (delay_box_get_type()) + +G_DECLARE_FINAL_TYPE(DelayBox, delay_box, EE, DELAY_BOX, GtkBox) + +G_END_DECLS + +auto create() -> DelayBox*; + +void setup(DelayBox* self, std::shared_ptr delay, const std::string& schema_path); + +} // namespace ui::delay_box diff --git a/include/echo_canceller.hpp b/include/echo_canceller.hpp new file mode 100644 index 0000000..b3f5175 --- /dev/null +++ b/include/echo_canceller.hpp @@ -0,0 +1,78 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include "plugin_base.hpp" + +#include + +class EchoCanceller : public PluginBase { + public: + EchoCanceller(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + EchoCanceller(const EchoCanceller&) = delete; + auto operator=(const EchoCanceller&) -> EchoCanceller& = delete; + EchoCanceller(const EchoCanceller&&) = delete; + auto operator=(const EchoCanceller&&) -> EchoCanceller& = delete; + ~EchoCanceller() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) override; + + auto get_latency_seconds() -> float override; + + private: + bool notify_latency = false; + bool ready = false; + + uint filter_length_ms = 100U; + uint latency_n_frames = 0U; + + int residual_echo_suppression = -10; + int near_end_suppression = -10; + + const float inv_short_max = 1.0F / (SHRT_MAX + 1.0F); + + std::vector data_L; + std::vector data_R; + std::vector probe_mono; + std::vector filtered_L; + std::vector filtered_R; + + SpeexEchoState* echo_state_L = nullptr; + SpeexEchoState* echo_state_R = nullptr; + + SpeexPreprocessState *state_left = nullptr, *state_right = nullptr; + + void free_speex(); + + void init_speex(); +}; diff --git a/include/echo_canceller_preset.hpp b/include/echo_canceller_preset.hpp new file mode 100644 index 0000000..d0ea12c --- /dev/null +++ b/include/echo_canceller_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class EchoCancellerPreset : public PluginPresetBase { + public: + explicit EchoCancellerPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/echo_canceller_ui.hpp b/include/echo_canceller_ui.hpp new file mode 100644 index 0000000..bbdf58e --- /dev/null +++ b/include/echo_canceller_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::echo_canceller_box { + +G_BEGIN_DECLS + +#define EE_TYPE_ECHO_CANCELLER_BOX (echo_canceller_box_get_type()) + +G_DECLARE_FINAL_TYPE(EchoCancellerBox, echo_canceller_box, EE, ECHO_CANCELLER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> EchoCancellerBox*; + +void setup(EchoCancellerBox* self, std::shared_ptr echo_canceller, const std::string& schema_path); + +} // namespace ui::echo_canceller_box diff --git a/include/effects_base.hpp b/include/effects_base.hpp new file mode 100644 index 0000000..3c9b30f --- /dev/null +++ b/include/effects_base.hpp @@ -0,0 +1,131 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "autogain.hpp" +#include "bass_enhancer.hpp" +#include "bass_loudness.hpp" +#include "compressor.hpp" +#include "convolver.hpp" +#include "crossfeed.hpp" +#include "crystalizer.hpp" +#include "deepfilternet.hpp" +#include "deesser.hpp" +#include "delay.hpp" +#include "echo_canceller.hpp" +#include "equalizer.hpp" +#include "exciter.hpp" +#include "expander.hpp" +#include "filter.hpp" +#include "gate.hpp" +#include "level_meter.hpp" +#include "limiter.hpp" +#include "loudness.hpp" +#include "maximizer.hpp" +#include "multiband_compressor.hpp" +#include "multiband_gate.hpp" +#include "output_level.hpp" +#include "pipe_manager.hpp" +#include "pitch.hpp" +#include "reverb.hpp" +#include "rnnoise.hpp" +#include "spectrum.hpp" +#include "speex.hpp" +#include "stereo_tools.hpp" +#include "tags_schema.hpp" + +class EffectsBase { + public: + EffectsBase(std::string tag, const std::string& schema, PipeManager* pipe_manager); + EffectsBase(const EffectsBase&) = delete; + auto operator=(const EffectsBase&) -> EffectsBase& = delete; + EffectsBase(const EffectsBase&&) = delete; + auto operator=(const EffectsBase&&) -> EffectsBase& = delete; + virtual ~EffectsBase(); + + const std::string log_tag; + + PipeManager* pm = nullptr; + + std::shared_ptr output_level; + std::shared_ptr spectrum; + + std::shared_ptr autogain; + std::shared_ptr bass_enhancer; + std::shared_ptr bass_loudness; + std::shared_ptr compressor; + std::shared_ptr convolver; + std::shared_ptr crossfeed; + std::shared_ptr crystalizer; + std::shared_ptr deepfilternet; + std::shared_ptr deesser; + std::shared_ptr delay; + std::shared_ptr echo_canceller; + std::shared_ptr equalizer; + std::shared_ptr exciter; + std::shared_ptr expander; + std::shared_ptr filter; + std::shared_ptr gate; + std::shared_ptr limiter; + std::shared_ptr loudness; + std::shared_ptr maximizer; + std::shared_ptr multiband_compressor; + std::shared_ptr multiband_gate; + std::shared_ptr pitch; + std::shared_ptr reverb; + std::shared_ptr rnnoise; + std::shared_ptr speex; + std::shared_ptr stereo_tools; + + auto get_pipeline_latency() -> float; + + void reset_settings(); + + sigc::signal pipeline_latency; + + template + auto get_plugin_instance(const std::string& name) -> std::shared_ptr { + return std::dynamic_pointer_cast(plugins[name]); + } + + protected: + GSettings *settings = nullptr, *global_settings = nullptr; + + std::string schema_base_path; + + std::map> plugins; + + std::vector list_proxies, list_proxies_listen_mic; + + std::vector connections; + + std::vector gconnections, gconnections_global; + + void create_filters_if_necessary(); + + void remove_unused_filters(); + + void activate_filters(); + + void deactivate_filters(); + + void broadcast_pipeline_latency(); +}; diff --git a/include/effects_box.hpp b/include/effects_box.hpp new file mode 100644 index 0000000..e2ec6b3 --- /dev/null +++ b/include/effects_box.hpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "application.hpp" +#include "apps_box.hpp" +#include "blocklist_menu.hpp" +#include "chart.hpp" +#include "effects_base.hpp" +#include "pipeline_type.hpp" +#include "plugins_box.hpp" +#include "tags_resources.hpp" + +namespace ui::effects_box { + +G_BEGIN_DECLS + +#define EE_TYPE_EFFECTS_BOX (effects_box_get_type()) + +G_DECLARE_FINAL_TYPE(EffectsBox, effects_box, EE, EFFECTS_BOX, GtkBox) + +G_END_DECLS + +auto create() -> EffectsBox*; + +void setup(EffectsBox* self, app::Application* application, PipelineType pipeline_type, GtkIconTheme* icon_theme); + +} // namespace ui::effects_box \ No newline at end of file diff --git a/include/equalizer.hpp b/include/equalizer.hpp new file mode 100644 index 0000000..be1b510 --- /dev/null +++ b/include/equalizer.hpp @@ -0,0 +1,102 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "plugin_base.hpp" +#include "tags_equalizer.hpp" + +class Equalizer : public PluginBase { + public: + Equalizer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + const std::string& schema_channel, + const std::string& schema_channel_left_path, + const std::string& schema_channel_right_path, + PipeManager* pipe_manager); + Equalizer(const Equalizer&) = delete; + auto operator=(const Equalizer&) -> Equalizer& = delete; + Equalizer(const Equalizer&&) = delete; + auto operator=(const Equalizer&&) -> Equalizer& = delete; + ~Equalizer() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + void sort_bands(); + + static constexpr uint max_bands = 32U; + + private: + GSettings *settings_left = nullptr, *settings_right = nullptr; + + uint latency_n_frames = 0U; + + std::vector gconnections_unified; + + template + constexpr void bind_band() { + using namespace tags::equalizer; + + // left channel + + lv2_wrapper->bind_key_enum(settings_left); + lv2_wrapper->bind_key_enum(settings_left); + lv2_wrapper->bind_key_enum(settings_left); + + lv2_wrapper->bind_key_bool(settings_left); + lv2_wrapper->bind_key_bool(settings_left); + + lv2_wrapper->bind_key_double(settings_left); + lv2_wrapper->bind_key_double(settings_left); + lv2_wrapper->bind_key_double(settings_left); + + lv2_wrapper->bind_key_double_db(settings_left); + + // right channel + + lv2_wrapper->bind_key_enum(settings_right); + lv2_wrapper->bind_key_enum(settings_right); + lv2_wrapper->bind_key_enum(settings_right); + + lv2_wrapper->bind_key_bool(settings_right); + lv2_wrapper->bind_key_bool(settings_right); + + lv2_wrapper->bind_key_double(settings_right); + lv2_wrapper->bind_key_double(settings_right); + lv2_wrapper->bind_key_double(settings_right); + + lv2_wrapper->bind_key_double_db(settings_right); + } + + template + constexpr void bind_bands(std::index_sequence /*unused*/) { + (bind_band(), ...); + } + + void on_split_channels(); +}; diff --git a/include/equalizer_band_box.hpp b/include/equalizer_band_box.hpp new file mode 100644 index 0000000..ae0cebb --- /dev/null +++ b/include/equalizer_band_box.hpp @@ -0,0 +1,44 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "tags_equalizer.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::equalizer_band_box { + +G_BEGIN_DECLS + +#define EE_TYPE_EQUALIZER_BAND_BOX (equalizer_band_box_get_type()) + +G_DECLARE_FINAL_TYPE(EqualizerBandBox, equalizer_band_box, EE, EQUALIZER_BAND_BOX, GtkBox) + +G_END_DECLS + +auto create() -> EqualizerBandBox*; + +void setup(EqualizerBandBox* self, GSettings* settings); + +void bind(EqualizerBandBox* self, int index); + +} // namespace ui::equalizer_band_box diff --git a/include/equalizer_preset.hpp b/include/equalizer_preset.hpp new file mode 100644 index 0000000..310c718 --- /dev/null +++ b/include/equalizer_preset.hpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" +#include "tags_equalizer.hpp" + +class EqualizerPreset : public PluginPresetBase { + public: + explicit EqualizerPreset(PresetType preset_type, const int& index = 0); + EqualizerPreset(const EqualizerPreset&) = delete; + auto operator=(const EqualizerPreset&) -> EqualizerPreset& = delete; + EqualizerPreset(const EqualizerPreset&&) = delete; + auto operator=(const EqualizerPreset&&) -> EqualizerPreset& = delete; + ~EqualizerPreset() override; + + private: + GSettings *input_settings_left = nullptr, *input_settings_right = nullptr, *output_settings_left = nullptr, + *output_settings_right = nullptr; + + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; + + static void save_channel(nlohmann::json& json, GSettings* settings, const int& nbands); + + void load_channel(const nlohmann::json& json, GSettings* settings, const int& nbands); + + void load_legacy_preset(); +}; diff --git a/include/equalizer_ui.hpp b/include/equalizer_ui.hpp new file mode 100644 index 0000000..43a6b06 --- /dev/null +++ b/include/equalizer_ui.hpp @@ -0,0 +1,48 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "application.hpp" +#include "effects_base.hpp" +#include "equalizer_band_box.hpp" +#include "tags_equalizer.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::equalizer_box { + +G_BEGIN_DECLS + +#define EE_TYPE_EQUALIZER_BOX (equalizer_box_get_type()) + +G_DECLARE_FINAL_TYPE(EqualizerBox, equalizer_box, EE, EQUALIZER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> EqualizerBox*; + +void setup(EqualizerBox* self, + std::shared_ptr equalizer, + const std::string& schema_path, + app::Application* application); + +} // namespace ui::equalizer_box diff --git a/include/exciter.hpp b/include/exciter.hpp new file mode 100644 index 0000000..63fab69 --- /dev/null +++ b/include/exciter.hpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Exciter : public PluginBase { + public: + Exciter(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Exciter(const Exciter&) = delete; + auto operator=(const Exciter&) -> Exciter& = delete; + Exciter(const Exciter&&) = delete; + auto operator=(const Exciter&&) -> Exciter& = delete; + ~Exciter() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + sigc::signal harmonics; + + double harmonics_port_value = 0.0; + + private: +}; diff --git a/include/exciter_preset.hpp b/include/exciter_preset.hpp new file mode 100644 index 0000000..b1dddd7 --- /dev/null +++ b/include/exciter_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class ExciterPreset : public PluginPresetBase { + public: + explicit ExciterPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/exciter_ui.hpp b/include/exciter_ui.hpp new file mode 100644 index 0000000..998f674 --- /dev/null +++ b/include/exciter_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::exciter_box { + +G_BEGIN_DECLS + +#define EE_TYPE_EXCITER_BOX (exciter_box_get_type()) + +G_DECLARE_FINAL_TYPE(ExciterBox, exciter_box, EE, EXCITER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> ExciterBox*; + +void setup(ExciterBox* self, std::shared_ptr exciter, const std::string& schema_path); + +} // namespace ui::exciter_box diff --git a/include/expander.hpp b/include/expander.hpp new file mode 100644 index 0000000..c9df63e --- /dev/null +++ b/include/expander.hpp @@ -0,0 +1,62 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Expander : public PluginBase { + public: + Expander(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Expander(const Expander&) = delete; + auto operator=(const Expander&) -> Expander& = delete; + Expander(const Expander&&) = delete; + auto operator=(const Expander&&) -> Expander& = delete; + ~Expander() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) override; + + auto get_latency_seconds() -> float override; + + void update_probe_links() override; + + sigc::signal reduction, sidechain, curve, envelope; + + float reduction_port_value = 0.0F; + float sidechain_port_value = 0.0F; + float curve_port_value = 0.0F; + float envelope_port_value = 0.0F; + + private: + uint latency_n_frames = 0U; + + std::vector list_proxies; + + void update_sidechain_links(const std::string& key); +}; diff --git a/include/expander_preset.hpp b/include/expander_preset.hpp new file mode 100644 index 0000000..d6c36dc --- /dev/null +++ b/include/expander_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class ExpanderPreset : public PluginPresetBase { + public: + explicit ExpanderPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/expander_ui.hpp b/include/expander_ui.hpp new file mode 100644 index 0000000..d07632a --- /dev/null +++ b/include/expander_ui.hpp @@ -0,0 +1,42 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "node_info_holder.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::expander_box { + +G_BEGIN_DECLS + +#define EE_TYPE_EXPANDER_BOX (expander_box_get_type()) + +G_DECLARE_FINAL_TYPE(ExpanderBox, expander_box, EE, EXPANDER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> ExpanderBox*; + +void setup(ExpanderBox* self, std::shared_ptr expander, const std::string& schema_path, PipeManager* pm); + +} // namespace ui::expander_box diff --git a/include/filter.hpp b/include/filter.hpp new file mode 100644 index 0000000..868e2cf --- /dev/null +++ b/include/filter.hpp @@ -0,0 +1,43 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Filter : public PluginBase { + public: + Filter(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Filter(const Filter&) = delete; + auto operator=(const Filter&) -> Filter& = delete; + Filter(const Filter&&) = delete; + auto operator=(const Filter&&) -> Filter& = delete; + ~Filter() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: +}; diff --git a/include/filter_preset.hpp b/include/filter_preset.hpp new file mode 100644 index 0000000..0f3ceec --- /dev/null +++ b/include/filter_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class FilterPreset : public PluginPresetBase { + public: + explicit FilterPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/filter_ui.hpp b/include/filter_ui.hpp new file mode 100644 index 0000000..9f2eaa7 --- /dev/null +++ b/include/filter_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::filter_box { + +G_BEGIN_DECLS + +#define EE_TYPE_FILTER_BOX (filter_box_get_type()) + +G_DECLARE_FINAL_TYPE(FilterBox, filter_box, EE, FILTER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> FilterBox*; + +void setup(FilterBox* self, std::shared_ptr filter, const std::string& schema_path); + +} // namespace ui::filter_box diff --git a/include/fir_filter_bandpass.hpp b/include/fir_filter_bandpass.hpp new file mode 100644 index 0000000..307cec7 --- /dev/null +++ b/include/fir_filter_bandpass.hpp @@ -0,0 +1,34 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "fir_filter_base.hpp" + +class FirFilterBandpass : public FirFilterBase { + public: + FirFilterBandpass(std::string tag); + FirFilterBandpass(const FirFilterBandpass&) = delete; + auto operator=(const FirFilterBandpass&) -> FirFilterBandpass& = delete; + FirFilterBandpass(const FirFilterBandpass&&) = delete; + auto operator=(const FirFilterBandpass&&) -> FirFilterBandpass& = delete; + ~FirFilterBandpass() override; + + void setup() override; +}; diff --git a/include/fir_filter_base.hpp b/include/fir_filter_base.hpp new file mode 100644 index 0000000..be06b6d --- /dev/null +++ b/include/fir_filter_base.hpp @@ -0,0 +1,100 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include "util.hpp" + +class FirFilterBase { + public: + FirFilterBase(std::string tag); + FirFilterBase(const FirFilterBase&) = delete; + auto operator=(const FirFilterBase&) -> FirFilterBase& = delete; + FirFilterBase(const FirFilterBase&&) = delete; + auto operator=(const FirFilterBase&&) -> FirFilterBase& = delete; + virtual ~FirFilterBase(); + + void set_rate(const uint& value); + + void set_n_samples(const uint& value); + + void set_min_frequency(const float& value); + + void set_max_frequency(const float& value); + + void set_transition_band(const float& value); + + virtual void setup(); + + [[nodiscard]] auto get_delay() const -> float; + + template + void process(T1& data_left, T1& data_right) { + std::span conv_left_in(conv->inpdata(0), n_samples); + std::span conv_right_in(conv->inpdata(1), n_samples); + + std::span conv_left_out(conv->outdata(0), n_samples); + std::span conv_right_out(conv->outdata(1), n_samples); + + std::copy(data_left.begin(), data_left.end(), conv_left_in.begin()); + std::copy(data_right.begin(), data_right.end(), conv_right_in.begin()); + + if (zita_ready) { + const int& ret = conv->process(true); // thread sync mode set to true + + if (ret != 0) { + util::debug(log_tag + "IR: process failed: " + util::to_string(ret, "")); + + zita_ready = false; + } else { + std::copy(conv_left_out.begin(), conv_left_out.end(), data_left.begin()); + std::copy(conv_right_out.begin(), conv_right_out.end(), data_right.begin()); + } + } + } + + protected: + const std::string log_tag; + + bool zita_ready = false; + + uint n_samples = 0U; + uint rate = 0U; + + float min_frequency = 20.0F; + float max_frequency = 22000.0F; + float transition_band = 100.0F; // Hz + float delay = 0.0F; + + std::vector kernel; + + Convproc* conv = nullptr; + + [[nodiscard]] auto create_lowpass_kernel(const float& cutoff, const float& transition_band) const + -> std::vector; + + void setup_zita(); + + static void direct_conv(const std::vector& a, const std::vector& b, std::vector& c); +}; diff --git a/include/fir_filter_highpass.hpp b/include/fir_filter_highpass.hpp new file mode 100644 index 0000000..3c7f486 --- /dev/null +++ b/include/fir_filter_highpass.hpp @@ -0,0 +1,34 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "fir_filter_base.hpp" + +class FirFilterHighpass : public FirFilterBase { + public: + FirFilterHighpass(std::string tag); + FirFilterHighpass(const FirFilterHighpass&) = delete; + auto operator=(const FirFilterHighpass&) -> FirFilterHighpass& = delete; + FirFilterHighpass(const FirFilterHighpass&&) = delete; + auto operator=(const FirFilterHighpass&&) -> FirFilterHighpass& = delete; + ~FirFilterHighpass() override; + + void setup() override; +}; diff --git a/include/fir_filter_lowpass.hpp b/include/fir_filter_lowpass.hpp new file mode 100644 index 0000000..81eda5d --- /dev/null +++ b/include/fir_filter_lowpass.hpp @@ -0,0 +1,34 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "fir_filter_base.hpp" + +class FirFilterLowpass : public FirFilterBase { + public: + FirFilterLowpass(std::string tag); + FirFilterLowpass(const FirFilterLowpass&) = delete; + auto operator=(const FirFilterLowpass&) -> FirFilterLowpass& = delete; + FirFilterLowpass(const FirFilterLowpass&&) = delete; + auto operator=(const FirFilterLowpass&&) -> FirFilterLowpass& = delete; + ~FirFilterLowpass() override; + + void setup() override; +}; diff --git a/include/gate.hpp b/include/gate.hpp new file mode 100644 index 0000000..e96d9ee --- /dev/null +++ b/include/gate.hpp @@ -0,0 +1,64 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Gate : public PluginBase { + public: + Gate(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Gate(const Gate&) = delete; + auto operator=(const Gate&) -> Gate& = delete; + Gate(const Gate&&) = delete; + auto operator=(const Gate&&) -> Gate& = delete; + ~Gate() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) override; + + auto get_latency_seconds() -> float override; + + void update_probe_links() override; + + sigc::signal attack_zone_start, attack_threshold, release_zone_start, release_threshold, reduction, + sidechain, curve, envelope; + + float attack_zone_start_port_value = 0.0F; + float attack_threshold_port_value = 0.0F; + float release_zone_start_port_value = 0.0F; + float release_threshold_port_value = 0.0F; + float reduction_port_value = 0.0F; + float sidechain_port_value = 0.0F; + float curve_port_value = 0.0F; + float envelope_port_value = 0.0F; + + private: + uint latency_n_frames = 0U; + + std::vector list_proxies; + + void update_sidechain_links(const std::string& key); +}; diff --git a/include/gate_preset.hpp b/include/gate_preset.hpp new file mode 100644 index 0000000..6a61207 --- /dev/null +++ b/include/gate_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class GatePreset : public PluginPresetBase { + public: + explicit GatePreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/gate_ui.hpp b/include/gate_ui.hpp new file mode 100644 index 0000000..68ba9ba --- /dev/null +++ b/include/gate_ui.hpp @@ -0,0 +1,42 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "node_info_holder.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::gate_box { + +G_BEGIN_DECLS + +#define EE_TYPE_GATE_BOX (gate_box_get_type()) + +G_DECLARE_FINAL_TYPE(GateBox, gate_box, EE, GATE_BOX, GtkBox) + +G_END_DECLS + +auto create() -> GateBox*; + +void setup(GateBox* self, std::shared_ptr gate, const std::string& schema_path, PipeManager* pm); + +} // namespace ui::gate_box diff --git a/include/ladspa_wrapper.hpp b/include/ladspa_wrapper.hpp new file mode 100644 index 0000000..f20a7e7 --- /dev/null +++ b/include/ladspa_wrapper.hpp @@ -0,0 +1,251 @@ +/* + * Copyright © 2023 Torge Matthies + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include "config.h" +#include "string_literal_wrapper.hpp" +#include "util.hpp" + +namespace ladspa { + +using namespace std::string_literals; + +class LadspaWrapper { + public: + LadspaWrapper(const std::string& plugin_filename, const std::string& plugin_label); + LadspaWrapper(const LadspaWrapper&) = delete; + auto operator=(const LadspaWrapper&) -> LadspaWrapper& = delete; + LadspaWrapper(const LadspaWrapper&&) = delete; + auto operator=(const LadspaWrapper&&) -> LadspaWrapper& = delete; + virtual ~LadspaWrapper(); + + auto create_instance(uint rate) -> bool; + + void connect_data_ports(const std::span& left_in, + const std::span& right_in, + const std::span& left_out, + const std::span& right_out); + void connect_data_ports(const std::span& left_in, + const std::span& right_in, + const std::span& left_out, + const std::span& right_out, + const std::span& probe_left, + const std::span& probe_right); + + void activate(); + void deactivate(); + + void run() const; + + [[nodiscard]] auto get_control_port_count() const -> uint; + [[nodiscard]] auto get_control_port_name(uint index) const -> std::string; + [[nodiscard]] auto is_control_port_output(uint index) const -> bool; + [[nodiscard]] auto get_control_port_range(uint index) const -> std::tuple; + [[nodiscard]] auto get_control_port_default(uint index) const -> float; + [[nodiscard]] auto get_control_port_value(uint index) const -> float; + [[nodiscard]] auto get_control_port_value(const std::string& symbol) const -> float; + + auto set_control_port_value_clamp(uint index, float value) -> float; + auto set_control_port_value_clamp(const std::string& symbol, float value) -> float; + + [[nodiscard]] auto found_plugin() const -> bool { return found; } + [[nodiscard]] auto has_instance() const -> bool { return instance != nullptr; } + [[nodiscard]] auto get_rate() const -> uint { return rate; } + + using genum = gint; + + template + void load_from_gsettings(GSettings* settings, const char* gkey, const char* port_name) { + float value = 0.0F; + + if constexpr (std::is_same_v) { + value = static_cast(g_settings_get_double(settings, gkey)); + } else if constexpr (std::is_same_v) { + value = static_cast(g_settings_get_int(settings, gkey)); + } else if constexpr (std::is_same_v) { + value = static_cast(g_settings_get_boolean(settings, gkey)); + } else if constexpr (std::is_same_v) { + value = static_cast(g_settings_get_enum(settings, gkey)); + } + + auto actual_value = set_control_port_value_clamp(port_name, value); + + if (actual_value != value && !(std::isnan(actual_value) && std::isnan(value))) { + if constexpr (std::is_same_v) { + g_settings_set_double(settings, gkey, static_cast(actual_value)); + } else if constexpr (std::is_same_v) { + g_settings_set_int(settings, gkey, static_cast(actual_value)); + } else if constexpr (std::is_same_v) { + g_settings_set_boolean(settings, gkey, static_cast(actual_value)); + } else if constexpr (std::is_same_v) { + g_settings_set_enum(settings, gkey, static_cast(actual_value)); + } + } + } + + template + void bind_key_bool(GSettings* settings) { + load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + }), + this); + } + + template + void bind_key_enum(GSettings* settings) { + load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + }), + this); + } + + template + void bind_key_int(GSettings* settings) { + load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + }), + this); + } + + template + void bind_key_double(GSettings* settings) { + load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->load_from_gsettings(settings, gkey_wrapper.msg.data(), key_wrapper.msg.data()); + }), + this); + } + + template + void bind_key_double_db_exponential(GSettings* settings) { + const auto db_v = static_cast(g_settings_get_double(settings, gkey_wrapper.msg.data())); + + const auto clamped = + (!lower_bound && db_v <= util::minimum_db_level) ? -std::numeric_limits::infinity() : db_v; + + const auto new_v = set_control_port_value_clamp(key_wrapper.msg.data(), clamped); + + // Update gsettings if the new value is valid and clamped/different from the original + if (new_v != clamped && !(std::isnan(new_v) && std::isnan(clamped))) { + g_settings_set_double(settings, gkey_wrapper.msg.data(), static_cast(new_v)); + } + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto db_v = static_cast(g_settings_get_double(settings, gkey_wrapper.msg.data())); + + const auto clamped = (!lower_bound && db_v <= util::minimum_db_level) + ? -std::numeric_limits::infinity() + : db_v; + + const auto new_v = self->set_control_port_value_clamp(key_wrapper.msg.data(), clamped); + + // Update gsettings if the new value is valid and clamped/different from the original + if (new_v != clamped && !(std::isnan(new_v) && std::isnan(clamped))) + g_settings_set_double(settings, gkey_wrapper.msg.data(), static_cast(new_v)); + }), + this); + } + + template + void bind_key_double_db(GSettings* settings) { + const auto db_v = static_cast(g_settings_get_double(settings, gkey_wrapper.msg.data())); + + const auto clamped_v = (!lower_bound && db_v <= util::minimum_db_level) ? 0.0F : util::db_to_linear(db_v); + + const auto new_v = set_control_port_value_clamp(key_wrapper.msg.data(), clamped_v); + + // Update gsettings if the new value is valid and clamped/different from the original + if (new_v != clamped_v && !(std::isnan(new_v) && std::isnan(clamped_v))) { + g_settings_set_double(settings, gkey_wrapper.msg.data(), static_cast(util::linear_to_db(new_v))); + } + + g_signal_connect( + settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto db_v = static_cast(g_settings_get_double(settings, gkey_wrapper.msg.data())); + + const auto clamped_v = (!lower_bound && db_v <= util::minimum_db_level) ? 0.0F : util::db_to_linear(db_v); + + const auto new_v = self->set_control_port_value_clamp(key_wrapper.msg.data(), clamped_v); + + // Update gsettings if the new value is valid and clamped/different from the original + if (new_v != clamped_v && !(std::isnan(new_v) && std::isnan(clamped_v))) + g_settings_set_double(settings, gkey_wrapper.msg.data(), static_cast(util::linear_to_db(new_v))); + }), + this); + } + + uint n_samples = 0U; + + private: + std::string plugin_name; + + void* dl_handle = nullptr; + + const LADSPA_Descriptor* descriptor = nullptr; + + LADSPA_Handle instance = nullptr; + + static constexpr unsigned long null_ul = (unsigned long)-1L; + + bool found = false; + bool active = false; + + uint rate = 0U; + + LADSPA_Data* control_ports = nullptr; + bool* control_ports_initialized = nullptr; + + std::unordered_map map_cp_name_to_idx = std::unordered_map(); +}; + +} // namespace ladspa diff --git a/include/level_meter.hpp b/include/level_meter.hpp new file mode 100644 index 0000000..e9971ba --- /dev/null +++ b/include/level_meter.hpp @@ -0,0 +1,79 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "plugin_base.hpp" + +class LevelMeter : public PluginBase { + public: + LevelMeter(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + LevelMeter(const LevelMeter&) = delete; + auto operator=(const LevelMeter&) -> LevelMeter& = delete; + LevelMeter(const LevelMeter&&) = delete; + auto operator=(const LevelMeter&&) -> LevelMeter& = delete; + ~LevelMeter() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + void reset_history(); + + sigc::signal + results; // range + + private: + bool ebur128_ready = false; + + uint old_rate = 0U; + + double momentary = 0.0; + double shortterm = 0.0; + double global = 0.0; + double relative = 0.0; + double range = 0.0; + + double true_peak_L = 0.0; + double true_peak_R = 0.0; + + std::vector data; + + ebur128_state* ebur_state = nullptr; + + std::vector mythreads; + + auto init_ebur128() -> bool; +}; diff --git a/include/level_meter_preset.hpp b/include/level_meter_preset.hpp new file mode 100644 index 0000000..9dac5dd --- /dev/null +++ b/include/level_meter_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class LevelMeterPreset : public PluginPresetBase { + public: + explicit LevelMeterPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/level_meter_ui.hpp b/include/level_meter_ui.hpp new file mode 100644 index 0000000..07aa64d --- /dev/null +++ b/include/level_meter_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::level_meter_box { + +G_BEGIN_DECLS + +#define EE_TYPE_LEVEL_METER_BOX (level_meter_box_get_type()) + +G_DECLARE_FINAL_TYPE(LevelMeterBox, level_meter_box, EE, LEVEL_METER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> LevelMeterBox*; + +void setup(LevelMeterBox* self, std::shared_ptr level_meter, const std::string& schema_path); + +} // namespace ui::level_meter_box diff --git a/include/libportal.hpp b/include/libportal.hpp new file mode 100644 index 0000000..ebcb1cd --- /dev/null +++ b/include/libportal.hpp @@ -0,0 +1,31 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "libportal-gtk4/portal-gtk4.h" +#include "libportal/portal.h" +#include "ui_helpers.hpp" + +namespace libportal { + +void init(GtkSwitch* g_enable_autostart, GtkSwitch* g_shutdown_on_window_close); + +} // namespace libportal \ No newline at end of file diff --git a/include/limiter.hpp b/include/limiter.hpp new file mode 100644 index 0000000..21ff463 --- /dev/null +++ b/include/limiter.hpp @@ -0,0 +1,59 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Limiter : public PluginBase { + public: + Limiter(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Limiter(const Limiter&) = delete; + auto operator=(const Limiter&) -> Limiter& = delete; + Limiter(const Limiter&&) = delete; + auto operator=(const Limiter&&) -> Limiter& = delete; + ~Limiter() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) override; + + void update_probe_links() override; + + auto get_latency_seconds() -> float override; + + sigc::signal gain_left, gain_right, sidechain_left, sidechain_right; + + float gain_l_port_value = 0.0F; + float gain_r_port_value = 0.0F; + float sidechain_l_port_value = 0.0F; + float sidechain_r_port_value = 0.0F; + + private: + uint latency_n_frames = 0U; + + std::vector list_proxies; + + void update_sidechain_links(const std::string& key); +}; diff --git a/include/limiter_preset.hpp b/include/limiter_preset.hpp new file mode 100644 index 0000000..46959d0 --- /dev/null +++ b/include/limiter_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class LimiterPreset : public PluginPresetBase { + public: + explicit LimiterPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/limiter_ui.hpp b/include/limiter_ui.hpp new file mode 100644 index 0000000..6dab786 --- /dev/null +++ b/include/limiter_ui.hpp @@ -0,0 +1,42 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "node_info_holder.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::limiter_box { + +G_BEGIN_DECLS + +#define EE_TYPE_LIMITER_BOX (limiter_box_get_type()) + +G_DECLARE_FINAL_TYPE(LimiterBox, limiter_box, EE, LIMITER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> LimiterBox*; + +void setup(LimiterBox* self, std::shared_ptr limiter, const std::string& schema_path, PipeManager* pm); + +} // namespace ui::limiter_box diff --git a/include/loudness.hpp b/include/loudness.hpp new file mode 100644 index 0000000..1cdfcb3 --- /dev/null +++ b/include/loudness.hpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Loudness : public PluginBase { + public: + Loudness(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Loudness(const Loudness&) = delete; + auto operator=(const Loudness&) -> Loudness& = delete; + Loudness(const Loudness&&) = delete; + auto operator=(const Loudness&&) -> Loudness& = delete; + ~Loudness() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: + uint latency_n_frames = 0U; +}; diff --git a/include/loudness_preset.hpp b/include/loudness_preset.hpp new file mode 100644 index 0000000..2febdde --- /dev/null +++ b/include/loudness_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class LoudnessPreset : public PluginPresetBase { + public: + explicit LoudnessPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/loudness_ui.hpp b/include/loudness_ui.hpp new file mode 100644 index 0000000..f664641 --- /dev/null +++ b/include/loudness_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::loudness_box { + +G_BEGIN_DECLS + +#define EE_TYPE_LOUDNESS_BOX (loudness_box_get_type()) + +G_DECLARE_FINAL_TYPE(LoudnessBox, loudness_box, EE, LOUDNESS_BOX, GtkBox) + +G_END_DECLS + +auto create() -> LoudnessBox*; + +void setup(LoudnessBox* self, std::shared_ptr loudness, const std::string& schema_path); + +} // namespace ui::loudness_box diff --git a/include/lv2_wrapper.hpp b/include/lv2_wrapper.hpp new file mode 100644 index 0000000..8dcbed7 --- /dev/null +++ b/include/lv2_wrapper.hpp @@ -0,0 +1,290 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "string_literal_wrapper.hpp" +#include "util.hpp" + +namespace lv2 { + +using namespace std::string_literals; + +#define LV2_UI_makeResident LV2_UI_PREFIX "makeResident" + +#define LV2_UI_makeSONameResident LV2_UI_PREFIX "makeSONameResident" + +enum PortType { TYPE_CONTROL, TYPE_AUDIO, TYPE_ATOM }; + +struct Port { + PortType type; // Datatype + + uint index; // Port index + + std::string name; + + std::string symbol; + + float value = 0.0F; // Control value (if applicable) + + float min = -std::numeric_limits::infinity(); + + float max = std::numeric_limits::infinity(); + + bool is_input; // True if an input port + + bool optional; // True if the connection is optional +}; + +class Lv2Wrapper { + public: + Lv2Wrapper(const std::string& plugin_uri); + Lv2Wrapper(const Lv2Wrapper&) = delete; + auto operator=(const Lv2Wrapper&) -> Lv2Wrapper& = delete; + Lv2Wrapper(const Lv2Wrapper&&) = delete; + auto operator=(const Lv2Wrapper&&) -> Lv2Wrapper& = delete; + virtual ~Lv2Wrapper(); + + bool found_plugin = false; + + auto create_instance(const uint& rate) -> bool; + + void set_n_samples(const uint& value); + + [[nodiscard]] auto get_n_samples() const -> uint; + + [[nodiscard]] auto get_rate() const -> uint; + + void connect_data_ports(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out); + + void connect_data_ports(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right); + + void activate(); + + void run() const; + + void deactivate(); + + void set_control_port_value(const std::string& symbol, const float& value); + + auto get_control_port_value(const std::string& symbol) -> float; + + auto has_instance() -> bool; + + void load_ui(); + + void notify_ui(); + + void update_ui(); + + auto has_ui() -> bool; + + void close_ui(); + + void set_ui_update_rate(const uint& value); + + void ui_port_event(const uint& port_index, const float& value); + + void native_ui_to_gsettings(); + + template + void bind_key_bool(GSettings* settings) { + set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_boolean(settings, gkey_wrapper.msg.data()))); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_boolean(settings, key))); + }), + this); + + gsettings_sync_funcs.emplace_back([=, this]() { + g_settings_set_boolean(settings, gkey_wrapper.msg.data(), + static_cast(get_control_port_value(key_wrapper.msg.data()))); + }); + } + + template + void bind_key_enum(GSettings* settings) { + set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_enum(settings, gkey_wrapper.msg.data()))); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_enum(settings, key))); + }), + this); + + gsettings_sync_funcs.emplace_back([=, this]() { + g_settings_set_enum(settings, gkey_wrapper.msg.data(), + static_cast(get_control_port_value(key_wrapper.msg.data()))); + }); + } + + template + void bind_key_int(GSettings* settings) { + set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_int(settings, gkey_wrapper.msg.data()))); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_int(settings, key))); + }), + this); + + gsettings_sync_funcs.emplace_back([=, this]() { + g_settings_set_int(settings, gkey_wrapper.msg.data(), + static_cast(get_control_port_value(key_wrapper.msg.data()))); + }); + } + + template + void bind_key_double(GSettings* settings) { + set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_double(settings, gkey_wrapper.msg.data()))); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->set_control_port_value(key_wrapper.msg.data(), + static_cast(g_settings_get_double(settings, key))); + }), + this); + + gsettings_sync_funcs.emplace_back([=, this]() { + g_settings_set_double(settings, gkey_wrapper.msg.data(), + static_cast(get_control_port_value(key_wrapper.msg.data()))); + }); + } + + template + void bind_key_double_db(GSettings* settings) { + auto key_v = g_settings_get_double(settings, gkey_wrapper.msg.data()); + + auto linear_v = + (!lower_bound && key_v <= util::minimum_db_d_level) ? 0.0F : static_cast(util::db_to_linear(key_v)); + + set_control_port_value(key_wrapper.msg.data(), linear_v); + + g_signal_connect(settings, ("changed::"s + gkey_wrapper.msg.data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + auto key_v = g_settings_get_double(settings, gkey_wrapper.msg.data()); + + auto linear_v = (!lower_bound && key_v <= util::minimum_db_d_level) + ? 0.0F + : static_cast(util::db_to_linear(key_v)); + + self->set_control_port_value(key_wrapper.msg.data(), linear_v); + }), + this); + + gsettings_sync_funcs.emplace_back([=, this]() { + const auto linear_v = get_control_port_value(key_wrapper.msg.data()); + + const auto db_v = (!lower_bound & (linear_v == 0.0F)) ? util::minimum_db_d_level : util::linear_to_db(linear_v); + + g_settings_set_double(settings, gkey_wrapper.msg.data(), static_cast(db_v)); + }); + } + + private: + std::string plugin_uri; + + LilvWorld* world = nullptr; + + const LilvPlugin* plugin = nullptr; + + LilvInstance* instance = nullptr; + + LV2UI_Handle ui_handle = nullptr; + + const LV2UI_Descriptor* ui_descriptor = nullptr; + + const LV2UI_Idle_Interface* idle_iface = nullptr; + + void* libhandle = nullptr; + + uint n_ports = 0U; + uint n_audio_in = 0U; + uint n_audio_out = 0U; + + uint n_samples = 0U; + + uint rate = 0U; + + uint ui_update_rate = 30U; + + std::vector ports; + + std::vector> gsettings_sync_funcs; + + std::unordered_map map_uri_to_urid; + std::unordered_map map_urid_to_uri; + + const std::array static_features{{{LV2_BUF_SIZE__boundedBlockLength, nullptr}}}; + + std::mutex ui_mutex; + + void check_required_features(); + + void create_ports(); + + void connect_control_ports(); + + auto map_urid(const std::string& uri) -> LV2_URID; +}; + +} // namespace lv2 diff --git a/include/maximizer.hpp b/include/maximizer.hpp new file mode 100644 index 0000000..026820a --- /dev/null +++ b/include/maximizer.hpp @@ -0,0 +1,51 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Maximizer : public PluginBase { + public: + Maximizer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Maximizer(const Maximizer&) = delete; + auto operator=(const Maximizer&) -> Maximizer& = delete; + Maximizer(const Maximizer&&) = delete; + auto operator=(const Maximizer&&) -> Maximizer& = delete; + ~Maximizer() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + sigc::signal reduction; + + double reduction_port_value = 0.0; + + private: + uint latency_n_frames = 0U; +}; diff --git a/include/maximizer_preset.hpp b/include/maximizer_preset.hpp new file mode 100644 index 0000000..3bded3c --- /dev/null +++ b/include/maximizer_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class MaximizerPreset : public PluginPresetBase { + public: + explicit MaximizerPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/maximizer_ui.hpp b/include/maximizer_ui.hpp new file mode 100644 index 0000000..60a57c1 --- /dev/null +++ b/include/maximizer_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::maximizer_box { + +G_BEGIN_DECLS + +#define EE_TYPE_MAXIMIZER_BOX (maximizer_box_get_type()) + +G_DECLARE_FINAL_TYPE(MaximizerBox, maximizer_box, EE, MAXIMIZER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> MaximizerBox*; + +void setup(MaximizerBox* self, std::shared_ptr maximizer, const std::string& schema_path); + +} // namespace ui::maximizer_box diff --git a/include/module_info_holder.hpp b/include/module_info_holder.hpp new file mode 100644 index 0000000..de35911 --- /dev/null +++ b/include/module_info_holder.hpp @@ -0,0 +1,45 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "pipe_manager.hpp" + +namespace ui::holders { + +G_BEGIN_DECLS + +#define EE_TYPE_MODULE_INFO_HOLDER (module_info_holder_get_type()) + +G_DECLARE_FINAL_TYPE(ModuleInfoHolder, module_info_holder, EE, MODULE_INFO_HOLDER, GObject) + +G_END_DECLS + +struct _ModuleInfoHolder { + GObject parent_instance; + + ModuleInfo* info; + + sigc::signal info_updated; +}; + +auto create(const ModuleInfo& info) -> ModuleInfoHolder*; + +} // namespace ui::holders \ No newline at end of file diff --git a/include/multiband_compressor.hpp b/include/multiband_compressor.hpp new file mode 100644 index 0000000..9e3d0ce --- /dev/null +++ b/include/multiband_compressor.hpp @@ -0,0 +1,120 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" +#include "tags_multiband_compressor.hpp" + +class MultibandCompressor : public PluginBase { + public: + MultibandCompressor(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + MultibandCompressor(const MultibandCompressor&) = delete; + auto operator=(const MultibandCompressor&) -> MultibandCompressor& = delete; + MultibandCompressor(const MultibandCompressor&&) = delete; + auto operator=(const MultibandCompressor&&) -> MultibandCompressor& = delete; + ~MultibandCompressor() override; + + static constexpr uint n_bands = tags::multiband_compressor::n_bands; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) override; + + auto get_latency_seconds() -> float override; + + void update_probe_links() override; + + sigc::signal)> reduction, envelope, curve, frequency_range; + + std::array frequency_range_end_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + std::array envelope_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + std::array curve_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + std::array reduction_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + + private: + uint latency_n_frames = 0U; + + std::vector list_proxies; + + void update_sidechain_links(const std::string& key); + + template + constexpr void bind_band() { + using namespace tags::multiband_compressor; + using namespace std::string_literals; + + if (n > 0U) { + lv2_wrapper->bind_key_bool(settings); + + lv2_wrapper->bind_key_double(settings); + } + + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + + lv2_wrapper->bind_key_enum(settings); + lv2_wrapper->bind_key_enum(settings); + lv2_wrapper->bind_key_enum(settings); + lv2_wrapper->bind_key_enum(settings); + + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + + // This control can assume -inf + lv2_wrapper->bind_key_double_db(settings); + + gconnections.push_back(g_signal_connect(settings, ("changed::"s + band_external_sidechain[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + } + + template + constexpr void bind_bands(std::index_sequence /*unused*/) { + (bind_band(), ...); + } +}; diff --git a/include/multiband_compressor_band_box.hpp b/include/multiband_compressor_band_box.hpp new file mode 100644 index 0000000..9ab3b44 --- /dev/null +++ b/include/multiband_compressor_band_box.hpp @@ -0,0 +1,54 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "tags_multiband_compressor.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::multiband_compressor_band_box { + +G_BEGIN_DECLS + +#define EE_TYPE_MULTIBAND_COMPRESSOR_BAND_BOX (multiband_compressor_band_box_get_type()) + +G_DECLARE_FINAL_TYPE(MultibandCompressorBandBox, + multiband_compressor_band_box, + EE, + MULTIBAND_COMPRESSOR_BAND_BOX, + GtkBox) + +G_END_DECLS + +auto create() -> MultibandCompressorBandBox*; + +void setup(MultibandCompressorBandBox* self, GSettings* settings, int index); + +void set_end_label(MultibandCompressorBandBox* self, const float& value); + +void set_envelope_label(MultibandCompressorBandBox* self, const float& value); + +void set_curve_label(MultibandCompressorBandBox* self, const float& value); + +void set_gain_label(MultibandCompressorBandBox* self, const float& value); + +} // namespace ui::multiband_compressor_band_box diff --git a/include/multiband_compressor_preset.hpp b/include/multiband_compressor_preset.hpp new file mode 100644 index 0000000..5526973 --- /dev/null +++ b/include/multiband_compressor_preset.hpp @@ -0,0 +1,35 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" +#include "tags_multiband_compressor.hpp" + +class MultibandCompressorPreset : public PluginPresetBase { + public: + explicit MultibandCompressorPreset(PresetType preset_type, const int& index = 0); + + private: + static constexpr uint n_bands = tags::multiband_compressor::n_bands; + + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/multiband_compressor_ui.hpp b/include/multiband_compressor_ui.hpp new file mode 100644 index 0000000..7330773 --- /dev/null +++ b/include/multiband_compressor_ui.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "multiband_compressor_band_box.hpp" +#include "node_info_holder.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::multiband_compressor_box { + +G_BEGIN_DECLS + +#define EE_TYPE_MULTIBAND_COMPRESSOR_BOX (multiband_compressor_box_get_type()) + +G_DECLARE_FINAL_TYPE(MultibandCompressorBox, multiband_compressor_box, EE, MULTIBAND_COMPRESSOR_BOX, GtkBox) + +G_END_DECLS + +auto create() -> MultibandCompressorBox*; + +void setup(MultibandCompressorBox* self, + std::shared_ptr multiband_compressor, + const std::string& schema_path, + PipeManager* pm); + +} // namespace ui::multiband_compressor_box diff --git a/include/multiband_gate.hpp b/include/multiband_gate.hpp new file mode 100644 index 0000000..fff3fb1 --- /dev/null +++ b/include/multiband_gate.hpp @@ -0,0 +1,119 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" +#include "tags_multiband_gate.hpp" + +class MultibandGate : public PluginBase { + public: + MultibandGate(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + MultibandGate(const MultibandGate&) = delete; + auto operator=(const MultibandGate&) -> MultibandGate& = delete; + MultibandGate(const MultibandGate&&) = delete; + auto operator=(const MultibandGate&&) -> MultibandGate& = delete; + ~MultibandGate() override; + + static constexpr uint n_bands = tags::multiband_gate::n_bands; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) override; + + auto get_latency_seconds() -> float override; + + void update_probe_links() override; + + sigc::signal)> reduction, envelope, curve, frequency_range; + + float latency_port_value = 0.0F; + + std::array frequency_range_end_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + std::array envelope_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + std::array curve_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + std::array reduction_port_array = {0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F}; + + private: + uint latency_n_frames = 0U; + + std::vector list_proxies; + + void update_sidechain_links(const std::string& key); + + template + constexpr void bind_band() { + using namespace tags::multiband_gate; + using namespace std::string_literals; + + if (n > 0U) { + lv2_wrapper->bind_key_bool(settings); + + lv2_wrapper->bind_key_double(settings); + } + + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + lv2_wrapper->bind_key_bool(settings); + + lv2_wrapper->bind_key_enum(settings); + lv2_wrapper->bind_key_enum(settings); + lv2_wrapper->bind_key_enum(settings); + + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + lv2_wrapper->bind_key_double(settings); + + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + lv2_wrapper->bind_key_double_db(settings); + + gconnections.push_back(g_signal_connect(settings, ("changed::"s + band_external_sidechain[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + } + + template + constexpr void bind_bands(std::index_sequence /*unused*/) { + (bind_band(), ...); + } +}; diff --git a/include/multiband_gate_band_box.hpp b/include/multiband_gate_band_box.hpp new file mode 100644 index 0000000..1331c79 --- /dev/null +++ b/include/multiband_gate_band_box.hpp @@ -0,0 +1,50 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "tags_multiband_gate.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::multiband_gate_band_box { + +G_BEGIN_DECLS + +#define EE_TYPE_MULTIBAND_GATE_BAND_BOX (multiband_gate_band_box_get_type()) + +G_DECLARE_FINAL_TYPE(MultibandGateBandBox, multiband_gate_band_box, EE, MULTIBAND_GATE_BAND_BOX, GtkBox) + +G_END_DECLS + +auto create() -> MultibandGateBandBox*; + +void setup(MultibandGateBandBox* self, GSettings* settings, int index); + +void set_end_label(MultibandGateBandBox* self, const float& value); + +void set_envelope_label(MultibandGateBandBox* self, const float& value); + +void set_curve_label(MultibandGateBandBox* self, const float& value); + +void set_gain_label(MultibandGateBandBox* self, const float& value); + +} // namespace ui::multiband_gate_band_box diff --git a/include/multiband_gate_preset.hpp b/include/multiband_gate_preset.hpp new file mode 100644 index 0000000..f89cab9 --- /dev/null +++ b/include/multiband_gate_preset.hpp @@ -0,0 +1,35 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" +#include "tags_multiband_gate.hpp" + +class MultibandGatePreset : public PluginPresetBase { + public: + explicit MultibandGatePreset(PresetType preset_type, const int& index = 0); + + private: + static constexpr uint n_bands = tags::multiband_gate::n_bands; + + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/multiband_gate_ui.hpp b/include/multiband_gate_ui.hpp new file mode 100644 index 0000000..f17d40d --- /dev/null +++ b/include/multiband_gate_ui.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "multiband_gate_band_box.hpp" +#include "node_info_holder.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::multiband_gate_box { + +G_BEGIN_DECLS + +#define EE_TYPE_MULTIBAND_GATE_BOX (multiband_gate_box_get_type()) + +G_DECLARE_FINAL_TYPE(MultibandGateBox, multiband_gate_box, EE, MULTIBAND_GATE_BOX, GtkBox) + +G_END_DECLS + +auto create() -> MultibandGateBox*; + +void setup(MultibandGateBox* self, + std::shared_ptr multiband_gate, + const std::string& schema_path, + PipeManager* pm); + +} // namespace ui::multiband_gate_box diff --git a/include/node_info_holder.hpp b/include/node_info_holder.hpp new file mode 100644 index 0000000..276cca7 --- /dev/null +++ b/include/node_info_holder.hpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "pipe_manager.hpp" + +namespace ui::holders { + +G_BEGIN_DECLS + +#define EE_TYPE_NODE_INFO_HOLDER (node_info_holder_get_type()) + +G_DECLARE_FINAL_TYPE(NodeInfoHolder, node_info_holder, EE, NODE_INFO_HOLDER, GObject) + +G_END_DECLS + +struct _NodeInfoHolder { + GObject parent_instance; + + NodeInfo* info; + + std::string icon_name; // The name of the icon that will represent the node when we show it in a list + + sigc::signal info_updated; +}; + +auto create(const NodeInfo& info) -> NodeInfoHolder*; + +} // namespace ui::holders \ No newline at end of file diff --git a/include/output_level.hpp b/include/output_level.hpp new file mode 100644 index 0000000..42dd992 --- /dev/null +++ b/include/output_level.hpp @@ -0,0 +1,44 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class OutputLevel : public PluginBase { + public: + OutputLevel(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + OutputLevel(const OutputLevel&) = delete; + auto operator=(const OutputLevel&) -> OutputLevel& = delete; + OutputLevel(const OutputLevel&&) = delete; + auto operator=(const OutputLevel&&) -> OutputLevel& = delete; + ~OutputLevel() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; +}; diff --git a/include/pipe_manager.hpp b/include/pipe_manager.hpp new file mode 100644 index 0000000..316ea8b --- /dev/null +++ b/include/pipe_manager.hpp @@ -0,0 +1,319 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "tags_app.hpp" +#include "tags_pipewire.hpp" +#include "util.hpp" + +struct NodeInfo { + pw_proxy* proxy = nullptr; + + uint id = SPA_ID_INVALID; + + uint device_id = SPA_ID_INVALID; + + uint64_t serial = SPA_ID_INVALID; + + std::string name; + + std::string description; + + std::string media_class; + + std::string media_role; + + std::string app_icon_name; + + std::string media_icon_name; + + std::string device_icon_name; + + std::string media_name; + + std::string format; + + std::string application_id; + + int priority = -1; + + pw_node_state state = PW_NODE_STATE_IDLE; + + bool mute = false; + + bool connected = false; + + int n_input_ports = 0; + + int n_output_ports = 0; + + int rate = 1; // used as divisor to calculate latency, so do not initialize it as 0 + + uint n_volume_channels = 0U; + + float latency = 0.0F; + + float volume = 0.0F; +}; + +struct LinkInfo { + std::string path; + + uint id = SPA_ID_INVALID; + + uint input_node_id = 0U; + + uint input_port_id = 0U; + + uint output_node_id = 0U; + + uint output_port_id = 0U; + + uint64_t serial = SPA_ID_INVALID; + + bool passive = false; // does not cause the graph to be runnable + + pw_link_state state = PW_LINK_STATE_UNLINKED; +}; + +struct PortInfo { + std::string path; + + std::string format_dsp; + + std::string audio_channel; + + std::string name; + + std::string direction; + + bool physical = false; + + bool terminal = false; + + bool monitor = false; + + uint id = SPA_ID_INVALID; + + uint node_id = 0U; + + uint port_id = 0U; + + uint64_t serial = SPA_ID_INVALID; +}; + +struct ModuleInfo { + uint id; + + uint64_t serial = SPA_ID_INVALID; + + std::string name; + + std::string description; + + std::string filename; +}; + +struct ClientInfo { + uint id; + + uint64_t serial = SPA_ID_INVALID; + + std::string name; + + std::string access; + + std::string api; +}; + +struct DeviceInfo { + uint id; + + uint64_t serial = SPA_ID_INVALID; + + std::string name; + + std::string description; + + std::string nick; + + std::string media_class; + + std::string api; + + std::string input_route_name; + + std::string output_route_name; + + std::string bus_id; + + std::string bus_path; + + spa_param_availability input_route_available; + + spa_param_availability output_route_available; +}; + +class PipeManager { + public: + PipeManager(); + PipeManager(const PipeManager&) = delete; + auto operator=(const PipeManager&) -> PipeManager& = delete; + PipeManager(const PipeManager&&) = delete; + auto operator=(const PipeManager&&) -> PipeManager& = delete; + ~PipeManager(); + + pw_thread_loop* thread_loop = nullptr; + pw_core* core = nullptr; + pw_registry* registry = nullptr; + pw_metadata* metadata = nullptr; + + inline static bool exiting = false; + + inline static bool exclude_monitor_stream = true; + + spa_hook metadata_listener{}; + + std::map node_map; + + std::vector list_links; + + std::vector list_ports; + + std::vector list_modules; + + std::vector list_clients; + + std::vector list_devices; + + std::string default_output_device_name, default_input_device_name; + + NodeInfo ee_sink_node, ee_source_node; + NodeInfo output_device, input_device; + + constexpr static auto blocklist_node_name = + std::to_array({"Easy Effects", "EasyEffects", "easyeffects", "easyeffects_soe", "easyeffects_sie", + "EasyEffectsWebrtcProbe", "libcanberra", "gsd-media-keys", "GNOME Shell", "speech-dispatcher", + "speech-dispatcher-dummy", "speech-dispatcher-espeak-ng", "Mutter", "gameoverlayui"}); + + std::array blocklist_app_id = {"org.PulseAudio.pavucontrol", "org.gnome.VolumeControl"}; + + std::array blocklist_media_role = {"event", "Notification"}; + + std::string header_version, library_version, core_name, version; + std::string default_clock_rate = "0"; + std::string default_min_quantum = "0"; + std::string default_max_quantum = "0"; + std::string default_quantum = "0"; + + auto node_map_at_id(const uint& id) -> NodeInfo&; + + auto stream_is_connected(const uint& id, const std::string& media_class) -> bool; + + void connect_stream_output(const uint& id) const; + + void connect_stream_input(const uint& id) const; + + void disconnect_stream(const uint& id) const; + + static void set_node_volume(pw_proxy* proxy, const uint& n_vol_ch, const float& value); + + static void set_node_mute(pw_proxy* proxy, const bool& state); + + auto count_node_ports(const uint& node_id) -> uint; + + /* + Links the output ports of the node output_node_id to the input ports of the node input_node_id + */ + + auto link_nodes(const uint& output_node_id, + const uint& input_node_id, + const bool& probe_link = false, + const bool& link_passive = true) -> std::vector; + + void destroy_object(const int& id) const; + + /* + Destroy all the filters links + */ + + void destroy_links(const std::vector& list) const; + + void lock() const; + + void unlock() const; + + void sync_wait_unlock() const; + + auto wait_full() const -> int; + + static void lock_node_map(); + + static void unlock_node_map(); + + static auto json_object_find(const char* obj, const char* key, char* value, const size_t& len) -> int; + + sigc::signal stream_output_added; + sigc::signal stream_input_added; + sigc::signal stream_output_changed; + sigc::signal stream_input_changed; + sigc::signal stream_output_removed; + sigc::signal stream_input_removed; + + /* + Do not pass NodeInfo by reference. Sometimes it dies before we use it and a segmentation fault happens. + */ + + sigc::signal source_added; + sigc::signal source_changed; + sigc::signal source_removed; + sigc::signal sink_added; + sigc::signal sink_changed; + sigc::signal sink_removed; + sigc::signal new_default_sink_name; + sigc::signal new_default_source_name; + sigc::signal device_input_route_changed; + sigc::signal device_output_route_changed; + + sigc::signal link_changed; + + private: + pw_context* context = nullptr; + pw_proxy *proxy_stream_output_sink = nullptr, *proxy_stream_input_source = nullptr; + + spa_hook core_listener{}, registry_listener{}; + + void set_metadata_target_node(const uint& origin_id, const uint& target_id, const uint64_t& target_serial) const; +}; diff --git a/include/pipe_manager_box.hpp b/include/pipe_manager_box.hpp new file mode 100644 index 0000000..86d8c49 --- /dev/null +++ b/include/pipe_manager_box.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "application.hpp" +#include "client_info_holder.hpp" +#include "module_info_holder.hpp" +#include "node_info_holder.hpp" +#include "presets_autoloading_holder.hpp" +#include "tags_resources.hpp" +#include "test_signals.hpp" +#include "ui_helpers.hpp" + +namespace ui::pipe_manager_box { + +G_BEGIN_DECLS + +#define EE_TYPE_PIPE_MANAGER_BOX (pipe_manager_box_get_type()) + +G_DECLARE_FINAL_TYPE(PipeManagerBox, pipe_manager_box, EE, PIPE_MANAGER_BOX, GtkBox) + +G_END_DECLS + +auto create() -> PipeManagerBox*; + +void setup(PipeManagerBox* self, app::Application* application); + +} // namespace ui::pipe_manager_box \ No newline at end of file diff --git a/include/pipeline_type.hpp b/include/pipeline_type.hpp new file mode 100644 index 0000000..8747ae0 --- /dev/null +++ b/include/pipeline_type.hpp @@ -0,0 +1,22 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +enum class PipelineType { input, output }; diff --git a/include/pitch.hpp b/include/pitch.hpp new file mode 100644 index 0000000..9da491e --- /dev/null +++ b/include/pitch.hpp @@ -0,0 +1,82 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "SoundTouch.h" +#include "plugin_base.hpp" + +class Pitch : public PluginBase { + public: + Pitch(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Pitch(const Pitch&) = delete; + auto operator=(const Pitch&) -> Pitch& = delete; + Pitch(const Pitch&&) = delete; + auto operator=(const Pitch&&) -> Pitch& = delete; + ~Pitch() override; + + enum class Mode { speed, quality, consistency }; + enum class Formant { shifted, preserved }; + enum class Transients { crisp, mixed, smooth }; + enum class Detector { compound, percussive, soft }; + enum class Phase { laminar, independent }; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: + bool soundtouch_ready = false; + bool notify_latency = false; + + uint latency_n_frames = 0U; + + std::vector data_L, data_R, data; + + std::deque deque_out_L, deque_out_R; + + soundtouch::SoundTouch* snd_touch = nullptr; + + bool anti_alias = false; + bool quick_seek = false; + + int sequence_length_ms = 40; + int seek_window_ms = 15; + int overlap_length_ms = 8; + + double semitones = 0.0; + double tempo_difference = 0.0; + double rate_difference = 0.0; + + void set_semitones(); + void set_sequence_length(); + void set_seek_window(); + void set_overlap_length(); + void set_quick_seek(); + void set_anti_alias(); + void set_tempo_difference(); + void set_rate_difference(); + void init_soundtouch(); +}; diff --git a/include/pitch_preset.hpp b/include/pitch_preset.hpp new file mode 100644 index 0000000..da0be45 --- /dev/null +++ b/include/pitch_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class PitchPreset : public PluginPresetBase { + public: + explicit PitchPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/pitch_ui.hpp b/include/pitch_ui.hpp new file mode 100644 index 0000000..7eea53a --- /dev/null +++ b/include/pitch_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::pitch_box { + +G_BEGIN_DECLS + +#define EE_TYPE_PITCH_BOX (pitch_box_get_type()) + +G_DECLARE_FINAL_TYPE(PitchBox, pitch_box, EE, PITCH_BOX, GtkBox) + +G_END_DECLS + +auto create() -> PitchBox*; + +void setup(PitchBox* self, std::shared_ptr pitch, const std::string& schema_path); + +} // namespace ui::pitch_box diff --git a/include/plugin_base.hpp b/include/plugin_base.hpp new file mode 100644 index 0000000..d6efba3 --- /dev/null +++ b/include/plugin_base.hpp @@ -0,0 +1,181 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include "lv2_wrapper.hpp" +#include "pipe_manager.hpp" +#include "tags_plugin_name.hpp" + +class PluginBase { + public: + PluginBase(std::string tag, + std::string plugin_name, + std::string plugin_package, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager, + const bool& enable_probe = false); + PluginBase(const PluginBase&) = delete; + auto operator=(const PluginBase&) -> PluginBase& = delete; + PluginBase(const PluginBase&&) = delete; + auto operator=(const PluginBase&&) -> PluginBase& = delete; + virtual ~PluginBase(); + + struct data; + + struct port { + struct data* data; + }; + + struct data { + struct port* in_left = nullptr; + struct port* in_right = nullptr; + + struct port* out_left = nullptr; + struct port* out_right = nullptr; + + struct port* probe_left = nullptr; + struct port* probe_right = nullptr; + + PluginBase* pb = nullptr; + }; + + const std::string log_tag; + + std::string name, package; + + pw_filter* filter = nullptr; + + pw_filter_state state = PW_FILTER_STATE_UNCONNECTED; + + bool can_get_node_id = false; + + bool enable_probe = false; + + uint n_samples = 0U; + + uint rate = 0U; + + bool package_installed = true; + + bool bypass = false; + + bool connected_to_pw = false; + + bool send_notifications = false; + + float delta_t = 0.0F; + + float notification_time_window = 1.0F / 20.0F; // seconds + + float latency_value = 0.0F; // seconds + + std::chrono::time_point clock_start; + + std::vector dummy_left, dummy_right; + + [[nodiscard]] auto get_node_id() const -> uint; + + void set_active(const bool& state) const; + + void set_post_messages(const bool& state); + + auto connect_to_pw() -> bool; + + void disconnect_from_pw(); + + void reset_settings(); + + void show_native_ui(); + + void close_native_ui(); + + void set_native_ui_update_frequency(const uint& value); + + virtual void setup(); + + virtual void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out); + + virtual void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right); + + virtual void update_probe_links(); + + virtual auto get_latency_seconds() -> float; + + sigc::signal input_level; + sigc::signal output_level; + sigc::signal latency; + + protected: + std::mutex data_mutex; + + GSettings* settings = nullptr; + + PipeManager* pm = nullptr; + + spa_hook listener{}; + + data pf_data = {}; + + bool post_messages = false; + + uint n_ports = 4U; + + float input_gain = 1.0F; + float output_gain = 1.0F; + + std::unique_ptr lv2_wrapper; + + std::vector gconnections; + + void setup_input_output_gain(); + + void initialize_listener(); + + void notify(); + + void get_peaks(const std::span& left_in, + const std::span& right_in, + std::span& left_out, + std::span& right_out); + + static void apply_gain(std::span& left, std::span& right, const float& gain); + + void update_filter_params(); + + private: + uint node_id = 0U; + + float input_peak_left = util::minimum_linear_level, input_peak_right = util::minimum_linear_level; + float output_peak_left = util::minimum_linear_level, output_peak_right = util::minimum_linear_level; +}; diff --git a/include/plugin_preset_base.hpp b/include/plugin_preset_base.hpp new file mode 100644 index 0000000..4fb5b3a --- /dev/null +++ b/include/plugin_preset_base.hpp @@ -0,0 +1,165 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include "preset_type.hpp" +#include "tags_app.hpp" +#include "tags_plugin_name.hpp" +#include "tags_schema.hpp" +#include "util.hpp" + +class PluginPresetBase { + public: + PluginPresetBase(const char* schema_id, + const char* schema_path_input, + const char* schema_path_output, + PresetType preset_type, + const int& index); + PluginPresetBase(const PluginPresetBase&) = delete; + auto operator=(const PluginPresetBase&) -> PluginPresetBase& = delete; + PluginPresetBase(const PluginPresetBase&&) = delete; + auto operator=(const PluginPresetBase&&) -> PluginPresetBase& = delete; + + virtual ~PluginPresetBase(); + + void write(nlohmann::json& json) { + try { + save(json); + } catch (const nlohmann::json::exception& e) { + util::warning(e.what()); + } + } + + void read(const nlohmann::json& json) { + /* + Old presets do not have the filter instance id. + */ + + if (!json.at(section).contains(instance_name)) { + instance_name.erase(instance_name.find('#')); + } + + // For simplicity, exceptions raised while reading presets parameters + // should be handled outside this method. + + g_settings_delay(settings); + + load(json); + + g_settings_apply(settings); + } + + protected: + int index = 0; + + GSettings* settings = nullptr; + + std::string section, instance_name; + + PresetType preset_type; + + virtual void save(nlohmann::json& json) = 0; + + virtual void load(const nlohmann::json& json) = 0; + + template + auto get_default(GSettings* settings, const std::string& key) -> T { + GVariant* variant = g_settings_get_default_value(settings, key.c_str()); + + T value{}; + + if constexpr (std::is_same_v) { + value = g_variant_get_double(variant); + } else if constexpr (std::is_same_v) { + value = g_variant_get_int32(variant); + } else if constexpr (std::is_same_v) { + value = g_variant_get_boolean(variant); + } else if constexpr (std::is_same_v) { + gsize* length = nullptr; + + value = const_cast(g_variant_get_string(variant, length)); + } + + g_variant_unref(variant); + + return value; + } + + template + void update_key(const nlohmann::json& json, + GSettings* settings, + const std::string& key, + const std::string& json_key) { + T new_value; + + if constexpr (!std::is_same_v) { + new_value = json.value(json_key, get_default(settings, key)); + } else { + std::string tmp = json.value(json_key, get_default(settings, key)); + new_value = g_strdup(tmp.c_str()); + } + + T current_value; + + if constexpr (std::is_same_v) { + current_value = g_settings_get_double(settings, key.c_str()); + } else if constexpr (std::is_same_v) { + current_value = g_settings_get_int(settings, key.c_str()); + } else if constexpr (std::is_same_v) { + current_value = g_settings_get_boolean(settings, key.c_str()); + } else if constexpr (std::is_same_v) { + current_value = g_settings_get_string(settings, key.c_str()); + } + + if (is_different(current_value, new_value)) { + if constexpr (std::is_same_v) { + g_settings_set_double(settings, key.c_str(), new_value); + } else if constexpr (std::is_same_v) { + g_settings_set_int(settings, key.c_str(), new_value); + } else if constexpr (std::is_same_v) { + g_settings_set_boolean(settings, key.c_str(), new_value); + } else if constexpr (std::is_same_v) { + g_settings_set_string(settings, key.c_str(), new_value); + } + } + + if constexpr (std::is_same_v) { + g_free(new_value); + g_free(current_value); + } + } + + private: + /* + Very naive test for equal values... + */ + + template + auto is_different(const T& a, const T& b) -> bool { + if constexpr (std::is_same_v) { + return static_cast(g_strcmp0(a, b) != 0); + } + + return a != b; + } +}; diff --git a/include/plugins_box.hpp b/include/plugins_box.hpp new file mode 100644 index 0000000..c640d89 --- /dev/null +++ b/include/plugins_box.hpp @@ -0,0 +1,67 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "application.hpp" +#include "autogain_ui.hpp" +#include "bass_enhancer_ui.hpp" +#include "bass_loudness_ui.hpp" +#include "compressor_ui.hpp" +#include "convolver_ui.hpp" +#include "crossfeed_ui.hpp" +#include "crystalizer_ui.hpp" +#include "deepfilternet_ui.hpp" +#include "deesser_ui.hpp" +#include "delay_ui.hpp" +#include "echo_canceller_ui.hpp" +#include "equalizer_ui.hpp" +#include "exciter_ui.hpp" +#include "expander_ui.hpp" +#include "filter_ui.hpp" +#include "gate_ui.hpp" +#include "level_meter_ui.hpp" +#include "limiter_ui.hpp" +#include "loudness_ui.hpp" +#include "maximizer_ui.hpp" +#include "multiband_compressor_ui.hpp" +#include "multiband_gate_ui.hpp" +#include "pipeline_type.hpp" +#include "pitch_ui.hpp" +#include "plugins_menu.hpp" +#include "reverb_ui.hpp" +#include "rnnoise_ui.hpp" +#include "speex_ui.hpp" +#include "stereo_tools_ui.hpp" + +namespace ui::plugins_box { + +G_BEGIN_DECLS + +#define EE_TYPE_PLUGINS_BOX (plugins_box_get_type()) + +G_DECLARE_FINAL_TYPE(PluginsBox, plugins_box, EE, PLUGINS_BOX, GtkBox) + +G_END_DECLS + +auto create() -> PluginsBox*; + +void setup(PluginsBox* self, app::Application* application, PipelineType pipeline_type); + +} // namespace ui::plugins_box diff --git a/include/plugins_menu.hpp b/include/plugins_menu.hpp new file mode 100644 index 0000000..484ea3e --- /dev/null +++ b/include/plugins_menu.hpp @@ -0,0 +1,45 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include "application.hpp" +#include "pipeline_type.hpp" +#include "tags_plugin_name.hpp" +#include "tags_resources.hpp" +#include "util.hpp" + +namespace ui::plugins_menu { + +G_BEGIN_DECLS + +#define EE_TYPE_PLUGINS_MENU (plugins_menu_get_type()) + +G_DECLARE_FINAL_TYPE(PluginsMenu, plugins_menu, EE, PLUGINS_MENU, GtkPopover) + +G_END_DECLS + +auto create() -> PluginsMenu*; + +void setup(PluginsMenu* self, app::Application* application, PipelineType pipeline_type); + +} // namespace ui::plugins_menu diff --git a/include/preferences_general.hpp b/include/preferences_general.hpp new file mode 100644 index 0000000..eab787e --- /dev/null +++ b/include/preferences_general.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include "tags_resources.hpp" +#include "ui_helpers.hpp" +#include "util.hpp" + +#ifdef ENABLE_LIBPORTAL +#include "libportal.hpp" +#endif + +namespace ui::preferences::general { + +G_BEGIN_DECLS + +#define EE_TYPE_PREFERENCES_GENERAL (preferences_general_get_type()) + +G_DECLARE_FINAL_TYPE(PreferencesGeneral, preferences_general, EE, PREFERENCES_GENERAL, AdwPreferencesPage) + +G_END_DECLS + +auto create() -> PreferencesGeneral*; + +} // namespace ui::preferences::general \ No newline at end of file diff --git a/include/preferences_spectrum.hpp b/include/preferences_spectrum.hpp new file mode 100644 index 0000000..fefbadc --- /dev/null +++ b/include/preferences_spectrum.hpp @@ -0,0 +1,40 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "tags_resources.hpp" +#include "tags_schema.hpp" +#include "ui_helpers.hpp" +#include "util.hpp" + +namespace ui::preferences::spectrum { + +G_BEGIN_DECLS + +#define EE_TYPE_PREFERENCES_SPECTRUM (preferences_spectrum_get_type()) + +G_DECLARE_FINAL_TYPE(PreferencesSpectrum, preferences_spectrum, EE, PREFERENCES_SPECTRUM, AdwPreferencesPage) + +G_END_DECLS + +auto create() -> PreferencesSpectrum*; + +} // namespace ui::preferences::spectrum \ No newline at end of file diff --git a/include/preferences_window.hpp b/include/preferences_window.hpp new file mode 100644 index 0000000..fc46b13 --- /dev/null +++ b/include/preferences_window.hpp @@ -0,0 +1,37 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "preferences_general.hpp" +#include "preferences_spectrum.hpp" + +namespace ui::preferences::window { + +G_BEGIN_DECLS + +#define EE_TYPE_PREFERENCES_WINDOW (preferences_window_get_type()) + +G_DECLARE_FINAL_TYPE(PreferencesWindow, preferences_window, EE, PREFERENCES_WINDOW, AdwPreferencesWindow) + +G_END_DECLS + +auto create() -> PreferencesWindow*; + +} // namespace ui::preferences::window \ No newline at end of file diff --git a/include/preset_type.hpp b/include/preset_type.hpp new file mode 100644 index 0000000..b5141e3 --- /dev/null +++ b/include/preset_type.hpp @@ -0,0 +1,22 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +enum class PresetType { input, output }; diff --git a/include/presets_autoloading_holder.hpp b/include/presets_autoloading_holder.hpp new file mode 100644 index 0000000..071988a --- /dev/null +++ b/include/presets_autoloading_holder.hpp @@ -0,0 +1,51 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "util.hpp" + +namespace ui::holders { + +G_BEGIN_DECLS + +#define EE_TYPE_PRESETS_AUTOLOADING_HOLDER (presets_autoloading_holder_get_type()) + +G_DECLARE_FINAL_TYPE(PresetsAutoloadingHolder, presets_autoloading_holder, EE, PRESETS_AUTOLOADING_HOLDER, GObject) + +G_END_DECLS + +struct PresetsAutoLoadingData { + public: + std::string device, device_description, device_profile, preset_name; +}; + +struct _PresetsAutoloadingHolder { + GObject parent_instance; + + PresetsAutoLoadingData* data; +}; + +auto create(const std::string& device, + const std::string& device_description, + const std::string& device_profile, + const std::string& preset_name) -> PresetsAutoloadingHolder*; + +} // namespace ui::holders \ No newline at end of file diff --git a/include/presets_manager.hpp b/include/presets_manager.hpp new file mode 100644 index 0000000..b3c0ebe --- /dev/null +++ b/include/presets_manager.hpp @@ -0,0 +1,154 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include "autogain_preset.hpp" +#include "bass_enhancer_preset.hpp" +#include "bass_loudness_preset.hpp" +#include "compressor_preset.hpp" +#include "convolver_preset.hpp" +#include "crossfeed_preset.hpp" +#include "crystalizer_preset.hpp" +#include "deesser_preset.hpp" +#include "delay_preset.hpp" +#include "echo_canceller_preset.hpp" +#include "equalizer_preset.hpp" +#include "exciter_preset.hpp" +#include "expander_preset.hpp" +#include "filter_preset.hpp" +#include "gate_preset.hpp" +#include "level_meter_preset.hpp" +#include "limiter_preset.hpp" +#include "loudness_preset.hpp" +#include "maximizer_preset.hpp" +#include "multiband_compressor_preset.hpp" +#include "multiband_gate_preset.hpp" +#include "pitch_preset.hpp" +#include "preset_type.hpp" +#include "reverb_preset.hpp" +#include "rnnoise_preset.hpp" +#include "speex_preset.hpp" +#include "stereo_tools_preset.hpp" +#include "tags_plugin_name.hpp" +#include "util.hpp" + +class PresetsManager { + public: + PresetsManager(); + PresetsManager(const PresetsManager&) = delete; + auto operator=(const PresetsManager&) -> PresetsManager& = delete; + PresetsManager(const PresetsManager&&) = delete; + auto operator=(const PresetsManager&&) -> PresetsManager& = delete; + ~PresetsManager(); + + enum class PresetError { + blocklist_format, + blocklist_generic, + pipeline_format, + pipeline_generic, + plugin_format, + plugin_generic + }; + + // signal sending title and description strings + sigc::signal preset_load_error; + + auto get_names(const PresetType& preset_type) -> std::vector; + + auto search_names(std::filesystem::directory_iterator& it) -> std::vector; + + void add(const PresetType& preset_type, const std::string& name); + + void save_preset_file(const PresetType& preset_type, const std::string& name); + + static void write_plugins_preset(const PresetType& preset_type, + const std::vector& plugins, + nlohmann::json& json); + + void remove(const PresetType& preset_type, const std::string& name); + + auto load_preset_file(const PresetType& preset_type, const std::string& name) -> bool; + + auto read_plugins_preset(const PresetType& preset_type, + const std::vector& plugins, + const nlohmann::json& json) -> bool; + + void import(const PresetType& preset_type, const std::string& file_path); + + void add_autoload(const PresetType& preset_type, + const std::string& preset_name, + const std::string& device_name, + const std::string& device_description, + const std::string& device_profile); + + void remove_autoload(const PresetType& preset_type, + const std::string& preset_name, + const std::string& device_name, + const std::string& device_profile); + + auto find_autoload(const PresetType& preset_type, const std::string& device_name, const std::string& device_profile) + -> std::string; + + void autoload(const PresetType& preset_type, const std::string& device_name, const std::string& device_profile); + + auto get_autoload_profiles(const PresetType& preset_type) -> std::vector; + + auto preset_file_exists(const PresetType& preset_type, const std::string& name) -> bool; + + sigc::signal user_output_preset_created; + sigc::signal user_output_preset_removed; + sigc::signal user_input_preset_created; + sigc::signal user_input_preset_removed; + + sigc::signal& profiles)> autoload_input_profiles_changed; + sigc::signal& profiles)> autoload_output_profiles_changed; + + private: + const std::string json_ext = ".json"; + + std::string user_config_dir; + + std::filesystem::path user_presets_dir, user_input_dir, user_output_dir, autoload_input_dir, autoload_output_dir; + + GSettings *settings = nullptr, *soe_settings = nullptr, *sie_settings = nullptr; + + GFileMonitor *user_output_monitor = nullptr, *user_input_monitor = nullptr; + + GFileMonitor *autoload_output_monitor = nullptr, *autoload_input_monitor = nullptr; + + static void create_user_directory(const std::filesystem::path& path); + + void save_blocklist(const PresetType& preset_type, nlohmann::json& json); + + auto load_blocklist(const PresetType& preset_type, const nlohmann::json& json) -> bool; + + void notify_error(const PresetError& preset_error, const std::string& plugin_name = ""); + + static auto create_wrapper(const PresetType& preset_type, std::string_view filter_name) + -> std::optional>; +}; diff --git a/include/presets_menu.hpp b/include/presets_menu.hpp new file mode 100644 index 0000000..521181b --- /dev/null +++ b/include/presets_menu.hpp @@ -0,0 +1,42 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "application.hpp" +#include "config.h" +#include "preset_type.hpp" +#include "tags_resources.hpp" + +namespace ui::presets_menu { + +G_BEGIN_DECLS + +#define EE_TYPE_PRESETS_MENU (presets_menu_get_type()) + +G_DECLARE_FINAL_TYPE(PresetsMenu, presets_menu, EE, PRESETS_MENU, GtkPopover) + +G_END_DECLS + +auto create() -> PresetsMenu*; + +void setup(PresetsMenu* self, app::Application* application, PresetType preset_type); + +} // namespace ui::presets_menu diff --git a/include/resampler.hpp b/include/resampler.hpp new file mode 100644 index 0000000..033a58a --- /dev/null +++ b/include/resampler.hpp @@ -0,0 +1,73 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include + +class Resampler { + public: + Resampler(const int& input_rate, const int& output_rate); + Resampler(const Resampler&) = delete; + auto operator=(const Resampler&) -> Resampler& = delete; + Resampler(const Resampler&&) = delete; + auto operator=(const Resampler&&) -> Resampler& = delete; + ~Resampler(); + + template + auto process(const T& input, const bool& end_of_input) -> const std::vector& { + output.resize(std::ceil(1.5 * resample_ratio * input.size())); + + // The number of frames of data pointed to by data_in + src_data.input_frames = input.size(); + + // A pointer to the input data samples + src_data.data_in = input.data(); + + // Maximum number of frames pointed to by data_out + src_data.output_frames = static_cast(output.size()); + + // A pointer to the output data samples + src_data.data_out = output.data(); + + // Equal to output_sample_rate / input_sample_rate + src_data.src_ratio = resample_ratio; + + // Equal to 0 if more input data is available and 1 otherwise + src_data.end_of_input = static_cast(end_of_input); + + src_process(src_state, &src_data); + + output.resize(src_data.output_frames_gen); + + return output; + } + + private: + double resample_ratio = 1.0; + + SRC_STATE* src_state = nullptr; + + SRC_DATA src_data{}; + + std::vector output; +}; diff --git a/include/reverb.hpp b/include/reverb.hpp new file mode 100644 index 0000000..c54907f --- /dev/null +++ b/include/reverb.hpp @@ -0,0 +1,43 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class Reverb : public PluginBase { + public: + Reverb(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Reverb(const Reverb&) = delete; + auto operator=(const Reverb&) -> Reverb& = delete; + Reverb(const Reverb&&) = delete; + auto operator=(const Reverb&&) -> Reverb& = delete; + ~Reverb() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: +}; diff --git a/include/reverb_preset.hpp b/include/reverb_preset.hpp new file mode 100644 index 0000000..e2089fc --- /dev/null +++ b/include/reverb_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class ReverbPreset : public PluginPresetBase { + public: + explicit ReverbPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/reverb_ui.hpp b/include/reverb_ui.hpp new file mode 100644 index 0000000..c2ac7fa --- /dev/null +++ b/include/reverb_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::reverb_box { + +G_BEGIN_DECLS + +#define EE_TYPE_REVERB_BOX (reverb_box_get_type()) + +G_DECLARE_FINAL_TYPE(ReverbBox, reverb_box, EE, REVERB_BOX, GtkBox) + +G_END_DECLS + +auto create() -> ReverbBox*; + +void setup(ReverbBox* self, std::shared_ptr reverb, const std::string& schema_path); + +} // namespace ui::reverb_box diff --git a/include/rnnoise.hpp b/include/rnnoise.hpp new file mode 100644 index 0000000..ec60326 --- /dev/null +++ b/include/rnnoise.hpp @@ -0,0 +1,188 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#ifdef ENABLE_RNNOISE +#include +#endif + +#include +#include "plugin_base.hpp" +#include "resampler.hpp" + +class RNNoise : public PluginBase { + public: + RNNoise(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + RNNoise(const RNNoise&) = delete; + auto operator=(const RNNoise&) -> RNNoise& = delete; + RNNoise(const RNNoise&&) = delete; + auto operator=(const RNNoise&&) -> RNNoise& = delete; + ~RNNoise() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + void init_release(); + +#ifndef ENABLE_RNNOISE + bool package_installed = false; +#endif + + bool standard_model = true; + + sigc::signal model_changed; + + private: + bool resample = false; + bool notify_latency = false; + bool rnnoise_ready = false; + bool resampler_ready = false; + bool enable_vad = false; + + uint blocksize = 480U; + uint rnnoise_rate = 48000U; + uint latency_n_frames = 0U; + + float vad_thres = 0.95F; + float wet_ratio = 1.0F; + uint release = 2U; + + const float inv_short_max = 1.0F / (SHRT_MAX + 1.0F); + + std::deque deque_out_L, deque_out_R; + + std::vector data_L, data_R, data_tmp; + std::vector resampled_data_L, resampled_data_R; + + std::unique_ptr resampler_inL, resampler_outL; + std::unique_ptr resampler_inR, resampler_outR; + +#ifdef ENABLE_RNNOISE + + RNNModel* model = nullptr; + + DenoiseState *state_left = nullptr, *state_right = nullptr; + + float vad_prob_left, vad_prob_right; + int vad_grace_left, vad_grace_right; + + auto get_model_from_file() -> RNNModel*; + + void free_rnnoise(); + + template + void remove_noise(const T1& left_in, const T1& right_in, T2& out_L, T2& out_R) { + for (const auto& v : left_in) { + data_L.push_back(v); + + if (data_L.size() == blocksize) { + if (state_left != nullptr) { + std::ranges::for_each(data_L, [](auto& v) { v *= static_cast(SHRT_MAX + 1); }); + + data_tmp = data_L; + + vad_prob_left = rnnoise_process_frame(state_left, data_L.data(), data_L.data()); + + if (enable_vad) { + if (vad_prob_left >= vad_thres) { + vad_grace_left = release; + } + + if (vad_grace_left >= 0) { + --vad_grace_left; + + for (size_t i = 0U; i < data_L.size(); i++) { + data_L[i] = data_L[i] * wet_ratio + data_tmp[i] * (1.0F - wet_ratio); + + data_L[i] *= inv_short_max; + } + } else { + std::ranges::for_each(data_L, [&](auto& v) { v = 0.0F; }); + } + } else { + for (size_t i = 0U; i < data_L.size(); i++) { + data_L[i] = data_L[i] * wet_ratio + data_tmp[i] * (1.0F - wet_ratio); + + data_L[i] *= inv_short_max; + } + } + } + + for (const auto& v : data_L) { + out_L.push_back(v); + } + + data_L.resize(0U); + } + } + + for (const auto& v : right_in) { + data_R.push_back(v); + + if (data_R.size() == blocksize) { + if (state_right != nullptr) { + std::ranges::for_each(data_R, [](auto& v) { v *= static_cast(SHRT_MAX + 1); }); + + data_tmp = data_R; + + vad_prob_right = rnnoise_process_frame(state_right, data_R.data(), data_R.data()); + + if (enable_vad) { + if (vad_prob_right >= vad_thres) { + vad_grace_right = release; + } + + if (vad_grace_right >= 0) { + --vad_grace_right; + + for (size_t i = 0U; i < data_R.size(); i++) { + data_R[i] = data_R[i] * wet_ratio + data_tmp[i] * (1.0F - wet_ratio); + + data_R[i] *= inv_short_max; + } + } else { + std::ranges::for_each(data_R, [&](auto& v) { v = 0.0F; }); + } + } else { + for (size_t i = 0U; i < data_R.size(); i++) { + data_R[i] = data_R[i] * wet_ratio + data_tmp[i] * (1.0F - wet_ratio); + + data_R[i] *= inv_short_max; + } + } + } + + for (const auto& v : data_R) { + out_R.push_back(v); + } + + data_R.resize(0U); + } + } + } + +#endif +}; diff --git a/include/rnnoise_preset.hpp b/include/rnnoise_preset.hpp new file mode 100644 index 0000000..143e586 --- /dev/null +++ b/include/rnnoise_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class RNNoisePreset : public PluginPresetBase { + public: + explicit RNNoisePreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/rnnoise_ui.hpp b/include/rnnoise_ui.hpp new file mode 100644 index 0000000..db3929a --- /dev/null +++ b/include/rnnoise_ui.hpp @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "application.hpp" +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::rnnoise_box { + +G_BEGIN_DECLS + +#define EE_TYPE_RNNOISE_BOX (rnnoise_box_get_type()) + +G_DECLARE_FINAL_TYPE(RNNoiseBox, rnnoise_box, EE, RNNOISE_BOX, GtkBox) + +G_END_DECLS + +auto create() -> RNNoiseBox*; + +void setup(RNNoiseBox* self, + std::shared_ptr rnnoise, + const std::string& schema_path, + app::Application* application); + +} // namespace ui::rnnoise_box diff --git a/include/spectrum.hpp b/include/spectrum.hpp new file mode 100644 index 0000000..d6738c3 --- /dev/null +++ b/include/spectrum.hpp @@ -0,0 +1,62 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include "plugin_base.hpp" + +class Spectrum : public PluginBase { + public: + Spectrum(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + Spectrum(const Spectrum&) = delete; + auto operator=(const Spectrum&) -> Spectrum& = delete; + Spectrum(const Spectrum&&) = delete; + auto operator=(const Spectrum&&) -> Spectrum& = delete; + ~Spectrum() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + sigc::signal)> power; // rate, nbands, magnitudes + + private: + bool fftw_ready = false; + + fftwf_plan plan = nullptr; + + fftwf_complex* complex_output = nullptr; + + std::vector real_input; + std::vector output; + + uint n_bands = 8192U; + + std::deque deque_in_mono; +}; diff --git a/include/speex.hpp b/include/speex.hpp new file mode 100644 index 0000000..fd40ba8 --- /dev/null +++ b/include/speex.hpp @@ -0,0 +1,60 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include + +#include +#include "plugin_base.hpp" +class Speex : public PluginBase { + public: + Speex(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager); + Speex(const Speex&) = delete; + auto operator=(const Speex&) -> Speex& = delete; + Speex(const Speex&&) = delete; + auto operator=(const Speex&&) -> Speex& = delete; + ~Speex() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + private: + bool speex_ready = false; + + int enable_denoise = 0, noise_suppression = -15, enable_agc = 0, enable_vad = 0, vad_probability_start = 95, + vad_probability_continue = 90, enable_dereverb = 0; + + uint latency_n_frames = 0U; + + const float inv_short_max = 1.0F / (SHRT_MAX + 1); + + std::vector data_L, data_R; + + SpeexPreprocessState *state_left = nullptr, *state_right = nullptr; + + void free_speex(); + +}; diff --git a/include/speex_preset.hpp b/include/speex_preset.hpp new file mode 100644 index 0000000..de0dd1c --- /dev/null +++ b/include/speex_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class SpeexPreset : public PluginPresetBase { + public: + explicit SpeexPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/speex_ui.hpp b/include/speex_ui.hpp new file mode 100644 index 0000000..8e12a02 --- /dev/null +++ b/include/speex_ui.hpp @@ -0,0 +1,42 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "application.hpp" +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::speex_box { + +G_BEGIN_DECLS + +#define EE_TYPE_SPEEX_BOX (speex_box_get_type()) + +G_DECLARE_FINAL_TYPE(SpeexBox, speex_box, EE, SPEEX_BOX, GtkBox) + +G_END_DECLS + +auto create() -> SpeexBox*; + +void setup(SpeexBox* self, std::shared_ptr speex, const std::string& schema_path, app::Application* application); + +} // namespace ui::speex_box diff --git a/include/stereo_tools.hpp b/include/stereo_tools.hpp new file mode 100644 index 0000000..d631991 --- /dev/null +++ b/include/stereo_tools.hpp @@ -0,0 +1,49 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_base.hpp" + +class StereoTools : public PluginBase { + public: + StereoTools(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager); + StereoTools(const StereoTools&) = delete; + auto operator=(const StereoTools&) -> StereoTools& = delete; + StereoTools(const StereoTools&&) = delete; + auto operator=(const StereoTools&&) -> StereoTools& = delete; + ~StereoTools() override; + + void setup() override; + + void process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) override; + + auto get_latency_seconds() -> float override; + + double correlation_port_value = 0.0; + + private: + float dry = 0.0F, wet = 1.0F; +}; diff --git a/include/stereo_tools_preset.hpp b/include/stereo_tools_preset.hpp new file mode 100644 index 0000000..beb1d96 --- /dev/null +++ b/include/stereo_tools_preset.hpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "plugin_preset_base.hpp" + +class StereoToolsPreset : public PluginPresetBase { + public: + explicit StereoToolsPreset(PresetType preset_type, const int& index = 0); + + private: + void save(nlohmann::json& json) override; + + void load(const nlohmann::json& json) override; +}; diff --git a/include/stereo_tools_ui.hpp b/include/stereo_tools_ui.hpp new file mode 100644 index 0000000..aecf01b --- /dev/null +++ b/include/stereo_tools_ui.hpp @@ -0,0 +1,41 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include "effects_base.hpp" +#include "tags_resources.hpp" +#include "ui_helpers.hpp" + +namespace ui::stereo_tools_box { + +G_BEGIN_DECLS + +#define EE_TYPE_STEREO_TOOLS_BOX (stereo_tools_box_get_type()) + +G_DECLARE_FINAL_TYPE(StereoToolsBox, stereo_tools_box, EE, STEREO_TOOLS_BOX, GtkBox) + +G_END_DECLS + +auto create() -> StereoToolsBox*; + +void setup(StereoToolsBox* self, std::shared_ptr stereo_tools, const std::string& schema_path); + +} // namespace ui::stereo_tools_box diff --git a/include/stream_input_effects.hpp b/include/stream_input_effects.hpp new file mode 100644 index 0000000..4326814 --- /dev/null +++ b/include/stream_input_effects.hpp @@ -0,0 +1,49 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "effects_base.hpp" + +class StreamInputEffects : public EffectsBase { + public: + StreamInputEffects(PipeManager* pipe_manager); + StreamInputEffects(const StreamInputEffects&) = delete; + auto operator=(const StreamInputEffects&) -> StreamInputEffects& = delete; + StreamInputEffects(const StreamInputEffects&&) = delete; + auto operator=(const StreamInputEffects&&) -> StreamInputEffects& = delete; + ~StreamInputEffects() override; + + void set_bypass(const bool& state); + + void set_listen_to_mic(const bool& state); + + private: + bool bypass = false; + + void connect_filters(const bool& bypass = false); + + void disconnect_filters(); + + auto apps_want_to_play() -> bool; + + void on_app_added(NodeInfo node_info); + + void on_link_changed(LinkInfo link_info); +}; diff --git a/include/stream_output_effects.hpp b/include/stream_output_effects.hpp new file mode 100644 index 0000000..487c80e --- /dev/null +++ b/include/stream_output_effects.hpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include "effects_base.hpp" + +class StreamOutputEffects : public EffectsBase { + public: + StreamOutputEffects(PipeManager* pipe_manager); + StreamOutputEffects(const StreamOutputEffects&) = delete; + auto operator=(const StreamOutputEffects&) -> StreamOutputEffects& = delete; + StreamOutputEffects(const StreamOutputEffects&&) = delete; + auto operator=(const StreamOutputEffects&&) -> StreamOutputEffects& = delete; + ~StreamOutputEffects() override; + + void set_bypass(const bool& state); + + private: + bool bypass = false; + + void connect_filters(const bool& bypass = false); + + void disconnect_filters(); + + auto apps_want_to_play() -> bool; + + void on_app_added(NodeInfo node_info); + + void on_link_changed(LinkInfo link_info); +}; diff --git a/include/string_literal_wrapper.hpp b/include/string_literal_wrapper.hpp new file mode 100644 index 0000000..5a34688 --- /dev/null +++ b/include/string_literal_wrapper.hpp @@ -0,0 +1,34 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include + +template +struct StringLiteralWrapper { + // NOLINTNEXTLINE(hicpp-explicit-conversions) + constexpr StringLiteralWrapper(const char (&str)[N]) : msg(std::to_array(str)) {} + + // NOLINTNEXTLINE(hicpp-explicit-conversions) + constexpr StringLiteralWrapper(std::array arr) : msg(arr) {} + + std::array msg; +}; diff --git a/include/tags_app.hpp b/include/tags_app.hpp new file mode 100644 index 0000000..7874bfd --- /dev/null +++ b/include/tags_app.hpp @@ -0,0 +1,36 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include + +namespace tags::app { + +inline constexpr auto minimum_pw_version = "0.3.44"; + +inline constexpr auto id = "com.github.wwmm.easyeffects"; + +inline constexpr auto path = "/com/github/wwmm/easyeffects"; + +inline constexpr auto path_stream_inputs = "/com/github/wwmm/easyeffects/streaminputs/"; + +inline constexpr auto path_stream_outputs = "/com/github/wwmm/easyeffects/streamoutputs/"; + +} // namespace tags::app diff --git a/include/tags_equalizer.hpp b/include/tags_equalizer.hpp new file mode 100644 index 0000000..1b41485 --- /dev/null +++ b/include/tags_equalizer.hpp @@ -0,0 +1,234 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include + +namespace tags::equalizer { + +// bands + +constexpr auto band_id = std::to_array( + {"band0", "band1", "band2", "band3", "band4", "band5", "band6", "band7", "band8", "band9", "band10", + "band11", "band12", "band13", "band14", "band15", "band16", "band17", "band18", "band19", "band20", "band21", + "band22", "band23", "band24", "band25", "band26", "band27", "band28", "band29", "band30", "band31"}); + +constexpr auto band_type = + std::to_array({{"band0-type"}, {"band1-type"}, {"band2-type"}, {"band3-type"}, + {"band4-type"}, {"band5-type"}, {"band6-type"}, {"band7-type"}, + {"band8-type"}, {"band9-type"}, {"band10-type"}, {"band11-type"}, + {"band12-type"}, {"band13-type"}, {"band14-type"}, {"band15-type"}, + {"band16-type"}, {"band17-type"}, {"band18-type"}, {"band19-type"}, + {"band20-type"}, {"band21-type"}, {"band22-type"}, {"band23-type"}, + {"band24-type"}, {"band25-type"}, {"band26-type"}, {"band27-type"}, + {"band28-type"}, {"band29-type"}, {"band30-type"}, std::to_array("band31-type")}); + +constexpr auto band_mode = + std::to_array({{"band0-mode"}, {"band1-mode"}, {"band2-mode"}, {"band3-mode"}, + {"band4-mode"}, {"band5-mode"}, {"band6-mode"}, {"band7-mode"}, + {"band8-mode"}, {"band9-mode"}, {"band10-mode"}, {"band11-mode"}, + {"band12-mode"}, {"band13-mode"}, {"band14-mode"}, {"band15-mode"}, + {"band16-mode"}, {"band17-mode"}, {"band18-mode"}, {"band19-mode"}, + {"band20-mode"}, {"band21-mode"}, {"band22-mode"}, {"band23-mode"}, + {"band24-mode"}, {"band25-mode"}, {"band26-mode"}, {"band27-mode"}, + {"band28-mode"}, {"band29-mode"}, {"band30-mode"}, std::to_array("band31-mode")}); + +constexpr auto band_slope = + std::to_array({{"band0-slope"}, {"band1-slope"}, {"band2-slope"}, {"band3-slope"}, + {"band4-slope"}, {"band5-slope"}, {"band6-slope"}, {"band7-slope"}, + {"band8-slope"}, {"band9-slope"}, {"band10-slope"}, {"band11-slope"}, + {"band12-slope"}, {"band13-slope"}, {"band14-slope"}, {"band15-slope"}, + {"band16-slope"}, {"band17-slope"}, {"band18-slope"}, {"band19-slope"}, + {"band20-slope"}, {"band21-slope"}, {"band22-slope"}, {"band23-slope"}, + {"band24-slope"}, {"band25-slope"}, {"band26-slope"}, {"band27-slope"}, + {"band28-slope"}, {"band29-slope"}, {"band30-slope"}, std::to_array("band31-slope")}); + +constexpr auto band_solo = + std::to_array({{"band0-solo"}, {"band1-solo"}, {"band2-solo"}, {"band3-solo"}, + {"band4-solo"}, {"band5-solo"}, {"band6-solo"}, {"band7-solo"}, + {"band8-solo"}, {"band9-solo"}, {"band10-solo"}, {"band11-solo"}, + {"band12-solo"}, {"band13-solo"}, {"band14-solo"}, {"band15-solo"}, + {"band16-solo"}, {"band17-solo"}, {"band18-solo"}, {"band19-solo"}, + {"band20-solo"}, {"band21-solo"}, {"band22-solo"}, {"band23-solo"}, + {"band24-solo"}, {"band25-solo"}, {"band26-solo"}, {"band27-solo"}, + {"band28-solo"}, {"band29-solo"}, {"band30-solo"}, std::to_array("band31-solo")}); + +constexpr auto band_mute = + std::to_array({{"band0-mute"}, {"band1-mute"}, {"band2-mute"}, {"band3-mute"}, + {"band4-mute"}, {"band5-mute"}, {"band6-mute"}, {"band7-mute"}, + {"band8-mute"}, {"band9-mute"}, {"band10-mute"}, {"band11-mute"}, + {"band12-mute"}, {"band13-mute"}, {"band14-mute"}, {"band15-mute"}, + {"band16-mute"}, {"band17-mute"}, {"band18-mute"}, {"band19-mute"}, + {"band20-mute"}, {"band21-mute"}, {"band22-mute"}, {"band23-mute"}, + {"band24-mute"}, {"band25-mute"}, {"band26-mute"}, {"band27-mute"}, + {"band28-mute"}, {"band29-mute"}, {"band30-mute"}, std::to_array("band31-mute")}); + +constexpr auto band_frequency = std::to_array( + {{"band0-frequency"}, {"band1-frequency"}, {"band2-frequency"}, {"band3-frequency"}, + {"band4-frequency"}, {"band5-frequency"}, {"band6-frequency"}, {"band7-frequency"}, + {"band8-frequency"}, {"band9-frequency"}, {"band10-frequency"}, {"band11-frequency"}, + {"band12-frequency"}, {"band13-frequency"}, {"band14-frequency"}, {"band15-frequency"}, + {"band16-frequency"}, {"band17-frequency"}, {"band18-frequency"}, {"band19-frequency"}, + {"band20-frequency"}, {"band21-frequency"}, {"band22-frequency"}, {"band23-frequency"}, + {"band24-frequency"}, {"band25-frequency"}, {"band26-frequency"}, {"band27-frequency"}, + {"band28-frequency"}, {"band29-frequency"}, {"band30-frequency"}, std::to_array("band31-frequency")}); + +constexpr auto band_q = std::to_array({{"band0-q"}, {"band1-q"}, {"band2-q"}, {"band3-q"}, + {"band4-q"}, {"band5-q"}, {"band6-q"}, {"band7-q"}, + {"band8-q"}, {"band9-q"}, {"band10-q"}, {"band11-q"}, + {"band12-q"}, {"band13-q"}, {"band14-q"}, {"band15-q"}, + {"band16-q"}, {"band17-q"}, {"band18-q"}, {"band19-q"}, + {"band20-q"}, {"band21-q"}, {"band22-q"}, {"band23-q"}, + {"band24-q"}, {"band25-q"}, {"band26-q"}, {"band27-q"}, + {"band28-q"}, {"band29-q"}, {"band30-q"}, std::to_array("band31-q")}); + +constexpr auto band_width = + std::to_array({{"band0-width"}, {"band1-width"}, {"band2-width"}, {"band3-width"}, + {"band4-width"}, {"band5-width"}, {"band6-width"}, {"band7-width"}, + {"band8-width"}, {"band9-width"}, {"band10-width"}, {"band11-width"}, + {"band12-width"}, {"band13-width"}, {"band14-width"}, {"band15-width"}, + {"band16-width"}, {"band17-width"}, {"band18-width"}, {"band19-width"}, + {"band20-width"}, {"band21-width"}, {"band22-width"}, {"band23-width"}, + {"band24-width"}, {"band25-width"}, {"band26-width"}, {"band27-width"}, + {"band28-width"}, {"band29-width"}, {"band30-width"}, std::to_array("band31-width")}); + +constexpr auto band_gain = + std::to_array({{"band0-gain"}, {"band1-gain"}, {"band2-gain"}, {"band3-gain"}, + {"band4-gain"}, {"band5-gain"}, {"band6-gain"}, {"band7-gain"}, + {"band8-gain"}, {"band9-gain"}, {"band10-gain"}, {"band11-gain"}, + {"band12-gain"}, {"band13-gain"}, {"band14-gain"}, {"band15-gain"}, + {"band16-gain"}, {"band17-gain"}, {"band18-gain"}, {"band19-gain"}, + {"band20-gain"}, {"band21-gain"}, {"band22-gain"}, {"band23-gain"}, + {"band24-gain"}, {"band25-gain"}, {"band26-gain"}, {"band27-gain"}, + {"band28-gain"}, {"band29-gain"}, {"band30-gain"}, std::to_array("band31-gain")}); + +// left channel + +constexpr auto ftl = std::to_array( + {{"ftl_0"}, {"ftl_1"}, {"ftl_2"}, {"ftl_3"}, {"ftl_4"}, {"ftl_5"}, {"ftl_6"}, {"ftl_7"}, + {"ftl_8"}, {"ftl_9"}, {"ftl_10"}, {"ftl_11"}, {"ftl_12"}, {"ftl_13"}, {"ftl_14"}, {"ftl_15"}, + {"ftl_16"}, {"ftl_17"}, {"ftl_18"}, {"ftl_19"}, {"ftl_20"}, {"ftl_21"}, {"ftl_22"}, {"ftl_23"}, + {"ftl_24"}, {"ftl_25"}, {"ftl_26"}, {"ftl_27"}, {"ftl_28"}, {"ftl_29"}, {"ftl_30"}, std::to_array("ftl_31")}); + +constexpr auto fml = std::to_array( + {{"fml_0"}, {"fml_1"}, {"fml_2"}, {"fml_3"}, {"fml_4"}, {"fml_5"}, {"fml_6"}, {"fml_7"}, + {"fml_8"}, {"fml_9"}, {"fml_10"}, {"fml_11"}, {"fml_12"}, {"fml_13"}, {"fml_14"}, {"fml_15"}, + {"fml_16"}, {"fml_17"}, {"fml_18"}, {"fml_19"}, {"fml_20"}, {"fml_21"}, {"fml_22"}, {"fml_23"}, + {"fml_24"}, {"fml_25"}, {"fml_26"}, {"fml_27"}, {"fml_28"}, {"fml_29"}, {"fml_30"}, std::to_array("fml_31")}); + +constexpr auto sl = std::to_array( + {{"sl_0"}, {"sl_1"}, {"sl_2"}, {"sl_3"}, {"sl_4"}, {"sl_5"}, {"sl_6"}, {"sl_7"}, + {"sl_8"}, {"sl_9"}, {"sl_10"}, {"sl_11"}, {"sl_12"}, {"sl_13"}, {"sl_14"}, {"sl_15"}, + {"sl_16"}, {"sl_17"}, {"sl_18"}, {"sl_19"}, {"sl_20"}, {"sl_21"}, {"sl_22"}, {"sl_23"}, + {"sl_24"}, {"sl_25"}, {"sl_26"}, {"sl_27"}, {"sl_28"}, {"sl_29"}, {"sl_30"}, std::to_array("sl_31")}); + +constexpr auto xsl = std::to_array( + {{"xsl_0"}, {"xsl_1"}, {"xsl_2"}, {"xsl_3"}, {"xsl_4"}, {"xsl_5"}, {"xsl_6"}, {"xsl_7"}, + {"xsl_8"}, {"xsl_9"}, {"xsl_10"}, {"xsl_11"}, {"xsl_12"}, {"xsl_13"}, {"xsl_14"}, {"xsl_15"}, + {"xsl_16"}, {"xsl_17"}, {"xsl_18"}, {"xsl_19"}, {"xsl_20"}, {"xsl_21"}, {"xsl_22"}, {"xsl_23"}, + {"xsl_24"}, {"xsl_25"}, {"xsl_26"}, {"xsl_27"}, {"xsl_28"}, {"xsl_29"}, {"xsl_30"}, std::to_array("xsl_31")}); + +constexpr auto xml = std::to_array( + {{"xml_0"}, {"xml_1"}, {"xml_2"}, {"xml_3"}, {"xml_4"}, {"xml_5"}, {"xml_6"}, {"xml_7"}, + {"xml_8"}, {"xml_9"}, {"xml_10"}, {"xml_11"}, {"xml_12"}, {"xml_13"}, {"xml_14"}, {"xml_15"}, + {"xml_16"}, {"xml_17"}, {"xml_18"}, {"xml_19"}, {"xml_20"}, {"xml_21"}, {"xml_22"}, {"xml_23"}, + {"xml_24"}, {"xml_25"}, {"xml_26"}, {"xml_27"}, {"xml_28"}, {"xml_29"}, {"xml_30"}, std::to_array("xml_31")}); + +constexpr auto ql = std::to_array( + {{"ql_0"}, {"ql_1"}, {"ql_2"}, {"ql_3"}, {"ql_4"}, {"ql_5"}, {"ql_6"}, {"ql_7"}, + {"ql_8"}, {"ql_9"}, {"ql_10"}, {"ql_11"}, {"ql_12"}, {"ql_13"}, {"ql_14"}, {"ql_15"}, + {"ql_16"}, {"ql_17"}, {"ql_18"}, {"ql_19"}, {"ql_20"}, {"ql_21"}, {"ql_22"}, {"ql_23"}, + {"ql_24"}, {"ql_25"}, {"ql_26"}, {"ql_27"}, {"ql_28"}, {"ql_29"}, {"ql_30"}, std::to_array("ql_31")}); + +constexpr auto wl = std::to_array( + {{"wl_0"}, {"wl_1"}, {"wl_2"}, {"wl_3"}, {"wl_4"}, {"wl_5"}, {"wl_6"}, {"wl_7"}, + {"wl_8"}, {"wl_9"}, {"wl_10"}, {"wl_11"}, {"wl_12"}, {"wl_13"}, {"wl_14"}, {"wl_15"}, + {"wl_16"}, {"wl_17"}, {"wl_18"}, {"wl_19"}, {"wl_20"}, {"wl_21"}, {"wl_22"}, {"wl_23"}, + {"wl_24"}, {"wl_25"}, {"wl_26"}, {"wl_27"}, {"wl_28"}, {"wl_29"}, {"wl_30"}, std::to_array("wl_31")}); + +constexpr auto fl = std::to_array( + {{"fl_0"}, {"fl_1"}, {"fl_2"}, {"fl_3"}, {"fl_4"}, {"fl_5"}, {"fl_6"}, {"fl_7"}, + {"fl_8"}, {"fl_9"}, {"fl_10"}, {"fl_11"}, {"fl_12"}, {"fl_13"}, {"fl_14"}, {"fl_15"}, + {"fl_16"}, {"fl_17"}, {"fl_18"}, {"fl_19"}, {"fl_20"}, {"fl_21"}, {"fl_22"}, {"fl_23"}, + {"fl_24"}, {"fl_25"}, {"fl_26"}, {"fl_27"}, {"fl_28"}, {"fl_29"}, {"fl_30"}, std::to_array("fl_31")}); + +constexpr auto gl = std::to_array( + {{"gl_0"}, {"gl_1"}, {"gl_2"}, {"gl_3"}, {"gl_4"}, {"gl_5"}, {"gl_6"}, {"gl_7"}, + {"gl_8"}, {"gl_9"}, {"gl_10"}, {"gl_11"}, {"gl_12"}, {"gl_13"}, {"gl_14"}, {"gl_15"}, + {"gl_16"}, {"gl_17"}, {"gl_18"}, {"gl_19"}, {"gl_20"}, {"gl_21"}, {"gl_22"}, {"gl_23"}, + {"gl_24"}, {"gl_25"}, {"gl_26"}, {"gl_27"}, {"gl_28"}, {"gl_29"}, {"gl_30"}, std::to_array("gl_31")}); + +// right channel + +constexpr auto ftr = std::to_array( + {{"ftr_0"}, {"ftr_1"}, {"ftr_2"}, {"ftr_3"}, {"ftr_4"}, {"ftr_5"}, {"ftr_6"}, {"ftr_7"}, + {"ftr_8"}, {"ftr_9"}, {"ftr_10"}, {"ftr_11"}, {"ftr_12"}, {"ftr_13"}, {"ftr_14"}, {"ftr_15"}, + {"ftr_16"}, {"ftr_17"}, {"ftr_18"}, {"ftr_19"}, {"ftr_20"}, {"ftr_21"}, {"ftr_22"}, {"ftr_23"}, + {"ftr_24"}, {"ftr_25"}, {"ftr_26"}, {"ftr_27"}, {"ftr_28"}, {"ftr_29"}, {"ftr_30"}, std::to_array("ftr_31")}); + +constexpr auto fmr = std::to_array( + {{"fmr_0"}, {"fmr_1"}, {"fmr_2"}, {"fmr_3"}, {"fmr_4"}, {"fmr_5"}, {"fmr_6"}, {"fmr_7"}, + {"fmr_8"}, {"fmr_9"}, {"fmr_10"}, {"fmr_11"}, {"fmr_12"}, {"fmr_13"}, {"fmr_14"}, {"fmr_15"}, + {"fmr_16"}, {"fmr_17"}, {"fmr_18"}, {"fmr_19"}, {"fmr_20"}, {"fmr_21"}, {"fmr_22"}, {"fmr_23"}, + {"fmr_24"}, {"fmr_25"}, {"fmr_26"}, {"fmr_27"}, {"fmr_28"}, {"fmr_29"}, {"fmr_30"}, std::to_array("fmr_31")}); + +constexpr auto sr = std::to_array( + {{"sr_0"}, {"sr_1"}, {"sr_2"}, {"sr_3"}, {"sr_4"}, {"sr_5"}, {"sr_6"}, {"sr_7"}, + {"sr_8"}, {"sr_9"}, {"sr_10"}, {"sr_11"}, {"sr_12"}, {"sr_13"}, {"sr_14"}, {"sr_15"}, + {"sr_16"}, {"sr_17"}, {"sr_18"}, {"sr_19"}, {"sr_20"}, {"sr_21"}, {"sr_22"}, {"sr_23"}, + {"sr_24"}, {"sr_25"}, {"sr_26"}, {"sr_27"}, {"sr_28"}, {"sr_29"}, {"sr_30"}, std::to_array("sr_31")}); + +constexpr auto xsr = std::to_array( + {{"xsr_0"}, {"xsr_1"}, {"xsr_2"}, {"xsr_3"}, {"xsr_4"}, {"xsr_5"}, {"xsr_6"}, {"xsr_7"}, + {"xsr_8"}, {"xsr_9"}, {"xsr_10"}, {"xsr_11"}, {"xsr_12"}, {"xsr_13"}, {"xsr_14"}, {"xsr_15"}, + {"xsr_16"}, {"xsr_17"}, {"xsr_18"}, {"xsr_19"}, {"xsr_20"}, {"xsr_21"}, {"xsr_22"}, {"xsr_23"}, + {"xsr_24"}, {"xsr_25"}, {"xsr_26"}, {"xsr_27"}, {"xsr_28"}, {"xsr_29"}, {"xsr_30"}, std::to_array("xsr_31")}); + +constexpr auto xmr = std::to_array( + {{"xmr_0"}, {"xmr_1"}, {"xmr_2"}, {"xmr_3"}, {"xmr_4"}, {"xmr_5"}, {"xmr_6"}, {"xmr_7"}, + {"xmr_8"}, {"xmr_9"}, {"xmr_10"}, {"xmr_11"}, {"xmr_12"}, {"xmr_13"}, {"xmr_14"}, {"xmr_15"}, + {"xmr_16"}, {"xmr_17"}, {"xmr_18"}, {"xmr_19"}, {"xmr_20"}, {"xmr_21"}, {"xmr_22"}, {"xmr_23"}, + {"xmr_24"}, {"xmr_25"}, {"xmr_26"}, {"xmr_27"}, {"xmr_28"}, {"xmr_29"}, {"xmr_30"}, std::to_array("xmr_31")}); + +constexpr auto qr = std::to_array( + {{"qr_0"}, {"qr_1"}, {"qr_2"}, {"qr_3"}, {"qr_4"}, {"qr_5"}, {"qr_6"}, {"qr_7"}, + {"qr_8"}, {"qr_9"}, {"qr_10"}, {"qr_11"}, {"qr_12"}, {"qr_13"}, {"qr_14"}, {"qr_15"}, + {"qr_16"}, {"qr_17"}, {"qr_18"}, {"qr_19"}, {"qr_20"}, {"qr_21"}, {"qr_22"}, {"qr_23"}, + {"qr_24"}, {"qr_25"}, {"qr_26"}, {"qr_27"}, {"qr_28"}, {"qr_29"}, {"qr_30"}, std::to_array("qr_31")}); + +constexpr auto wr = std::to_array( + {{"wr_0"}, {"wr_1"}, {"wr_2"}, {"wr_3"}, {"wr_4"}, {"wr_5"}, {"wr_6"}, {"wr_7"}, + {"wr_8"}, {"wr_9"}, {"wr_10"}, {"wr_11"}, {"wr_12"}, {"wr_13"}, {"wr_14"}, {"wr_15"}, + {"wr_16"}, {"wr_17"}, {"wr_18"}, {"wr_19"}, {"wr_20"}, {"wr_21"}, {"wr_22"}, {"wr_23"}, + {"wr_24"}, {"wr_25"}, {"wr_26"}, {"wr_27"}, {"wr_28"}, {"wr_29"}, {"wr_30"}, std::to_array("wr_31")}); + +constexpr auto fr = std::to_array( + {{"fr_0"}, {"fr_1"}, {"fr_2"}, {"fr_3"}, {"fr_4"}, {"fr_5"}, {"fr_6"}, {"fr_7"}, + {"fr_8"}, {"fr_9"}, {"fr_10"}, {"fr_11"}, {"fr_12"}, {"fr_13"}, {"fr_14"}, {"fr_15"}, + {"fr_16"}, {"fr_17"}, {"fr_18"}, {"fr_19"}, {"fr_20"}, {"fr_21"}, {"fr_22"}, {"fr_23"}, + {"fr_24"}, {"fr_25"}, {"fr_26"}, {"fr_27"}, {"fr_28"}, {"fr_29"}, {"fr_30"}, std::to_array("fr_31")}); + +constexpr auto gr = std::to_array( + {{"gr_0"}, {"gr_1"}, {"gr_2"}, {"gr_3"}, {"gr_4"}, {"gr_5"}, {"gr_6"}, {"gr_7"}, + {"gr_8"}, {"gr_9"}, {"gr_10"}, {"gr_11"}, {"gr_12"}, {"gr_13"}, {"gr_14"}, {"gr_15"}, + {"gr_16"}, {"gr_17"}, {"gr_18"}, {"gr_19"}, {"gr_20"}, {"gr_21"}, {"gr_22"}, {"gr_23"}, + {"gr_24"}, {"gr_25"}, {"gr_26"}, {"gr_27"}, {"gr_28"}, {"gr_29"}, {"gr_30"}, std::to_array("gr_31")}); + +} // namespace tags::equalizer diff --git a/include/tags_multiband_compressor.hpp b/include/tags_multiband_compressor.hpp new file mode 100644 index 0000000..9b508ec --- /dev/null +++ b/include/tags_multiband_compressor.hpp @@ -0,0 +1,322 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include + +namespace tags::multiband_compressor { + +// mb comp band num const + +constexpr unsigned n_bands = 8U; + +// gsettings keys tags + +constexpr auto band_enable = std::to_array({{"enable-band0"}, + {"enable-band1"}, + {"enable-band2"}, + {"enable-band3"}, + {"enable-band4"}, + {"enable-band5"}, + {"enable-band6"}, + std::to_array("enable-band7")}); + +constexpr auto band_compression_mode = std::to_array({{"compression-mode0"}, + {"compression-mode1"}, + {"compression-mode2"}, + {"compression-mode3"}, + {"compression-mode4"}, + {"compression-mode5"}, + {"compression-mode6"}, + std::to_array("compression-mode7")}); + +constexpr auto band_compressor_enable = std::to_array({{"compressor-enable0"}, + {"compressor-enable1"}, + {"compressor-enable2"}, + {"compressor-enable3"}, + {"compressor-enable4"}, + {"compressor-enable5"}, + {"compressor-enable6"}, + std::to_array("compressor-enable7")}); + +constexpr auto band_split_frequency = std::to_array({{"split-frequency0"}, + {"split-frequency1"}, + {"split-frequency2"}, + {"split-frequency3"}, + {"split-frequency4"}, + {"split-frequency5"}, + {"split-frequency6"}, + std::to_array("split-frequency7")}); + +constexpr auto band_mute = std::to_array( + {{"mute0"}, {"mute1"}, {"mute2"}, {"mute3"}, {"mute4"}, {"mute5"}, {"mute6"}, std::to_array("mute7")}); + +constexpr auto band_solo = std::to_array( + {{"solo0"}, {"solo1"}, {"solo2"}, {"solo3"}, {"solo4"}, {"solo5"}, {"solo6"}, std::to_array("solo7")}); + +constexpr auto band_lowcut_filter = std::to_array({{"sidechain-custom-lowcut-filter0"}, + {"sidechain-custom-lowcut-filter1"}, + {"sidechain-custom-lowcut-filter2"}, + {"sidechain-custom-lowcut-filter3"}, + {"sidechain-custom-lowcut-filter4"}, + {"sidechain-custom-lowcut-filter5"}, + {"sidechain-custom-lowcut-filter6"}, + std::to_array("sidechain-custom-lowcut-filter7")}); + +constexpr auto band_highcut_filter = std::to_array({{"sidechain-custom-highcut-filter0"}, + {"sidechain-custom-highcut-filter1"}, + {"sidechain-custom-highcut-filter2"}, + {"sidechain-custom-highcut-filter3"}, + {"sidechain-custom-highcut-filter4"}, + {"sidechain-custom-highcut-filter5"}, + {"sidechain-custom-highcut-filter6"}, + std::to_array("sidechain-custom-highcut-filter7")}); + +constexpr auto band_external_sidechain = std::to_array({{"external-sidechain0"}, + {"external-sidechain1"}, + {"external-sidechain2"}, + {"external-sidechain3"}, + {"external-sidechain4"}, + {"external-sidechain5"}, + {"external-sidechain6"}, + std::to_array("external-sidechain7")}); + +constexpr auto band_sidechain_mode = std::to_array({{"sidechain-mode0"}, + {"sidechain-mode1"}, + {"sidechain-mode2"}, + {"sidechain-mode3"}, + {"sidechain-mode4"}, + {"sidechain-mode5"}, + {"sidechain-mode6"}, + std::to_array("sidechain-mode7")}); + +constexpr auto band_sidechain_source = std::to_array({{"sidechain-source0"}, + {"sidechain-source1"}, + {"sidechain-source2"}, + {"sidechain-source3"}, + {"sidechain-source4"}, + {"sidechain-source5"}, + {"sidechain-source6"}, + std::to_array("sidechain-source7")}); + +constexpr auto band_stereo_split_source = std::to_array({{"stereo-split-source0"}, + {"stereo-split-source1"}, + {"stereo-split-source2"}, + {"stereo-split-source3"}, + {"stereo-split-source4"}, + {"stereo-split-source5"}, + {"stereo-split-source6"}, + std::to_array("stereo-split-source7")}); + +constexpr auto band_lowcut_filter_frequency = std::to_array({{"sidechain-lowcut-frequency0"}, + {"sidechain-lowcut-frequency1"}, + {"sidechain-lowcut-frequency2"}, + {"sidechain-lowcut-frequency3"}, + {"sidechain-lowcut-frequency4"}, + {"sidechain-lowcut-frequency5"}, + {"sidechain-lowcut-frequency6"}, + std::to_array("sidechain-lowcut-frequency7")}); + +constexpr auto band_highcut_filter_frequency = std::to_array({{"sidechain-highcut-frequency0"}, + {"sidechain-highcut-frequency1"}, + {"sidechain-highcut-frequency2"}, + {"sidechain-highcut-frequency3"}, + {"sidechain-highcut-frequency4"}, + {"sidechain-highcut-frequency5"}, + {"sidechain-highcut-frequency6"}, + std::to_array("sidechain-highcut-frequency7")}); + +constexpr auto band_attack_time = std::to_array({{"attack-time0"}, + {"attack-time1"}, + {"attack-time2"}, + {"attack-time3"}, + {"attack-time4"}, + {"attack-time5"}, + {"attack-time6"}, + std::to_array("attack-time7")}); + +inline constexpr auto band_attack_threshold = std::to_array({{"attack-threshold0"}, + {"attack-threshold1"}, + {"attack-threshold2"}, + {"attack-threshold3"}, + {"attack-threshold4"}, + {"attack-threshold5"}, + {"attack-threshold6"}, + std::to_array("attack-threshold7")}); + +inline constexpr auto band_release_time = std::to_array({{"release-time0"}, + {"release-time1"}, + {"release-time2"}, + {"release-time3"}, + {"release-time4"}, + {"release-time5"}, + {"release-time6"}, + std::to_array("release-time7")}); + +inline constexpr auto band_release_threshold = std::to_array({{"release-threshold0"}, + {"release-threshold1"}, + {"release-threshold2"}, + {"release-threshold3"}, + {"release-threshold4"}, + {"release-threshold5"}, + {"release-threshold6"}, + std::to_array("release-threshold7")}); + +constexpr auto band_ratio = std::to_array( + {{"ratio0"}, {"ratio1"}, {"ratio2"}, {"ratio3"}, {"ratio4"}, {"ratio5"}, {"ratio6"}, std::to_array("ratio7")}); + +constexpr auto band_knee = std::to_array( + {{"knee0"}, {"knee1"}, {"knee2"}, {"knee3"}, {"knee4"}, {"knee5"}, {"knee6"}, std::to_array("knee7")}); + +constexpr auto band_makeup = std::to_array({{"makeup0"}, + {"makeup1"}, + {"makeup2"}, + {"makeup3"}, + {"makeup4"}, + {"makeup5"}, + {"makeup6"}, + std::to_array("makeup7")}); + +constexpr auto band_sidechain_preamp = std::to_array({{"sidechain-preamp0"}, + {"sidechain-preamp1"}, + {"sidechain-preamp2"}, + {"sidechain-preamp3"}, + {"sidechain-preamp4"}, + {"sidechain-preamp5"}, + {"sidechain-preamp6"}, + std::to_array("sidechain-preamp7")}); + +constexpr auto band_sidechain_reactivity = std::to_array({{"sidechain-reactivity0"}, + {"sidechain-reactivity1"}, + {"sidechain-reactivity2"}, + {"sidechain-reactivity3"}, + {"sidechain-reactivity4"}, + {"sidechain-reactivity5"}, + {"sidechain-reactivity6"}, + std::to_array("sidechain-reactivity7")}); + +constexpr auto band_sidechain_lookahead = std::to_array({{"sidechain-lookahead0"}, + {"sidechain-lookahead1"}, + {"sidechain-lookahead2"}, + {"sidechain-lookahead3"}, + {"sidechain-lookahead4"}, + {"sidechain-lookahead5"}, + {"sidechain-lookahead6"}, + std::to_array("sidechain-lookahead7")}); + +constexpr auto band_boost_amount = std::to_array({{"boost-amount0"}, + {"boost-amount1"}, + {"boost-amount2"}, + {"boost-amount3"}, + {"boost-amount4"}, + {"boost-amount5"}, + {"boost-amount6"}, + std::to_array("boost-amount7")}); + +constexpr auto band_boost_threshold = std::to_array({{"boost-threshold0"}, + {"boost-threshold1"}, + {"boost-threshold2"}, + {"boost-threshold3"}, + {"boost-threshold4"}, + {"boost-threshold5"}, + {"boost-threshold6"}, + std::to_array("boost-threshold7")}); + +// LSP port tags + +constexpr auto sce = std::to_array( + {{"sce_0"}, {"sce_1"}, {"sce_2"}, {"sce_3"}, {"sce_4"}, {"sce_5"}, {"sce_6"}, std::to_array("sce_7")}); + +constexpr auto cbe = std::to_array( + {{"cbe_0"}, {"cbe_1"}, {"cbe_2"}, {"cbe_3"}, {"cbe_4"}, {"cbe_5"}, {"cbe_6"}, std::to_array("cbe_7")}); + +constexpr auto sf = + std::to_array({{"sf_0"}, {"sf_1"}, {"sf_2"}, {"sf_3"}, {"sf_4"}, {"sf_5"}, {"sf_6"}, std::to_array("sf_7")}); + +constexpr auto sscs = std::to_array( + {{"sscs_0"}, {"sscs_1"}, {"sscs_2"}, {"sscs_3"}, {"sscs_4"}, {"sscs_5"}, {"sscs_6"}, std::to_array("sscs_7")}); + +constexpr auto scs = std::to_array( + {{"scs_0"}, {"scs_1"}, {"scs_2"}, {"scs_3"}, {"scs_4"}, {"scs_5"}, {"scs_6"}, std::to_array("scs_7")}); + +constexpr auto scm = std::to_array( + {{"scm_0"}, {"scm_1"}, {"scm_2"}, {"scm_3"}, {"scm_4"}, {"scm_5"}, {"scm_6"}, std::to_array("scm_7")}); + +constexpr auto sla = std::to_array( + {{"sla_0"}, {"sla_1"}, {"sla_2"}, {"sla_3"}, {"sla_4"}, {"sla_5"}, {"sla_6"}, std::to_array("sla_7")}); + +constexpr auto scr = std::to_array( + {{"scr_0"}, {"scr_1"}, {"scr_2"}, {"scr_3"}, {"scr_4"}, {"scr_5"}, {"scr_6"}, std::to_array("scr_7")}); + +constexpr auto scp = std::to_array( + {{"scp_0"}, {"scp_1"}, {"scp_2"}, {"scp_3"}, {"scp_4"}, {"scp_5"}, {"scp_6"}, std::to_array("scp_7")}); + +constexpr auto sclc = std::to_array( + {{"sclc_0"}, {"sclc_1"}, {"sclc_2"}, {"sclc_3"}, {"sclc_4"}, {"sclc_5"}, {"sclc_6"}, std::to_array("sclc_7")}); + +constexpr auto schc = std::to_array( + {{"schc_0"}, {"schc_1"}, {"schc_2"}, {"schc_3"}, {"schc_4"}, {"schc_5"}, {"schc_6"}, std::to_array("schc_7")}); + +constexpr auto sclf = std::to_array( + {{"sclf_0"}, {"sclf_1"}, {"sclf_2"}, {"sclf_3"}, {"sclf_4"}, {"sclf_5"}, {"sclf_6"}, std::to_array("sclf_7")}); + +constexpr auto schf = std::to_array( + {{"schf_0"}, {"schf_1"}, {"schf_2"}, {"schf_3"}, {"schf_4"}, {"schf_5"}, {"schf_6"}, std::to_array("schf_7")}); + +constexpr auto cm = + std::to_array({{"cm_0"}, {"cm_1"}, {"cm_2"}, {"cm_3"}, {"cm_4"}, {"cm_5"}, {"cm_6"}, std::to_array("cm_7")}); + +constexpr auto ce = + std::to_array({{"ce_0"}, {"ce_1"}, {"ce_2"}, {"ce_3"}, {"ce_4"}, {"ce_5"}, {"ce_6"}, std::to_array("ce_7")}); + +constexpr auto bs = + std::to_array({{"bs_0"}, {"bs_1"}, {"bs_2"}, {"bs_3"}, {"bs_4"}, {"bs_5"}, {"bs_6"}, std::to_array("bs_7")}); + +constexpr auto bm = + std::to_array({{"bm_0"}, {"bm_1"}, {"bm_2"}, {"bm_3"}, {"bm_4"}, {"bm_5"}, {"bm_6"}, std::to_array("bm_7")}); + +constexpr auto al = + std::to_array({{"al_0"}, {"al_1"}, {"al_2"}, {"al_3"}, {"al_4"}, {"al_5"}, {"al_6"}, std::to_array("al_7")}); + +constexpr auto at = + std::to_array({{"at_0"}, {"at_1"}, {"at_2"}, {"at_3"}, {"at_4"}, {"at_5"}, {"at_6"}, std::to_array("at_7")}); + +constexpr auto rrl = std::to_array( + {{"rrl_0"}, {"rrl_1"}, {"rrl_2"}, {"rrl_3"}, {"rrl_4"}, {"rrl_5"}, {"rrl_6"}, std::to_array("rrl_7")}); + +constexpr auto rt = + std::to_array({{"rt_0"}, {"rt_1"}, {"rt_2"}, {"rt_3"}, {"rt_4"}, {"rt_5"}, {"rt_6"}, std::to_array("rt_7")}); + +constexpr auto cr = + std::to_array({{"cr_0"}, {"cr_1"}, {"cr_2"}, {"cr_3"}, {"cr_4"}, {"cr_5"}, {"cr_6"}, std::to_array("cr_7")}); + +constexpr auto kn = + std::to_array({{"kn_0"}, {"kn_1"}, {"kn_2"}, {"kn_3"}, {"kn_4"}, {"kn_5"}, {"kn_6"}, std::to_array("kn_7")}); + +constexpr auto bth = std::to_array( + {{"bth_0"}, {"bth_1"}, {"bth_2"}, {"bth_3"}, {"bth_4"}, {"bth_5"}, {"bth_6"}, std::to_array("bth_7")}); + +constexpr auto bsa = std::to_array( + {{"bsa_0"}, {"bsa_1"}, {"bsa_2"}, {"bsa_3"}, {"bsa_4"}, {"bsa_5"}, {"bsa_6"}, std::to_array("bsa_7")}); + +constexpr auto mk = + std::to_array({{"mk_0"}, {"mk_1"}, {"mk_2"}, {"mk_3"}, {"mk_4"}, {"mk_5"}, {"mk_6"}, std::to_array("mk_7")}); + +} // namespace tags::multiband_compressor diff --git a/include/tags_multiband_gate.hpp b/include/tags_multiband_gate.hpp new file mode 100644 index 0000000..e6124f9 --- /dev/null +++ b/include/tags_multiband_gate.hpp @@ -0,0 +1,322 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include + +namespace tags::multiband_gate { + +// mb gate band num const + +constexpr unsigned n_bands = 8U; + +// gsettings keys tags + +constexpr auto band_enable = std::to_array({{"enable-band0"}, + {"enable-band1"}, + {"enable-band2"}, + {"enable-band3"}, + {"enable-band4"}, + {"enable-band5"}, + {"enable-band6"}, + std::to_array("enable-band7")}); + +constexpr auto band_gate_enable = std::to_array({{"gate-enable0"}, + {"gate-enable1"}, + {"gate-enable2"}, + {"gate-enable3"}, + {"gate-enable4"}, + {"gate-enable5"}, + {"gate-enable6"}, + std::to_array("gate-enable7")}); + +constexpr auto band_split_frequency = std::to_array({{"split-frequency0"}, + {"split-frequency1"}, + {"split-frequency2"}, + {"split-frequency3"}, + {"split-frequency4"}, + {"split-frequency5"}, + {"split-frequency6"}, + std::to_array("split-frequency7")}); + +constexpr auto band_mute = std::to_array( + {{"mute0"}, {"mute1"}, {"mute2"}, {"mute3"}, {"mute4"}, {"mute5"}, {"mute6"}, std::to_array("mute7")}); + +constexpr auto band_solo = std::to_array( + {{"solo0"}, {"solo1"}, {"solo2"}, {"solo3"}, {"solo4"}, {"solo5"}, {"solo6"}, std::to_array("solo7")}); + +constexpr auto band_lowcut_filter = std::to_array({{"sidechain-custom-lowcut-filter0"}, + {"sidechain-custom-lowcut-filter1"}, + {"sidechain-custom-lowcut-filter2"}, + {"sidechain-custom-lowcut-filter3"}, + {"sidechain-custom-lowcut-filter4"}, + {"sidechain-custom-lowcut-filter5"}, + {"sidechain-custom-lowcut-filter6"}, + std::to_array("sidechain-custom-lowcut-filter7")}); + +constexpr auto band_highcut_filter = std::to_array({{"sidechain-custom-highcut-filter0"}, + {"sidechain-custom-highcut-filter1"}, + {"sidechain-custom-highcut-filter2"}, + {"sidechain-custom-highcut-filter3"}, + {"sidechain-custom-highcut-filter4"}, + {"sidechain-custom-highcut-filter5"}, + {"sidechain-custom-highcut-filter6"}, + std::to_array("sidechain-custom-highcut-filter7")}); + +constexpr auto band_external_sidechain = std::to_array({{"external-sidechain0"}, + {"external-sidechain1"}, + {"external-sidechain2"}, + {"external-sidechain3"}, + {"external-sidechain4"}, + {"external-sidechain5"}, + {"external-sidechain6"}, + std::to_array("external-sidechain7")}); + +constexpr auto band_sidechain_mode = std::to_array({{"sidechain-mode0"}, + {"sidechain-mode1"}, + {"sidechain-mode2"}, + {"sidechain-mode3"}, + {"sidechain-mode4"}, + {"sidechain-mode5"}, + {"sidechain-mode6"}, + std::to_array("sidechain-mode7")}); + +constexpr auto band_sidechain_source = std::to_array({{"sidechain-source0"}, + {"sidechain-source1"}, + {"sidechain-source2"}, + {"sidechain-source3"}, + {"sidechain-source4"}, + {"sidechain-source5"}, + {"sidechain-source6"}, + std::to_array("sidechain-source7")}); + +constexpr auto band_stereo_split_source = std::to_array({{"stereo-split-source0"}, + {"stereo-split-source1"}, + {"stereo-split-source2"}, + {"stereo-split-source3"}, + {"stereo-split-source4"}, + {"stereo-split-source5"}, + {"stereo-split-source6"}, + std::to_array("stereo-split-source7")}); + +constexpr auto band_lowcut_filter_frequency = std::to_array({{"sidechain-lowcut-frequency0"}, + {"sidechain-lowcut-frequency1"}, + {"sidechain-lowcut-frequency2"}, + {"sidechain-lowcut-frequency3"}, + {"sidechain-lowcut-frequency4"}, + {"sidechain-lowcut-frequency5"}, + {"sidechain-lowcut-frequency6"}, + std::to_array("sidechain-lowcut-frequency7")}); + +constexpr auto band_highcut_filter_frequency = std::to_array({{"sidechain-highcut-frequency0"}, + {"sidechain-highcut-frequency1"}, + {"sidechain-highcut-frequency2"}, + {"sidechain-highcut-frequency3"}, + {"sidechain-highcut-frequency4"}, + {"sidechain-highcut-frequency5"}, + {"sidechain-highcut-frequency6"}, + std::to_array("sidechain-highcut-frequency7")}); + +constexpr auto band_attack_time = std::to_array({{"attack-time0"}, + {"attack-time1"}, + {"attack-time2"}, + {"attack-time3"}, + {"attack-time4"}, + {"attack-time5"}, + {"attack-time6"}, + std::to_array("attack-time7")}); + +constexpr auto band_release_time = std::to_array({{"release-time0"}, + {"release-time1"}, + {"release-time2"}, + {"release-time3"}, + {"release-time4"}, + {"release-time5"}, + {"release-time6"}, + std::to_array("release-time7")}); + +constexpr auto band_hysteresis = std::to_array({{"hysteresis0"}, + {"hysteresis1"}, + {"hysteresis2"}, + {"hysteresis3"}, + {"hysteresis4"}, + {"hysteresis5"}, + {"hysteresis6"}, + std::to_array("hysteresis7")}); + +constexpr auto band_hysteresis_threshold = std::to_array({{"hysteresis-threshold0"}, + {"hysteresis-threshold1"}, + {"hysteresis-threshold2"}, + {"hysteresis-threshold3"}, + {"hysteresis-threshold4"}, + {"hysteresis-threshold5"}, + {"hysteresis-threshold6"}, + std::to_array("hysteresis-threshold7")}); + +constexpr auto band_hysteresis_zone = std::to_array({{"hysteresis-zone0"}, + {"hysteresis-zone1"}, + {"hysteresis-zone2"}, + {"hysteresis-zone3"}, + {"hysteresis-zone4"}, + {"hysteresis-zone5"}, + {"hysteresis-zone6"}, + std::to_array("hysteresis-zone7")}); + +constexpr auto band_curve_threshold = std::to_array({{"curve-threshold0"}, + {"curve-threshold1"}, + {"curve-threshold2"}, + {"curve-threshold3"}, + {"curve-threshold4"}, + {"curve-threshold5"}, + {"curve-threshold6"}, + std::to_array("curve-threshold7")}); + +constexpr auto band_curve_zone = std::to_array({{"curve-zone0"}, + {"curve-zone1"}, + {"curve-zone2"}, + {"curve-zone3"}, + {"curve-zone4"}, + {"curve-zone5"}, + {"curve-zone6"}, + std::to_array("curve-zone7")}); + +constexpr auto band_reduction = std::to_array({{"reduction0"}, + {"reduction1"}, + {"reduction2"}, + {"reduction3"}, + {"reduction4"}, + {"reduction5"}, + {"reduction6"}, + std::to_array("reduction7")}); + +constexpr auto band_makeup = std::to_array({{"makeup0"}, + {"makeup1"}, + {"makeup2"}, + {"makeup3"}, + {"makeup4"}, + {"makeup5"}, + {"makeup6"}, + std::to_array("makeup7")}); + +constexpr auto band_sidechain_preamp = std::to_array({{"sidechain-preamp0"}, + {"sidechain-preamp1"}, + {"sidechain-preamp2"}, + {"sidechain-preamp3"}, + {"sidechain-preamp4"}, + {"sidechain-preamp5"}, + {"sidechain-preamp6"}, + std::to_array("sidechain-preamp7")}); + +constexpr auto band_sidechain_reactivity = std::to_array({{"sidechain-reactivity0"}, + {"sidechain-reactivity1"}, + {"sidechain-reactivity2"}, + {"sidechain-reactivity3"}, + {"sidechain-reactivity4"}, + {"sidechain-reactivity5"}, + {"sidechain-reactivity6"}, + std::to_array("sidechain-reactivity7")}); + +constexpr auto band_sidechain_lookahead = std::to_array({{"sidechain-lookahead0"}, + {"sidechain-lookahead1"}, + {"sidechain-lookahead2"}, + {"sidechain-lookahead3"}, + {"sidechain-lookahead4"}, + {"sidechain-lookahead5"}, + {"sidechain-lookahead6"}, + std::to_array("sidechain-lookahead7")}); + +// LSP port tags + +constexpr auto cbe = std::to_array( + {{"cbe_0"}, {"cbe_1"}, {"cbe_2"}, {"cbe_3"}, {"cbe_4"}, {"cbe_5"}, {"cbe_6"}, std::to_array("cbe_7")}); + +constexpr auto sf = + std::to_array({{"sf_0"}, {"sf_1"}, {"sf_2"}, {"sf_3"}, {"sf_4"}, {"sf_5"}, {"sf_6"}, std::to_array("sf_7")}); + +constexpr auto sce = std::to_array( + {{"sce_0"}, {"sce_1"}, {"sce_2"}, {"sce_3"}, {"sce_4"}, {"sce_5"}, {"sce_6"}, std::to_array("sce_7")}); + +constexpr auto sscs = std::to_array( + {{"sscs_0"}, {"sscs_1"}, {"sscs_2"}, {"sscs_3"}, {"sscs_4"}, {"sscs_5"}, {"sscs_6"}, std::to_array("sscs_7")}); + +constexpr auto scs = std::to_array( + {{"scs_0"}, {"scs_1"}, {"scs_2"}, {"scs_3"}, {"scs_4"}, {"scs_5"}, {"scs_6"}, std::to_array("scs_7")}); + +constexpr auto scm = std::to_array( + {{"scm_0"}, {"scm_1"}, {"scm_2"}, {"scm_3"}, {"scm_4"}, {"scm_5"}, {"scm_6"}, std::to_array("scm_7")}); + +constexpr auto sla = std::to_array( + {{"sla_0"}, {"sla_1"}, {"sla_2"}, {"sla_3"}, {"sla_4"}, {"sla_5"}, {"sla_6"}, std::to_array("sla_7")}); + +constexpr auto scr = std::to_array( + {{"scr_0"}, {"scr_1"}, {"scr_2"}, {"scr_3"}, {"scr_4"}, {"scr_5"}, {"scr_6"}, std::to_array("scr_7")}); + +constexpr auto scp = std::to_array( + {{"scp_0"}, {"scp_1"}, {"scp_2"}, {"scp_3"}, {"scp_4"}, {"scp_5"}, {"scp_6"}, std::to_array("scp_7")}); + +constexpr auto sclc = std::to_array( + {{"sclc_0"}, {"sclc_1"}, {"sclc_2"}, {"sclc_3"}, {"sclc_4"}, {"sclc_5"}, {"sclc_6"}, std::to_array("sclc_7")}); + +constexpr auto schc = std::to_array( + {{"schc_0"}, {"schc_1"}, {"schc_2"}, {"schc_3"}, {"schc_4"}, {"schc_5"}, {"schc_6"}, std::to_array("schc_7")}); + +constexpr auto sclf = std::to_array( + {{"sclf_0"}, {"sclf_1"}, {"sclf_2"}, {"sclf_3"}, {"sclf_4"}, {"sclf_5"}, {"sclf_6"}, std::to_array("sclf_7")}); + +constexpr auto schf = std::to_array( + {{"schf_0"}, {"schf_1"}, {"schf_2"}, {"schf_3"}, {"schf_4"}, {"schf_5"}, {"schf_6"}, std::to_array("schf_7")}); + +constexpr auto ce = + std::to_array({{"ge_0"}, {"ge_1"}, {"ge_2"}, {"ge_3"}, {"ge_4"}, {"ge_5"}, {"ge_6"}, std::to_array("ge_7")}); + +constexpr auto bs = + std::to_array({{"bs_0"}, {"bs_1"}, {"bs_2"}, {"bs_3"}, {"bs_4"}, {"bs_5"}, {"bs_6"}, std::to_array("bs_7")}); + +constexpr auto bm = + std::to_array({{"bm_0"}, {"bm_1"}, {"bm_2"}, {"bm_3"}, {"bm_4"}, {"bm_5"}, {"bm_6"}, std::to_array("bm_7")}); + +constexpr auto gh = + std::to_array({{"gh_0"}, {"gh_1"}, {"gh_2"}, {"gh_3"}, {"gh_4"}, {"gh_5"}, {"gh_6"}, std::to_array("gh_7")}); + +constexpr auto ht = + std::to_array({{"ht_0"}, {"ht_1"}, {"ht_2"}, {"ht_3"}, {"ht_4"}, {"ht_5"}, {"ht_6"}, std::to_array("ht_7")}); + +constexpr auto hz = + std::to_array({{"hz_0"}, {"hz_1"}, {"hz_2"}, {"hz_3"}, {"hz_4"}, {"hz_5"}, {"hz_6"}, std::to_array("hz_7")}); + +constexpr auto gt = + std::to_array({{"gt_0"}, {"gt_1"}, {"gt_2"}, {"gt_3"}, {"gt_4"}, {"gt_5"}, {"gt_6"}, std::to_array("gt_7")}); + +constexpr auto gz = + std::to_array({{"gz_0"}, {"gz_1"}, {"gz_2"}, {"gz_3"}, {"gz_4"}, {"gz_5"}, {"gz_6"}, std::to_array("gz_7")}); + +constexpr auto at = + std::to_array({{"at_0"}, {"at_1"}, {"at_2"}, {"at_3"}, {"at_4"}, {"at_5"}, {"at_6"}, std::to_array("at_7")}); + +constexpr auto rt = + std::to_array({{"rt_0"}, {"rt_1"}, {"rt_2"}, {"rt_3"}, {"rt_4"}, {"rt_5"}, {"rt_6"}, std::to_array("rt_7")}); + +constexpr auto gr = + std::to_array({{"gr_0"}, {"gr_1"}, {"gr_2"}, {"gr_3"}, {"gr_4"}, {"gr_5"}, {"gr_6"}, std::to_array("gr_7")}); + +constexpr auto mk = + std::to_array({{"mk_0"}, {"mk_1"}, {"mk_2"}, {"mk_3"}, {"mk_4"}, {"mk_5"}, {"mk_6"}, std::to_array("mk_7")}); + +} // namespace tags::multiband_gate diff --git a/include/tags_pipewire.hpp b/include/tags_pipewire.hpp new file mode 100644 index 0000000..01bcc4f --- /dev/null +++ b/include/tags_pipewire.hpp @@ -0,0 +1,50 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +namespace tags::pipewire { + +inline constexpr auto ee_source_name = "easyeffects_source"; + +inline constexpr auto ee_sink_name = "easyeffects_sink"; + +} // namespace tags::pipewire + +namespace tags::pipewire::media_class { + +inline constexpr auto device = "Audio/Device"; + +inline constexpr auto sink = "Audio/Sink"; + +inline constexpr auto source = "Audio/Source"; + +inline constexpr auto virtual_source = "Audio/Source/Virtual"; + +inline constexpr auto input_stream = "Stream/Input/Audio"; + +inline constexpr auto output_stream = "Stream/Output/Audio"; + +} // namespace tags::pipewire::media_class + +namespace tags::pipewire::media_role { + +inline constexpr auto dsp = "DSP"; + +} // namespace tags::pipewire::media_role diff --git a/include/tags_plugin_name.hpp b/include/tags_plugin_name.hpp new file mode 100644 index 0000000..fea11c7 --- /dev/null +++ b/include/tags_plugin_name.hpp @@ -0,0 +1,127 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include "util.hpp" + +namespace tags::plugin_package { + +inline constexpr auto bs2b = "bs2b"; + +inline constexpr auto calf = "Calf Studio Gear"; + +inline constexpr auto deepfilternet = "DeepFilterNet"; + +inline constexpr auto ebur128 = "libebur128"; + +inline constexpr auto ee = "Easy Effects"; + +inline constexpr auto lsp = "Linux Studio Plugins"; + +inline constexpr auto mda = "MDA"; + +inline constexpr auto rnnoise = "RNNoise"; + +inline constexpr auto sound_touch = "SoundTouch"; + +inline constexpr auto speex = "SpeexDSP"; + +inline constexpr auto zam = "ZamAudio"; + +inline constexpr auto zita = "Zita"; + +} // namespace tags::plugin_package + +namespace tags::plugin_name { + +inline constexpr auto autogain = "autogain"; + +inline constexpr auto bass_enhancer = "bass_enhancer"; + +inline constexpr auto bass_loudness = "bass_loudness"; + +inline constexpr auto compressor = "compressor"; + +inline constexpr auto convolver = "convolver"; + +inline constexpr auto crossfeed = "crossfeed"; + +inline constexpr auto crystalizer = "crystalizer"; + +inline constexpr auto deepfilternet = "deepfilternet"; + +inline constexpr auto deesser = "deesser"; + +inline constexpr auto delay = "delay"; + +inline constexpr auto echo_canceller = "echo_canceller"; + +inline constexpr auto equalizer = "equalizer"; + +inline constexpr auto exciter = "exciter"; + +inline constexpr auto expander = "expander"; + +inline constexpr auto filter = "filter"; + +inline constexpr auto gate = "gate"; + +inline constexpr auto level_meter = "level_meter"; + +inline constexpr auto limiter = "limiter"; + +inline constexpr auto loudness = "loudness"; + +inline constexpr auto maximizer = "maximizer"; + +inline constexpr auto multiband_compressor = "multiband_compressor"; + +inline constexpr auto multiband_gate = "multiband_gate"; + +inline constexpr auto pitch = "pitch"; + +inline constexpr auto speex = "speex"; + +inline constexpr auto reverb = "reverb"; + +inline constexpr auto rnnoise = "rnnoise"; + +inline constexpr auto stereo_tools = "stereo_tools"; + +inline constexpr auto list = + std::to_array({autogain, bass_enhancer, bass_loudness, compressor, convolver, + crossfeed, crystalizer, deesser, delay, echo_canceller, + equalizer, exciter, expander, filter, gate, + level_meter, limiter, loudness, maximizer, multiband_compressor, + multiband_gate, pitch, reverb, rnnoise, speex, + stereo_tools}); + +auto get_translated() -> std::map; + +auto get_base_name(std::string_view name) -> std::string; + +auto get_id(const std::string& name) -> uint; + +} // namespace tags::plugin_name diff --git a/include/tags_resources.hpp b/include/tags_resources.hpp new file mode 100644 index 0000000..8de5410 --- /dev/null +++ b/include/tags_resources.hpp @@ -0,0 +1,134 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +namespace tags::resources { + +// Custom icon path + +inline constexpr auto icons = "/com/github/wwmm/easyeffects/icons"; + +// Custom css file path + +inline constexpr auto css = "/com/github/wwmm/easyeffects/ui/custom.css"; + +// Path to the widgets xml files + +inline constexpr auto app_info_ui = "/com/github/wwmm/easyeffects/ui/app_info.ui"; + +inline constexpr auto application_window_ui = "/com/github/wwmm/easyeffects/ui/application_window.ui"; + +inline constexpr auto apps_box_ui = "/com/github/wwmm/easyeffects/ui/apps_box.ui"; + +inline constexpr auto autogain_ui = "/com/github/wwmm/easyeffects/ui/autogain.ui"; + +inline constexpr auto autoload_row_ui = "/com/github/wwmm/easyeffects/ui/autoload_row.ui"; + +inline constexpr auto bass_enhancer_ui = "/com/github/wwmm/easyeffects/ui/bass_enhancer.ui"; + +inline constexpr auto bass_loudness_ui = "/com/github/wwmm/easyeffects/ui/bass_loudness.ui"; + +inline constexpr auto blocklist_menu_ui = "/com/github/wwmm/easyeffects/ui/blocklist_menu.ui"; + +inline constexpr auto chart_ui = "/com/github/wwmm/easyeffects/ui/chart.ui"; + +inline constexpr auto compressor_ui = "/com/github/wwmm/easyeffects/ui/compressor.ui"; + +inline constexpr auto convolver_ui = "/com/github/wwmm/easyeffects/ui/convolver.ui"; + +inline constexpr auto convolver_menu_impulses_ui = "/com/github/wwmm/easyeffects/ui/convolver_menu_impulses.ui"; + +inline constexpr auto convolver_menu_combine_ui = "/com/github/wwmm/easyeffects/ui/convolver_menu_combine.ui"; + +inline constexpr auto crossfeed_ui = "/com/github/wwmm/easyeffects/ui/crossfeed.ui"; + +inline constexpr auto crystalizer_ui = "/com/github/wwmm/easyeffects/ui/crystalizer.ui"; + +inline constexpr auto crystalizer_band_ui = "/com/github/wwmm/easyeffects/ui/crystalizer_band.ui"; + +inline constexpr auto deepfilternet_ui = "/com/github/wwmm/easyeffects/ui/deepfilternet.ui"; + +inline constexpr auto deesser_ui = "/com/github/wwmm/easyeffects/ui/deesser.ui"; + +inline constexpr auto delay_ui = "/com/github/wwmm/easyeffects/ui/delay.ui"; + +inline constexpr auto echo_canceller_ui = "/com/github/wwmm/easyeffects/ui/echo_canceller.ui"; + +inline constexpr auto effects_box_ui = "/com/github/wwmm/easyeffects/ui/effects_box.ui"; + +inline constexpr auto equalizer_band_ui = "/com/github/wwmm/easyeffects/ui/equalizer_band.ui"; + +inline constexpr auto equalizer_ui = "/com/github/wwmm/easyeffects/ui/equalizer.ui"; + +inline constexpr auto exciter_ui = "/com/github/wwmm/easyeffects/ui/exciter.ui"; + +inline constexpr auto expander_ui = "/com/github/wwmm/easyeffects/ui/expander.ui"; + +inline constexpr auto filter_ui = "/com/github/wwmm/easyeffects/ui/filter.ui"; + +inline constexpr auto gate_ui = "/com/github/wwmm/easyeffects/ui/gate.ui"; + +inline constexpr auto level_meter_ui = "/com/github/wwmm/easyeffects/ui/level_meter.ui"; + +inline constexpr auto limiter_ui = "/com/github/wwmm/easyeffects/ui/limiter.ui"; + +inline constexpr auto loudness_ui = "/com/github/wwmm/easyeffects/ui/loudness.ui"; + +inline constexpr auto maximizer_ui = "/com/github/wwmm/easyeffects/ui/maximizer.ui"; + +inline constexpr auto multiband_compressor_ui = "/com/github/wwmm/easyeffects/ui/multiband_compressor.ui"; + +inline constexpr auto multiband_compressor_band_ui = "/com/github/wwmm/easyeffects/ui/multiband_compressor_band.ui"; + +inline constexpr auto multiband_gate_ui = "/com/github/wwmm/easyeffects/ui/multiband_gate.ui"; + +inline constexpr auto multiband_gate_band_ui = "/com/github/wwmm/easyeffects/ui/multiband_gate_band.ui"; + +inline constexpr auto pipe_manager_box_ui = "/com/github/wwmm/easyeffects/ui/pipe_manager_box.ui"; + +inline constexpr auto pitch_ui = "/com/github/wwmm/easyeffects/ui/pitch.ui"; + +inline constexpr auto plugin_row_ui = "/com/github/wwmm/easyeffects/ui/plugin_row.ui"; + +inline constexpr auto plugins_box_ui = "/com/github/wwmm/easyeffects/ui/plugins_box.ui"; + +inline constexpr auto plugins_menu_ui = "/com/github/wwmm/easyeffects/ui/plugins_menu.ui"; + +inline constexpr auto preferences_general_ui = "/com/github/wwmm/easyeffects/ui/preferences_general.ui"; + +inline constexpr auto preferences_spectrum_ui = "/com/github/wwmm/easyeffects/ui/preferences_spectrum.ui"; + +inline constexpr auto preferences_window_ui = "/com/github/wwmm/easyeffects/ui/preferences_window.ui"; + +inline constexpr auto preset_row_ui = "/com/github/wwmm/easyeffects/ui/preset_row.ui"; + +inline constexpr auto presets_menu_ui = "/com/github/wwmm/easyeffects/ui/presets_menu.ui"; + +inline constexpr auto reverb_ui = "/com/github/wwmm/easyeffects/ui/reverb.ui"; + +inline constexpr auto rnnoise_ui = "/com/github/wwmm/easyeffects/ui/rnnoise.ui"; + +inline constexpr auto speex_ui = "/com/github/wwmm/easyeffects/ui/speex.ui"; + +inline constexpr auto shortcuts_ui = "/com/github/wwmm/easyeffects/ui/shortcuts.ui"; + +inline constexpr auto stereo_tools_ui = "/com/github/wwmm/easyeffects/ui/stereo_tools.ui"; + +} // namespace tags::resources diff --git a/include/tags_schema.hpp b/include/tags_schema.hpp new file mode 100644 index 0000000..3af01e9 --- /dev/null +++ b/include/tags_schema.hpp @@ -0,0 +1,312 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +namespace tags::schema { + +inline constexpr auto id_input = "com.github.wwmm.easyeffects.streaminputs"; + +inline constexpr auto id_output = "com.github.wwmm.easyeffects.streamoutputs"; + +} // namespace tags::schema + +namespace tags::schema::autogain { + +inline constexpr auto id = "com.github.wwmm.easyeffects.autogain"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/autogain/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/autogain/"; + +} // namespace tags::schema::autogain + +namespace tags::schema::bass_enhancer { + +inline constexpr auto id = "com.github.wwmm.easyeffects.bassenhancer"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/bassenhancer/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/bassenhancer/"; + +} // namespace tags::schema::bass_enhancer + +namespace tags::schema::bass_loudness { + +inline constexpr auto id = "com.github.wwmm.easyeffects.bassloudness"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/bassloudness/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/bassloudness/"; + +} // namespace tags::schema::bass_loudness + +namespace tags::schema::compressor { + +inline constexpr auto id = "com.github.wwmm.easyeffects.compressor"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/compressor/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/compressor/"; + +} // namespace tags::schema::compressor + +namespace tags::schema::convolver { + +inline constexpr auto id = "com.github.wwmm.easyeffects.convolver"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/convolver/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/convolver/"; + +} // namespace tags::schema::convolver + +namespace tags::schema::crossfeed { + +inline constexpr auto id = "com.github.wwmm.easyeffects.crossfeed"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/crossfeed/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/crossfeed/"; + +} // namespace tags::schema::crossfeed + +namespace tags::schema::crystalizer { + +inline constexpr auto id = "com.github.wwmm.easyeffects.crystalizer"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/crystalizer/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/crystalizer/"; + +} // namespace tags::schema::crystalizer + +namespace tags::schema::deepfilternet { + +inline constexpr auto id = "com.github.wwmm.easyeffects.deepfilternet"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/deepfilternet/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/deepfilternet/"; + +} // namespace tags::schema::deepfilternet + +namespace tags::schema::deesser { + +inline constexpr auto id = "com.github.wwmm.easyeffects.deesser"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/deesser/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/deesser/"; + +} // namespace tags::schema::deesser + +namespace tags::schema::delay { + +inline constexpr auto id = "com.github.wwmm.easyeffects.delay"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/delay/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/delay/"; + +} // namespace tags::schema::delay + +namespace tags::schema::echo_canceller { + +inline constexpr auto id = "com.github.wwmm.easyeffects.echocanceller"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/echocanceller/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/echocanceller/"; + +} // namespace tags::schema::echo_canceller + +namespace tags::schema::equalizer { + +inline constexpr auto id = "com.github.wwmm.easyeffects.equalizer"; + +inline constexpr auto channel_id = "com.github.wwmm.easyeffects.equalizer.channel"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/equalizer/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/equalizer/"; + +} // namespace tags::schema::equalizer + +namespace tags::schema::exciter { + +inline constexpr auto id = "com.github.wwmm.easyeffects.exciter"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/exciter/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/exciter/"; + +} // namespace tags::schema::exciter + +namespace tags::schema::expander { + +inline constexpr auto id = "com.github.wwmm.easyeffects.expander"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/expander/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/expander/"; + +} // namespace tags::schema::expander + +namespace tags::schema::filter { + +inline constexpr auto id = "com.github.wwmm.easyeffects.filter"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/filter/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/filter/"; + +} // namespace tags::schema::filter + +namespace tags::schema::gate { + +inline constexpr auto id = "com.github.wwmm.easyeffects.gate"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/gate/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/gate/"; + +} // namespace tags::schema::gate + +namespace tags::schema::level_meter { + +inline constexpr auto id = "com.github.wwmm.easyeffects.levelmeter"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/levelmeter/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/levelmeter/"; + +} // namespace tags::schema::level_meter + +namespace tags::schema::limiter { + +inline constexpr auto id = "com.github.wwmm.easyeffects.limiter"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/limiter/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/limiter/"; + +} // namespace tags::schema::limiter + +namespace tags::schema::loudness { + +inline constexpr auto id = "com.github.wwmm.easyeffects.loudness"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/loudness/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/loudness/"; + +} // namespace tags::schema::loudness + +namespace tags::schema::maximizer { + +inline constexpr auto id = "com.github.wwmm.easyeffects.maximizer"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/maximizer/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/maximizer/"; + +} // namespace tags::schema::maximizer + +namespace tags::schema::multiband_compressor { + +inline constexpr auto id = "com.github.wwmm.easyeffects.multibandcompressor"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/multibandcompressor/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/multibandcompressor/"; + +} // namespace tags::schema::multiband_compressor + +namespace tags::schema::multiband_gate { + +inline constexpr auto id = "com.github.wwmm.easyeffects.multibandgate"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/multibandgate/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/multibandgate/"; + +} // namespace tags::schema::multiband_gate + +namespace tags::schema::output_level { + +inline constexpr auto id = "com.github.wwmm.easyeffects.outputlevel"; + +} // namespace tags::schema::output_level + +namespace tags::schema::pitch { + +inline constexpr auto id = "com.github.wwmm.easyeffects.pitch"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/pitch/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/pitch/"; + +} // namespace tags::schema::pitch + +namespace tags::schema::reverb { + +inline constexpr auto id = "com.github.wwmm.easyeffects.reverb"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/reverb/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/reverb/"; + +} // namespace tags::schema::reverb + +namespace tags::schema::rnnoise { + +inline constexpr auto id = "com.github.wwmm.easyeffects.rnnoise"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/rnnoise/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/rnnoise/"; + +} // namespace tags::schema::rnnoise + +namespace tags::schema::speex { + +inline constexpr auto id = "com.github.wwmm.easyeffects.speex"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/speex/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/speex/"; + +} // namespace tags::schema::speex + +namespace tags::schema::stereo_tools { + +inline constexpr auto id = "com.github.wwmm.easyeffects.stereotools"; + +inline constexpr auto input_path = "/com/github/wwmm/easyeffects/streaminputs/stereotools/"; + +inline constexpr auto output_path = "/com/github/wwmm/easyeffects/streamoutputs/stereotools/"; + +} // namespace tags::schema::stereo_tools + +namespace tags::schema::spectrum { + +inline constexpr auto id = "com.github.wwmm.easyeffects.spectrum"; + +} // namespace tags::schema::spectrum diff --git a/include/test_signals.hpp b/include/test_signals.hpp new file mode 100644 index 0000000..94fafbf --- /dev/null +++ b/include/test_signals.hpp @@ -0,0 +1,100 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include "pipe_manager.hpp" + +enum class TestSignalType { sine_wave, gaussian, pink }; + +class TestSignals { + public: + TestSignals(PipeManager* pipe_manager); + TestSignals(const TestSignals&) = delete; + auto operator=(const TestSignals&) -> TestSignals& = delete; + TestSignals(const TestSignals&&) = delete; + auto operator=(const TestSignals&&) -> TestSignals& = delete; + virtual ~TestSignals(); + + struct data; + + struct port { + struct data* data; + }; + + struct data { + struct port* out_left = nullptr; + struct port* out_right = nullptr; + + TestSignals* ts = nullptr; + }; + + pw_filter* filter = nullptr; + + pw_filter_state state = PW_FILTER_STATE_UNCONNECTED; + + uint n_samples = 0U; + + uint rate = 0U; + + bool create_left_channel = true; + + bool create_right_channel = true; + + bool can_get_node_id = false; + + float sine_phase = 0.0F; + + float sine_frequency = 1000.0F; + + TestSignalType signal_type = TestSignalType::sine_wave; + + void set_state(const bool& state); + + void set_frequency(const float& value); + + [[nodiscard]] auto get_node_id() const -> uint; + + void set_active(const bool& state) const; + + void set_signal_type(const TestSignalType& value); + + auto white_noise() -> float; + + private: + PipeManager* pm = nullptr; + + spa_hook listener{}; + + data pf_data = {}; + + uint node_id = 0U; + + std::vector list_proxies; + + std::random_device rd{}; + + std::mt19937 random_generator; + + std::normal_distribution normal_distribution{0.0F, 0.3F}; +}; diff --git a/include/ui_helpers.hpp b/include/ui_helpers.hpp new file mode 100644 index 0000000..f3a4fb0 --- /dev/null +++ b/include/ui_helpers.hpp @@ -0,0 +1,214 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#define FMT_HEADER_ONLY +#include +#include +#include +#include +#include +#include +#include +#include +#include "string_literal_wrapper.hpp" +#include "tags_app.hpp" +#include "tags_plugin_name.hpp" +#include "util.hpp" + +namespace ui { + +void show_fixed_toast(AdwToastOverlay* toast_overlay, + const std::string& text, + const AdwToastPriority& priority = ADW_TOAST_PRIORITY_HIGH); + +void show_autohiding_toast(AdwToastOverlay* toast_overlay, + const std::string& text, + const uint& timeout = 5U, + const AdwToastPriority& priority = ADW_TOAST_PRIORITY_HIGH); + +auto missing_plugin_box(const std::string& name, const std::string& package) -> GtkWidget*; + +void show_simple_message_dialog(GtkWidget* parent, const std::string& title, const std::string& descr); + +auto parse_spinbutton_output(GtkSpinButton* button, const char* unit, const bool& lower_bound = true) -> bool; + +auto parse_spinbutton_input(GtkSpinButton* button, double* new_value, const bool& lower_bound = true) -> int; + +auto get_new_filter_serial() -> uint; + +void set_ignore_filter_idle_add(const uint& serial, const bool& state); + +auto get_ignore_filter_idle_add(const uint& serial) -> bool; + +void save_user_locale(); + +auto get_user_locale() -> std::locale; + +auto get_plugin_credit_translated(const std::string& plugin_package) -> std::string; + +void update_level(GtkLevelBar* w_left, + GtkLabel* w_left_label, + GtkLevelBar* w_right, + GtkLabel* w_right_label, + const float& left, + const float& right); + +void append_to_string_list(GtkStringList* string_list, const std::string& name); + +void remove_from_string_list(GtkStringList* string_list, const std::string& name); + +void init_global_app_settings(); + +void unref_global_app_settings(); + +auto get_global_app_settings() -> GSettings*; + +template +void prepare_spinbutton(GtkSpinButton* button) { + if (button == nullptr) { + util::warning("Null pointer provided: Spinbutton widget not prepared."); + + return; + } + + g_signal_connect(button, "output", G_CALLBACK(+[](GtkSpinButton* button, gpointer user_data) { + return parse_spinbutton_output(button, sl_wrapper.msg.data(), lower_bound); + }), + nullptr); + + g_signal_connect(button, "input", G_CALLBACK(+[](GtkSpinButton* button, gdouble* new_value, gpointer user_data) { + return parse_spinbutton_input(button, new_value, lower_bound); + }), + nullptr); +} + +template +void prepare_scale(GtkScale* scale) { + /* + The sanitizer caught a "use after free" inside this function. As the problem happens randomly and is hard to + reproduce I am not sure about what could be the cause yet. So for now I am just checking for null pointers. + */ + + if (scale == nullptr) { + util::warning("Null pointer provided: Scale widget not prepared."); + + return; + } + + gtk_scale_set_format_value_func( + scale, + (GtkScaleFormatValueFunc) + + [](GtkScale* scale, double value, gpointer user_data) { + if (scale == nullptr) { + return g_strdup(""); + } + + auto precision = gtk_scale_get_digits(scale); + auto unit = sl_wrapper.msg.data(); + + using namespace std::string_literals; + + auto text = fmt::format(ui::get_user_locale(), "{0:.{1}Lf}{2}", value, precision, + ((unit != nullptr) ? " "s + unit : "")); + + return g_strdup(text.c_str()); + }, + nullptr, nullptr); +} + +template +void prepare_spinbuttons(Targs... button) { + (prepare_spinbutton(button), ...); +} + +template +void prepare_scales(Targs... scale) { + (prepare_scale(scale), ...); +} + +template +void gsettings_bind_widget(GSettings* settings, + const char* key, + T widget, + GSettingsBindFlags flags = G_SETTINGS_BIND_DEFAULT) { + static_assert(std::is_same_v || std::is_same_v || + std::is_same_v || std::is_same_v || std::is_same_v); + + if constexpr (std::is_same_v) { + g_settings_bind(settings, key, gtk_spin_button_get_adjustment(widget), "value", flags); + } + + if constexpr (std::is_same_v) { + g_settings_bind(settings, key, gtk_range_get_adjustment(GTK_RANGE(widget)), "value", flags); + } + + if constexpr (std::is_same_v || std::is_same_v) { + g_settings_bind(settings, key, widget, "active", flags); + } + + if constexpr (std::is_same_v) { + g_settings_bind(settings, key, widget, "active-id", flags); + } +} + +template +void gsettings_bind_widgets(GSettings* settings, Targs... widget) { + (gsettings_bind_widget(settings, key_wrapper.msg.data(), widget), ...); +} + +template +void gsettings_bind_enum_to_combo_widget(GSettings* settings, + const gchar* key, + T widget, + GSettingsBindFlags flags = G_SETTINGS_BIND_DEFAULT) { + static_assert(std::is_same_v || std::is_same_v); + + struct Data { + GSettings* settings; + const gchar* key; + }; + + g_settings_bind_with_mapping( + settings, key, widget, "selected", flags, + +[](GValue* value, GVariant* variant, gpointer user_data) { + auto* d = static_cast(user_data); + + g_value_set_uint(value, static_cast(g_settings_get_enum(d->settings, d->key))); + + return 1; + }, + +[](const GValue* value, const GVariantType* expected_type, gpointer user_data) { + auto* d = static_cast(user_data); + + g_settings_set_enum(d->settings, d->key, static_cast(g_value_get_uint(value))); + + return g_variant_new_string(g_settings_get_string(d->settings, d->key)); + }, + new Data({.settings = settings, .key = key}), + +[](gpointer user_data) { + auto* d = static_cast(user_data); + + delete d; + }); +} + +} // namespace ui diff --git a/include/util.hpp b/include/util.hpp new file mode 100644 index 0000000..c5ac5f4 --- /dev/null +++ b/include/util.hpp @@ -0,0 +1,282 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace util { +// Minimum dB level reported here has to be used in gsettings and spinbuttons +// as minimal values for controls that replicates the -infinity state (linear 0). +constexpr float minimum_db_level = -100.0F; +constexpr double minimum_db_d_level = -100.0; +constexpr float minimum_linear_level = 0.00001F; +constexpr double minimum_linear_d_level = 0.00001; + +using source_location = std::source_location; + +void debug(const std::string& s, source_location location = source_location::current()); +void error(const std::string& s, source_location location = source_location::current()); +void critical(const std::string& s, source_location location = source_location::current()); +void warning(const std::string& s, source_location location = source_location::current()); +void info(const std::string& s, source_location location = source_location::current()); + +auto normalize(const double& x, const double& max, const double& min = 1.0) -> double; + +auto linear_to_db(const float& amp) -> float; +auto linear_to_db(const double& amp) -> double; + +auto db_to_linear(const float& db) -> float; +auto db_to_linear(const double& db) -> double; + +auto db20_gain_to_linear(GValue* value, GVariant* variant, gpointer user_data) -> gboolean; + +auto linear_gain_to_db20(const GValue* value, const GVariantType* expected_type, gpointer user_data) -> GVariant*; + +auto db10_gain_to_linear(GValue* value, GVariant* variant, gpointer user_data) -> gboolean; + +auto double_to_float(GValue* value, GVariant* variant, gpointer user_data) -> gboolean; + +auto db20_gain_to_linear_double(GValue* value, GVariant* variant, gpointer user_data) -> gboolean; + +auto linear_double_gain_to_db20(const GValue* value, const GVariantType* expected_type, gpointer user_data) + -> GVariant*; + +auto double_x10_to_int(GValue* value, GVariant* variant, gpointer user_data) -> gboolean; + +auto ms_to_ns(GValue* value, GVariant* variant, gpointer user_data) -> gboolean; + +auto remove_filename_extension(const std::string& basename) -> std::string; + +void print_thread_id(); + +auto gchar_array_to_vector(gchar** gchar_array, bool free_data = true) -> std::vector; + +auto make_gchar_pointer_vector(const std::vector& input) -> std::vector; + +auto gsettings_get_color(GSettings* settings, const char* key) -> GdkRGBA; + +auto gsettings_get_string(GSettings* settings, const char* key) -> std::string; + +auto gsettings_get_range(GSettings* settings, const char* key) -> std::pair; + +auto add_new_blocklist_entry(GSettings* settings, const std::string& name) -> bool; + +void remove_blocklist_entry(GSettings* settings, const std::string& name); + +void idle_add(std::function cb); + +auto get_files_name(const std::filesystem::path& dir_path, const std::string& ext) -> std::vector; + +void reset_all_keys_except(GSettings* settings, + const std::vector& blocklist = std::vector(), + bool delay = false); + +auto str_contains(const std::string& haystack, const std::string& needle) -> bool; + +auto compare_versions(const std::string& v0, const std::string& v1) -> int; + +template +void print_type(T v) { + warning(typeid(v).name()); +} + +template +auto str_to_num(const std::string& str, T& num) -> bool { + // This is a more robust implementation of `std::from_chars` + // so that we don't have to do every time with `std::from_chars_result` structure. + // We don't care of error types, so a simple bool is returned on success/fail. + // A left trim is performed on strings so that the conversion could success + // even if there are leading whitespaces and/or the plus sign. + + auto first_char = str.find_first_not_of(" +\n\r\t"); + + if (first_char == std::string::npos) { + return false; + } + +#ifndef ENABLE_LIBCPP_WORKAROUNDS + + const auto result = std::from_chars(str.data() + first_char, str.data() + str.size(), num); + + return (result.ec == std::errc()); + +#else + + if constexpr (std::is_floating_point_v) { + char* endp = nullptr; + + /* we're asking for C locale which is preallocated, so no alloc here */ + + auto loc = newlocale(LC_ALL_MASK, "C", nullptr); + + if constexpr (std::is_same_v) { + num = strtof_l(str.data() + first_char, &endp, loc); + } else { + num = strtod_l(str.data() + first_char, &endp, loc); + } + + /* we gotta "free" it anyway */ + + freelocale(loc); + + return (endp && !*endp && (endp != (str.data() + first_char))); + } else { + const auto result = std::from_chars(str.data() + first_char, str.data() + str.size(), num); + + return (result.ec == std::errc()); + } + +#endif +} + +template +auto to_string(const T& num, const std::string def = "0") -> std::string { + // This is used to replace `std::to_string` as a locale independent + // number conversion using `std::to_chars`. + // An additional string parameter could be eventually provided with a + // default value to return in case the conversion fails. + + // Max buffer length: + // number of base-10 digits that can be represented by the type T without change + + // number of base-10 digits that are necessary to uniquely represent all distinct + // values of the type T (meaningful only for real numbers) + + // room for other characters such as "+-e,." + const size_t max = std::numeric_limits::digits10 + std::numeric_limits::max_digits10 + 10U; + + std::array buffer; + + const auto p_init = buffer.data(); + + const auto result = std::to_chars(p_init, p_init + max, num); + + return (result.ec == std::errc()) ? std::string(p_init, result.ptr - p_init) : def; +} + +template +concept Number = std::is_integral::value || std::is_floating_point::value; + +template +auto logspace(const T& start, const T& stop, const uint& npoints) -> std::vector { + std::vector output; + + if (stop <= start || npoints < 2) { + return output; + } + + auto log10_start = std::log10(start); + auto log10_stop = std::log10(stop); + + const T delta = (log10_stop - log10_start) / static_cast(npoints - 1); + + output.push_back(start); + + T v = log10_start; + + while (output.size() < npoints - 1) { + v += delta; + + if constexpr (std::is_same_v) { + output.push_back(std::pow(10.0F, v)); + } else { + output.push_back(std::pow(10.0, v)); + } + } + + output.push_back(stop); + + return output; +} + +template +auto linspace(const T& start, const T& stop, const uint& npoints) -> std::vector { + std::vector output; + + if (stop <= start || npoints < 2) { + return output; + } + + const T delta = (stop - start) / static_cast(npoints - 1); + + output.push_back(start); + + T v = start; + + while (output.size() < npoints - 1) { + v += delta; + + output.push_back(v); + } + + output.push_back(stop); + + return output; +} + +// The following is not used and it was made only for reference. May be removed in the future. +template +auto gsettings_key_check_number_range(GSettings* settings, const char* key, const T& v) -> bool { + GSettingsSchema* schema = nullptr; + GVariant* g_value = nullptr; + + // Get GSettingsSchema + g_object_get(settings, "settings-schema", &schema, nullptr); + + auto* schema_key = g_settings_schema_get_key(schema, key); + + // Get GVariant + if constexpr (std::is_same_v) { + g_value = g_variant_new_double(v); + } else if constexpr (std::is_same_v) { + g_value = g_variant_new_int32(v); + } + + if (g_value == nullptr) { + return false; + } + + const auto is_in_range = g_settings_schema_key_range_check(schema_key, g_value); + + g_variant_unref(g_value); + g_settings_schema_unref(schema); + + return is_in_range != 0; +} + +} // namespace util diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..dcc334b --- /dev/null +++ b/meson.build @@ -0,0 +1,119 @@ +project( + 'easyeffects', + 'c', + 'cpp', + default_options : [ + 'cpp_std=c++20', + 'buildtype=debugoptimized', + # 1: -Wall + # 2: -Wall -Wextra + # 3: -Wall -Wextra -Wpedantic + 'warning_level=2' + ], + license: 'GPL-3-or-later', + version: '7.1.1', + meson_version: '>= 0.60.0' +) + +# see https://github.com/wwmm/easyeffects/pull/1739 for more info +cxx = meson.get_compiler('cpp') + +if cxx.get_id() == 'clang' and not cxx.version().version_compare('>=16.0.0') + error('This project only supports gcc or > clang 16 compilers due to usage of c++20 features.') +endif + +suppressed_warnings = [ + '-Wno-missing-field-initializers', + '-Wno-unused-parameter' + ] + +add_project_arguments ( + suppressed_warnings, + language: [ 'c', 'cpp' ], + ) + +add_project_arguments('-DG_LOG_DOMAIN="easyeffects"', language : [ 'c', 'cpp' ]) +add_project_arguments('-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()), + language:'c') + +gnome_mod = import('gnome') +i18n_mod = import('i18n') + +prefix = get_option('prefix') +bindir = join_paths(prefix, get_option('bindir')) +libdir = join_paths(prefix, get_option('libdir')) +datadir = join_paths(prefix, get_option('datadir')) +localedir = join_paths(prefix, get_option('localedir')) +include_dir = include_directories('include') +system_presets_dir = join_paths(datadir, meson.project_name() + '/presets') +system_irs_dir = join_paths(datadir, meson.project_name() + '/irs') +system_rnnoise_dir = join_paths(datadir, meson.project_name() + '/rnnoise') +config_h_dir = include_directories('.') + +status = [] + +if get_option('devel') + status += 'Using development build mode with .Devel appended to the application ID.' + app_id_suffix = '.Devel' + name_suffix = ' (Devel)' +else + status += 'Using stable build mode with the standard application ID' + app_id_suffix = '' + name_suffix = '' +endif + +if get_option('enable-mold') + # mold 1.11.0 or later needed due to https://github.com/rui314/mold/issues/1017 + status += 'Using mold linker, so make sure mold 1.11.0 or later is installed on your system.' + # --no-as-needed temporarily necessary due to the seeming return of https://github.com/rui314/mold/issues/1017 + link_args = ['-fuse-ld=mold', '-Wl,--no-as-needed'] +else + link_args = [] +endif + +app_id = 'com.github.wwmm.easyeffects@0@'.format(app_id_suffix) + +# Configuration for application itself at compile time, such as debug info like the commit that was built +conf = configuration_data() + +conf.set10('IS_DEVEL_BUILD', get_option('devel')) +conf.set_quoted('APP_NAME', 'Easy Effects' + name_suffix) + +conf.set_quoted('GETTEXT_PACKAGE', meson.project_name()) +conf.set_quoted('LOCALE_DIR', localedir) +conf.set_quoted('SYSTEM_PRESETS_DIR', system_presets_dir) +conf.set_quoted('SYSTEM_IRS_DIR', system_irs_dir) +conf.set_quoted('SYSTEM_RNNOISE_DIR', system_rnnoise_dir) +conf.set_quoted('LIB_DIR', libdir) +conf.set_quoted('VERSION', meson.project_version()) + +conf.set('COMMIT_DESC', '"@VCS_TAG@"') + +config_h = declare_dependency( + sources: vcs_tag( + command: ['git', 'rev-parse', '--short', 'HEAD'], + fallback: 'Could not find commit of build', + input: configure_file( + output: 'config.h.in', + configuration: conf + ), + output: 'config.h' + ) +) + +subdir('data') +subdir('po') +subdir('help') +subdir('src') + +install_emptydir(system_presets_dir) +install_emptydir(system_irs_dir) +install_emptydir(system_rnnoise_dir) + +gnome_mod.post_install( + glib_compile_schemas: true, + gtk_update_icon_cache: true, + update_desktop_database: true, +) + +message('\n '.join(status)) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..8642d05 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,34 @@ +option( + 'devel', + 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.', + type: 'boolean', + value: false +) + +option( + 'enable-mold', + 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', + type: 'boolean', + value: false +) + +option( + 'enable-libportal', + description: 'Whether to use libportal to handle autostart files.', + type: 'boolean', + value: false +) + +option( + 'enable-rnnoise', + description: 'Whether to use RRNNoise for noise cancellation.', + type: 'boolean', + value: true +) + +option( + 'enable-libcpp-workarounds', + description: 'Whether to enable code paths need for compilation on libc++.', + type: 'boolean', + value: false +) diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..3d085cd --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1,33 @@ +cs +de +fr_FR +gl +hr +id_ID +it_IT +nl +pl +pt_BR +ru +sk +sv +da +nb_NO +es_MX +es_CO +tr +zh_CN +ro +es_VE +ja +ko +es +km +af +th +bg +ka +uk +eu +nn +ca diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..5c6af5f --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,74 @@ +data/com.github.wwmm.easyeffects.desktop.in +data/schemas/com.github.wwmm.easyeffects.gschema.xml +data/ui/app_info.ui +data/ui/application_window.ui +data/ui/apps_box.ui +data/ui/autogain.ui +data/ui/autoload_row.ui +data/ui/bass_enhancer.ui +data/ui/bass_loudness.ui +data/ui/blocklist_menu.ui +data/ui/chart.ui +data/ui/compressor.ui +data/ui/convolver.ui +data/ui/convolver_menu_combine.ui +data/ui/convolver_menu_impulses.ui +data/ui/crossfeed.ui +data/ui/crystalizer.ui +data/ui/crystalizer_band.ui +data/ui/deesser.ui +data/ui/delay.ui +data/ui/deepfilternet.ui +data/ui/echo_canceller.ui +data/ui/effects_box.ui +data/ui/equalizer.ui +data/ui/equalizer_band.ui +data/ui/exciter.ui +data/ui/expander.ui +data/ui/factory_clients_listview.ui +data/ui/factory_input_device_dropdown.ui +data/ui/factory_modules_listview.ui +data/ui/factory_output_device_dropdown.ui +data/ui/factory_presets_dropdown.ui +data/ui/factory_rnnoise_listview.ui +data/ui/filter.ui +data/ui/gate.ui +data/ui/level_meter.ui +data/ui/limiter.ui +data/ui/loudness.ui +data/ui/maximizer.ui +data/ui/multiband_compressor.ui +data/ui/multiband_compressor_band.ui +data/ui/multiband_gate.ui +data/ui/multiband_gate_band.ui +data/ui/pipe_manager_box.ui +data/ui/pitch.ui +data/ui/plugin_row.ui +data/ui/plugins_box.ui +data/ui/plugins_menu.ui +data/ui/preferences_general.ui +data/ui/preferences_spectrum.ui +data/ui/preferences_window.ui +data/ui/preset_row.ui +data/ui/presets_menu.ui +data/ui/reverb.ui +data/ui/rnnoise.ui +data/ui/shortcuts.ui +data/ui/speex.ui +data/ui/stereo_tools.ui +src/app_info.cpp +src/application.cpp +src/application_ui.cpp +src/convolver_menu_impulses.cpp +src/convolver_ui.cpp +src/effects_box.cpp +src/equalizer_ui.cpp +src/pipe_manager_box.cpp +src/plugin_base.cpp +src/plugins_box.cpp +src/plugins_menu.cpp +src/presets_menu.cpp +src/rnnoise_ui.cpp +src/speex_ui.cpp +src/tags_plugin_name.cpp +src/ui_helpers.cpp diff --git a/po/af.po b/po/af.po new file mode 100644 index 0000000..601437b --- /dev/null +++ b/po/af.po @@ -0,0 +1,2440 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-08-17 04:16+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Afrikaans \n" +"Language: af\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Oudio-effekte vir PipeWire toepassing" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "EasyEffects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "EasyEffects" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects is 'n gevorederde oudio manipilasie toepassing. Dit sluit in " +#~ "'n gelykmaker, beperker, kompressor en nagalminstrument, net om 'n paar " +#~ "te noem. Om die te komplementeer is daar ook 'n spektrum ontleder." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects is die opvolger van PulseEffects. EasyEffects ondersteun " +#~ "slegs PipeWire se klankbediener. PulseAudio-gebruikers moet eerder " +#~ "PulseEffects gebruik." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Omdat EasyEffects die verstek PipeWire-klankbediener gebruik, sal dit met " +#~ "die meeste, indien nie alle toepassings wat jy gebruik nie, werk. Alle " +#~ "ondersteunde toepassings word in die hoofskerm aangebied, waar elkeen " +#~ "individueel geaktiveer kan word." diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..72f456c --- /dev/null +++ b/po/bg.po @@ -0,0 +1,2438 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-12-23 05:48+0000\n" +"Last-Translator: Ivan Pekov \n" +"Language-Team: Bulgarian \n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.15.1-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Еквалайзер, Компресор и други звукови ефекти" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Звукови ефекти за приложения, използващи PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "ограничител;компресор;ехо;еквалайзер;автосила;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Профили\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Активирай/спри тази програма" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Активирай" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Лист на програмите изключения: Добави/Премахни тази програма" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Премахни" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Обеззвучи тази програма" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Промени силата на звука на тази програма" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Сила на звука на програмата" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Върни до фабрични настройки" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Настройки" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Преки пътища" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Относно Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Профили" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Меню с профили" + +#: data/ui/application_window.ui:62 +#, fuzzy +msgid "Enable/disable the global bypass" +msgstr "Активирай/спри тази програма" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Глобален Bypass" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Основно Меню" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Прозорец на Easy Effects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Лист с програми" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Листа е празен" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Аудио приложение не е налично" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Цел" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Тишина" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Справка" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Моментално" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Краткосрочен" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Интегриран" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Средно аритметично (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Средно аритметично (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Средно аритметично (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Средно аритметично (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Относително" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Диапазон" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Изходен gain" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Вход" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Входен gain на добавка" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Изход" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Изходен gain на добавка" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Нулиране" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Устройство" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Име" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Профил" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Предварително задаване" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Слушам" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Смесени хармоники" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3-то" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2-ро" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Количество" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Хармоници" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Обхват" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Под" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Минимална стойност" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Линк" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Име на приложението" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Добави към изключени приложения" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Списък на изключени приложения" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Покажи изключените приложения" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Аудио компресор" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Режим" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Надолу" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Нагоре" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Подсилване" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Компресионен режим" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Праг на подсилване" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Време" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Праг" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Съотношение" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Сухо ниво" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Странична верига" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Източник" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "По средата" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Странично" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Наляво" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Надясно" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Надясно" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Надясно" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Странично" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Странично" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Връх" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Режим на странична верига" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Странична верига" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Тип" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Обратна връзка" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Външно" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Тип странична връзка" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Входно устройство" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Филтри на странична верига" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Честота" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Изключено" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Gain" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Крива" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "Л" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Ляв канал" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "Д" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Десен канал" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Импулси" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Комбинирай" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Спектър" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Връх" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Справка" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Справка" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Предварително задаване" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Профили" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Използвайки" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Съотношение" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Праг" + +#~ msgid "_Manual" +#~ msgstr "_Наръчник" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Обеззвучи тази програма" + +#, fuzzy +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "Активирай/спри глобалния bypass" diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..77d9884 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,2407 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-11 02:51+0000\n" +"Last-Translator: Roger VC \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalitzador, Compressor i Altres Efectes d'Àudio" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectes d'àudio per a aplicacions PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitador;compressor;reverberació;equalitzador;autovolum;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Activar/desactivar aquesta aplicació" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Activar" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Llista d'aplicacions excloses: Afegiu/traieu aquesta aplicació" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Exclou" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Silencia l'aplicació" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Canvia el volum d'aquesta aplicació" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Volum de l'aplicació" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Ajuda" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "_Restablir parametres" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Preferències" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Dreceres" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Sobre Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..969e36d --- /dev/null +++ b/po/cs.po @@ -0,0 +1,3397 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Pavel Fric , 2017, 2018, 2019. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-18 18:54+0000\n" +"Last-Translator: Fjuro \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ekvalizér, kompresor a jiné zvukové efekty" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Zvukové efekty pro programy využívající PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limiter;kompresor;dozvuk;ekvalizér;automatická hlasitost;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Předvolby\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Povolit/zakázat tuto aplikaci" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Povolit" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Seznam vyloučených aplikací: Přidat/odstranit tuto aplikaci" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Vyloučit" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Ztlumit aplikaci" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Změnit hlasitost této aplikace" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Hlasitost aplikace" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Nápověda" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Resetovat nastavení" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Nastavení" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Klávesové zkratky" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_O EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Přednastavení" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Nabídka profilů" + +#: data/ui/application_window.ui:62 +#, fuzzy +msgid "Enable/disable the global bypass" +msgstr "Povolit/zakázat tuto aplikaci" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Globální bypass" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Hlavní nabídka" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Easy Effects okno" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Seznam aplikací" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Prázdný seznam" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Není dostupná žádná zvuková aplikace" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Vymazat Historii" + +#: data/ui/autogain.ui:39 +#, fuzzy +msgid "Controls" +msgstr "Ovladač zesílení" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Cíl" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Ticho" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Maximální historie" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Reference" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Chvilkové" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Kratokodobě" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrovaná" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Geometrický průměr (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Geometrický průměr (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Geometrický průměr (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Geometrický průměr (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Hlasitost" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativní" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rozsah" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Výstupní zesílení" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Vstup" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Vstupní zesílení pluginu" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Výstup" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Výstupní zesílení pluginu" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Vrátit na výchozí" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Zařízení" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Název" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Profil" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Odstranit tento automaticky načítaný profil" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Poslouchat" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Míchat harmonické kmity" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3." + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2." + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Množství" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonické kmity" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Rozsah" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Spodní mez" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Spodní hodnota" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Odkaz" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Název aplikace" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Přidat do vyloučených aplikací" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Seznam vyloučených aplikací" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Zobrazit vyloučené aplikace" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Zavřít okno" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Režim" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Dolů" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Nahoru" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Zesílení" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Kompresní režim" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Práh zesílení" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Velikost zesílení" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Náběh" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Čas" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Práh" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Náběh" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Práh attacku" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Uvolnění" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Uvolnění" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Práh release" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Poměr" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Přechod" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Pozvednutí" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Dry Level" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Wet Level" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Postranní řetězec" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereo režim" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Zdroj" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Střední" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Postranní" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Levý" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Pravý" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Minimum" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Maximum" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Zdroj sidechain" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Zpoždění Levá/Pravá" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Pravý" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Postranní" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Postranní" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Výchozí zdroj" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Vrchol" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Nízkofrekvenční filtr" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Jednoduchý klouzavý průměr" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Režim sidechain" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Externí postranní řetězec" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Typ" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Feed-forward" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Kanál-zpět" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Externí" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Druh sidechain" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Vstupní zařízení" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Předzesílení" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reaktivita" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Výhled" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Filtry sidechain" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "High-Pass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Kmitočet" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Vypnuto" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/okt" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/okt" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/okt" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Režim vysokopásmového filtru" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Filtr vysokého kmitočtu" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Dolní pásmo" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Režim filtrování nízkých frekvencí" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Zesílení" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Obálka" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Křivka" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Levý kanál" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "P" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Pravý kanál" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsy" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "kombinovat" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Šířka sterea" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Logaritmické měřítko" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Autogain" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Kmitočet" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Vzorky" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Doba trvání" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Kombinované odezvy impulsu" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "První jádro" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "druhé jádro" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Název výstupního souboru" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Jméno kombinovaného jádra" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Zavést impuls" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Hledat" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Hledat soubor s impulsem" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Seznam souborů s impulsem" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Výchozí" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Useknutí" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Kanál" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Překlenutí" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Ztlumit" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "ZjiÅ¡tění" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Rozšířit" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Rozdělit" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 split" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Frekvence 1 split" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 Vrchol" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Frekvence 2 vrchol" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 Zesílení" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Frekvence 1 zvýšení" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 Úroveň" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Frekvence 2 level" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 Vrchol Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Frekvence 2 vrchol Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Nedbalost" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "ZjiÅ¡těno" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Snížení" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Zpoždění" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Obrátit fázi" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Tlumení" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Délka filtru" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Délka filtru" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Potlačení zbytkové ozvěny" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Potlačení ozvěny blízko konce" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Vynechané aplikace" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Pásma" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Vyvážení" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Pitch levá" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Pitch Pravá" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Rozdělit kanály" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Uhladit" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Vypočítat Kmitočty" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Pásma" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importovat přednastavení" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Sklon" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Sólo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Jakost" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Šířka" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Strop" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Horní mezní hodnota" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Režim pásma" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Vnitřní" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Přístup" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Popis" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Odstranit tento soubor s přednastavením" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Dolní práh" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Horní práh" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Zvonek" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Překlenutí" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Vroubek" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Rezonance" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Dolní pásmo" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "ZmenÅ¡ení pásma" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Dolní pásmo" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ekvalizér" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Brána" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Zóna" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Hystereze" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Mix" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Začátek zóny attacku" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Začátek release zóny" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frekvence 2 vrchol" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Převzorkování" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Dither" + +#: data/ui/limiter.ui:94 +#, fuzzy +msgid "Herm Thin" +msgstr "Herm tenký" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Herm Å¡iroký" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Herm Tail" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Herm Duck" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exp Thin" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp Wide" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Exp Tail" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exp Duck" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "čára tenká" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "čára Å¡iroká" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Šířka čáry" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Line Duck" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Žádný" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Polovina x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Polovina x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Polovina x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Polovina x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Polovina x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Polovina x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Polovina x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Polovina x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Polovina x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Polovina x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Kompletní x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Kompletní x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Kompletní x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Kompletní x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Kompletní x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Kompletní x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Kompletní x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Kompletní x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Kompletní x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Kompletní x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC Předzesilovač" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Předzesílení postranního řetězce" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Zesílení" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Spojení sterea" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Externí postranní řetězec" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Externí zdroj postranního řetězce" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Automatické vyrovnávání" + +#: data/ui/limiter.ui:537 +#, fuzzy +msgid "Auto Leveling Attack" +msgstr "Automatické Úrovně" + +#: data/ui/limiter.ui:573 +#, fuzzy +msgid "Auto Leveling Release" +msgstr "Automatické Úrovně" + +#: data/ui/limiter.ui:608 +#, fuzzy +msgid "Auto Leveling Knee" +msgstr "Automatické Úrovně" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Levé zesílení" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Pravé zesílení" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Levý postranní řetězec" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Pravý postranní řetězec" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standardní" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Rovný" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Velikost FFT" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Hlasitost výstupu" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Přiřazení kanálu" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Strop" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Postranní řetězec" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "Růžová BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "Růžová MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +#, fuzzy +msgid "Brown BT" +msgstr "Hnědá BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "Hnědá MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Provozní režim" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klasický" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderní" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Obrátit fázi" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Seznam pásem" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Pásmo 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Pásmo 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Pásmo 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Pásmo 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Pásmo 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Pásmo 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Pásmo 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Pásmo 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Začátek pásma" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Konec pásma" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Kompresní režim pásem" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Překlenutí" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Možnosti postranního řetězce" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereo režim" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtr" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Nízkopásmový filtr" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Frekvence nízkopásmového filtru" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Vysokopásmový filtr" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Frekvence vysokopásmového filtru" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "Předzesilovač" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Pásmové zesílení" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Pásmová obálka" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Pásmová křivka" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "ZmenÅ¡ení pásma" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Obecné" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Správa zařízení" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"V externích aplikacích (např. Nastavení Gnome a Nastavení Plasma Systému) se " +"NEDOPORUČUJE nastavovat Easy Effects Sink/Source jako výchozí zařízení." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Použít výchozí vstup" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Vlastní vstupní zařízení" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Použít výchozí výstup" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "vlastní výstupní zařízení" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Informace o serveru" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Verze záhlaví" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Verze knihovny" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Vzorkovací frekvence" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Minimální Kvantum" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Maximální Kvantum" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Výchozí Kvantum" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Automatické načítání přednastavení" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Výstupní zařízení" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Profily pro výstup" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Vytvořit asociaci" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Přidat automatické načítání přednastavení výstupu" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Seznam automaticky načítaných profilů pro výstup" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Vstupní zařízení" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Profily pro vstup" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Přidat automatické načítání přednastavení vstupu" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Seznam automaticky načítaných profilů pro vstup" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Moduly" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Seznam modulů" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Klienti" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "seznam klientů" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Testovací signál" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Stav" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Povoleno" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Vlastnosti" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanály" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Oba" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Oba kanály" + +#: data/ui/pipe_manager_box.ui:539 +#, fuzzy +msgid "Waveform" +msgstr "forma vlny" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinusová vlna" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Bílý Å¡um" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Rozsah frekvence" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Okno" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Délka filtru" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Výška tónu" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Půltóny" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Reference" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Reference" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Odstranit tento efekt" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Povolit/zakázat tento efekt" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Změna pozice tohoto efektu" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Přidat efekt" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Seznam použitých pluginů" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Žádné efekty" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Audio Stream není modifikovaný" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Hledat Plugin" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Seznam Pluginů" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Obecné" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Servis" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Spustit službu při spuÅ¡tění systému" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Vypnout při zavření okna" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Zpracovat vÅ¡echny výstupní streamy" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Zpracovat vÅ¡echny vstupní streamy" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Ignorovat streamy z monitoru zařízení" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Použít krychlový objem" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "časový limit nečinnosti" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Styl" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Použít tmavý vzhled" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Skrýt menu při kliknutí vedle" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Pokusný" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Zavřít okno" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Tvar" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Pruhy" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Čáry" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Tečky" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Body" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Výška" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Šířka čáry" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Výplň" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Ukázat hranici pásem" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Zaoblené rohy" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Barva" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "čáry a pásma" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Å¡títky os" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Rozsah frekvence" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimum" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Nejvýše" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Načíst" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Uložit nynější nastavení do tohoto souboru s přednastavením" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Uložit nynější nastavení do tohoto souboru s přednastavením" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Odstranit tento soubor s přednastavením" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Název nového profilu pro vstup" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Vytvořit nové přednastavení" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "importovat přednastavení" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Hledat profil pro vstup" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Hledat profil pro vstup" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Tlumení vysokého kmitočtu" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Velikost prostoru" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Malý" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Střední" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Velký" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Chodba" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Velký/plynulý" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Pokusný" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Rozptylování" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Předzpoždění" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Čas dozvuku" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Ořezání hloubek" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Ořezání výšek" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Okolní prostředí" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Prázdné zdi" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Pokoj" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Velký prázdný sál" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disko" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Velký obsazený sál" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importovat model" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Detekce hlasu" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modely" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Standardní model" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Seznam RNNoise modelů" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Model nenačtený" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Aktivní model" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Standard RNNoise model" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Přehled" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Celá obrazovka/Obnovit z celé obrazovky" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Zavřít okno" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Ukončit EasyEffects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Odhlučnit" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Automatické Vyhlazení" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Dereverbace" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Pravděpodobnost Hlasové Aktivity" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Začít" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Pokračovat" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Potlačení Å¡umu" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Úroveň" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Vstupní vyvážení" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Úroveň softclipu" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matrice sterea" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LP > LP (výchozí stereo)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LP > SS (stereo ke střední straně)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "SS > LP (střední strana ke stereu)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LP > LL (mono levý kanál)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LP > PP (mono pravý kanál)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LP > L+P (mono součet L+P)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (stereo obrácení kanálů)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Stereo režim" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Postranní úroveň" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Postranní vyvážení" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Prostřední úroveň" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Prostřední panorama" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Výstupní bilance" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Zpoždění L/P" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Zpoždění Levá/Pravá" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Základ sterea" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fáze sterea" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "Běží" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Pozastaveno" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Neaktivní" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Tvoření" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Chyba" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Neznámý" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "Kanály" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Ukončit EasyEffects. Užitečné, při spuÅ¡tění servisního režimu." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Nahrát přednastavení. Příklad: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Obnovit EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Skrýt Okno." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "Globální propuÅ¡tění. 1 pro zapnutí, 2 pro vypnutí, 3 pro získání stavu" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Ukázat dostupná přednastavení." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Výstup" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_Vstup" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "Soubor není standardní" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "Soubor Impulse může být poÅ¡kozený nebo nepodporovaný" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Podporovány jsou pouze Stereo Impulse soubory" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Impulse soubor nebyl importován" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Zavést soubor s impulsem" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Otevřít" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Odpověď impulsu" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Načíst Impulse" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Odstranit Impuls" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Impulse soubor nebyl načten" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Nepodařilo se nahrát Impulse soubor" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Záznamníky" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Přehrávače" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Efekty" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importovat přednastavený soubor APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO Přednastavení" + +#: src/equalizer_ui.cpp:412 +#, fuzzy +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"Přednastavení APO není načtené. Formát souboru může být chybný. Prosím " +"zkontrolujte jeho obsah." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "Importovat soubor přednastavení GraphicEQ" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "Přednastavení GraphicEQ" + +#: src/equalizer_ui.cpp:610 +#, fuzzy +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"Přednastavení GraphicEQ není načtené. Formát souboru může být chybný. Prosím " +"zkontrolujte jeho obsah." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Odstranit předvolbu automatického načítání" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Výstupní zařízení" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Odstranit" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Výstupní zařízení" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Přidat" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Vybraný model nebyl načten. Jeho formát nemusí být podporovaný. Návrat ke " +"standardnímu modelu." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importovat modelový soubor" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise Modely" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "ZlepÅ¡ovač hloubek" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Hlasitost basů" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Konvolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Prolínání kanálů" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Krystalizátor" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Odstraňovač sykotu" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Potlačovač echa" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ekvalizér" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Zvukový budič" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Výstupní zařízení" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Omezovač" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "ZvětÅ¡ovač" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Vícepásmový kompresor" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Vícepásmová brána" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Dozvuk" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Redukce Å¡umu" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Řečový procesor" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Nástroje sterea" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} Není dostupný" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-inf" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Použití" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Nízkopásmový filtr" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Vysokopásmový filtr" + +#~ msgid "Uniform" +#~ msgstr "Rovnoměrný" + +#~ msgid "New Output Preset Name" +#~ msgstr "Název nového profilu pro výstup" + +#~ msgid "Search Output Preset" +#~ msgstr "Hledat profil pro výstup" + +#~ msgid "Output Presets List" +#~ msgstr "Seznam profilů pro výstup" + +#~ msgid "infinity" +#~ msgstr "nekonečno" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Poměr" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Dolní pásmo" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "High-Pass" + +#~ msgid "Gating" +#~ msgstr "Hradlo" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Nízká pásmová propust 12 dB/okt" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Nízká pásmová propust 24 dB/okt" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Nízká pásmová propust 36 dB/okt" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Vysoká pásmová propust 12 dB/okt" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Vysoká pásmová propust 24 dB/okt" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Vysoká pásmová propust 36 dB/okt" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Pásmová propustnost 6 dB/okt" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Pásmová propustnost 12 dB/okt" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Pásmová propustnost 18 dB/okt" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Vyloučení pásma 6 dB/okt" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Vyloučení pásma 12 dB/okt" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Vyloučení pásma 18 dB/okt" + +#~ msgid "Inertia" +#~ msgstr "Setrvačnost" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Překlenutí" + +#~ msgid "Band Mode" +#~ msgstr "Režim pásma" + +#~ msgid "Band Slope" +#~ msgstr "Pásmo sklonu" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Hlasitost" + +#~ msgid "High Speed" +#~ msgstr "Vysoká rychlost" + +#~ msgid "High Quality" +#~ msgstr "Vysoká kvalita" + +#~ msgid "High Consistency" +#~ msgstr "Vysoká konzistence" + +#~ msgid "Formant" +#~ msgstr "Formant" + +#~ msgid "Shifted" +#~ msgstr "Posunutý" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Zachovalé" + +#~ msgid "Transients" +#~ msgstr "Transienty" + +#~ msgid "Crisp" +#~ msgstr "Crisp" + +#~ msgid "Mixed" +#~ msgstr "Smíšené" + +#~ msgid "Smooth" +#~ msgstr "Hladký" + +#~ msgid "Detector" +#~ msgstr "detektor" + +#~ msgid "Compound" +#~ msgstr "Složené" + +#~ msgid "Percussive" +#~ msgstr "Perkusivní" + +#~ msgid "Soft" +#~ msgstr "měkké" + +#~ msgid "Phase" +#~ msgstr "Fáze" + +#~ msgid "Laminar" +#~ msgstr "Laminární" + +#~ msgid "Independent" +#~ msgstr "Nezávislý" + +#~ msgid "Cents" +#~ msgstr "Centy" + +#~ msgid "Octaves" +#~ msgstr "Oktávy" + +#~ msgid "_Manual" +#~ msgstr "_Manuál" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Otevřít manuál EasyEffects" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} Není nainstalováno v systému" + +#~ msgid "High Pass" +#~ msgstr "Horní pásmo" + +#~ msgid "Low Pass" +#~ msgstr "Dolní pásmo" + +#~ msgid "Cancel" +#~ msgstr "ZruÅ¡it" + +#~ msgid " PreAmplification" +#~ msgstr " Předzesílení" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Zavřít (Stiskněte ESC)" + +#~ msgid "Frame Size" +#~ msgstr "Rozměry rámečku" + +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "" +#~ "Povolit/zakázat\n" +#~ " globální bypass" + +#~ msgid " Low-Pass" +#~ msgstr " Low-pass" + +#~ msgid " Uniform" +#~ msgstr " Jednotný" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Předzpoždění" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Rozdělit kanály" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Úroveň" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Úroveň" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Úroveň cíle" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Úroveň cíle" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Úroveň potlačení" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Zvukové efekty pro programy využívající PulseAudio" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "ZmenÅ¡ení zesílení" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "APO Přednastavení" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Profily pro výstup: " + +#~ msgid "Input Presets: " +#~ msgstr "Profily pro vstupy: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Rozdělit" + +#~ msgid "Split 1/2" +#~ msgstr "Rozdělit 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Kmitočet" + +#~ msgid "Split 2/3" +#~ msgstr "Rozdělit 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Kmitočet" + +#~ msgid "Split 3/4" +#~ msgstr "Rozdělit 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Kmitočet" + +#~ msgid "Sub Band" +#~ msgstr "Spodní pásmo" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "ZmenÅ¡ení zesílení" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Pozvednutí" + +#~ msgid "Max Reduction" +#~ msgstr "Snížení" + +#~ msgid "Low Band" +#~ msgstr "Nízké pásmo" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "ZmenÅ¡ení zesílení" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Pozvednutí" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "ZmenÅ¡ení zesílení" + +#~ msgid "Mid Band" +#~ msgstr "Střední pásmo" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "ZmenÅ¡ení zesílení" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Pozvednutí" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "ZmenÅ¡ení zesílení" + +#~ msgid "High Band" +#~ msgstr "Vysoké pásmo" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "ZmenÅ¡ení zesílení" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Pozvednutí" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "ZmenÅ¡ení zesílení" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Množství" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Množství" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#, fuzzy +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects je pokročilým nástrojem pro zacházení se zvukem. Obsahuje " +#~ "mimo jiné nástroj ekvalizéru, omezovače (limiter), kompresoru a dozvuku. " +#~ "Na doplnění je také vestavěn analyzátor spektra." + +#, fuzzy +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Protože EasyEffects používá výchozí zvukový server PulseAudio, bude " +#~ "pracovat s větÅ¡inou, pokud už ne se vÅ¡emi vámi používanými programy. " +#~ "VÅ¡echny podporované programy jsou ukázány v hlavním okně, v němž je možné " +#~ "kterýkoli z nich ručně povolit." + +#, fuzzy +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Vedle práce se zvukovým výstupem dokáže EasyEffects efekty použít i na " +#~ "vstupní zařízení, jako je mikrofon. To je užitečné mimo jiné při " +#~ "nahrávání zvuku, pracuje to ale dobře během hlasových hovorů." + +#, fuzzy +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Když je EasyEffects spuÅ¡těn, zapamatuje si příhodně nastavení používané " +#~ "při posledním sezení. Je možné i uložení vÅ¡ech nynějších nastavení jako " +#~ "profilů." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Pásma" + +#~ msgid "Average" +#~ msgstr "Průměr" + +#~ msgid "Failed" +#~ msgstr "Nepodařilo se" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Použít Výchozí" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Odstranit tento soubor s přednastavením" + +#~ msgid "Import Presets" +#~ msgstr "Zavést přednastavení" + +#~ msgid "Start Service at Login" +#~ msgstr "Spustit službu při přihlášení" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Agresivní režim" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Černá listina" + +#~ msgid "Blocklist" +#~ msgstr "Černá listina" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibrace mikrofonu" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Povolit" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Povolit" + +#~ msgid "Format" +#~ msgstr "Formát" + +#~ msgid "Latency" +#~ msgstr "Prodleva" + +#~ msgid "Faster" +#~ msgstr "Rychleji" + +#~ msgid "Preserve Formant" +#~ msgstr "Zachovat složku rozhodující o barvě zvuku" + +#~ msgid "Cmoy" +#~ msgstr "Sluchátkový zesilovač (CMoy)" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Vstupní zesílení" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Spodní mez" + +#~ msgid "Output Effects" +#~ msgstr "Výstupní efekty" + +#~ msgid "Settings" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Doba trvání" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "ZkuÅ¡ební signály" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "ZkuÅ¡ební signály" + +#~ msgid "Show Spectrum" +#~ msgstr "Ukázat spektrum" + +#~ msgid "Border" +#~ msgstr "Okraj" + +#~ msgid "Spectrum Type" +#~ msgstr "Typ spektra" + +#~ msgid "Spectrum Color" +#~ msgstr "Barva spektra" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Agresivní režim" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "ZmenÅ¡ení zesílení" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Váhy" + +#~ msgid "Dry" +#~ msgstr "ZkuÅ¡ební" + +#~ msgid "S/C Level" +#~ msgstr "Úroveň S/C" + +#~ msgid "Short Term" +#~ msgstr "Jednorázové" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Nastavit hlasitost a zapnout/vypnout efekty" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Zahrnuje ekvalizér s vestavěnými přednastaveními" + +#~ msgid "Input Limiter" +#~ msgstr "Omezovač vstupu" + +#~ msgid "Calibration" +#~ msgstr "Kalibrace" + +#~ msgid "Limit" +#~ msgstr "Omezení" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Zvukové efekty pro programy využívající PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Zvukové efekty pro programy PulseAudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrace mikrofonu" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automaticky použít toto přednastavení, když je nyní používané zařízení " +#~ "zapojeno v systému" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Verze" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Čtverec" + +#~ msgid "Saw" +#~ msgstr "Pila" + +#~ msgid "Triangle" +#~ msgstr "Trojúhelník" + +#~ msgid "Pink Noise" +#~ msgstr "Růžový Å¡um" + +#~ msgid "Ticks" +#~ msgstr "Tiknutí" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussovský Å¡um" + +#~ msgid "Blue Noise" +#~ msgstr "Modrý Å¡um" + +#~ msgid "Violet Noise" +#~ msgstr "Fialový Å¡um" + +#~ msgid "Volume" +#~ msgstr "Hlasitost" + +#~ msgid "Measure Noise" +#~ msgstr "Změřit Å¡um" + +#~ msgid "Subtract Noise" +#~ msgstr "Odečíst Å¡um" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Provided by" +#~ msgstr "Poskytuje" + +#~ msgid "Extended Filter" +#~ msgstr "Rozšířený filtr" + +#~ msgid "Low" +#~ msgstr "Nízký" + +#~ msgid "Moderate" +#~ msgstr "Střední" + +#~ msgid "High" +#~ msgstr "Vysoký" + +#~ msgid "Delay Agnostic" +#~ msgstr "Zpozdit absolutní" + +#~ msgid "Very High" +#~ msgstr "Velmi vysoký" + +#~ msgid "Adaptive Digital" +#~ msgstr "Přizpůsobivý digitální" + +#~ msgid "Fixed Digital" +#~ msgstr "Pevný digitální" + +#~ msgid "Detection Likelihood" +#~ msgstr "Pravděpodobnost zjiÅ¡tění" + +#~ msgid "Very Low" +#~ msgstr "Velmi nízká" + +#~ msgid "Use Custom Color" +#~ msgstr "Použít vlastní barvu" + +#~ msgid "Use Gradient" +#~ msgstr "Použít přechod" + +#~ msgid "Gradient Color" +#~ msgstr "Barva přechodu" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Zavést soubor s odpovědí impulsu" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Vybrat soubor s odpovědí impulsu" + +#~ msgid "Aggressive Mode" +#~ msgstr "Agresivní režim" + +#~ msgid "Before" +#~ msgstr "Před" + +#~ msgid "After" +#~ msgstr "Po" + +#~ msgid "Loudness Range" +#~ msgstr "Rozsah hlasitosti" + +#~ msgid "Loudness Compensator" +#~ msgstr "Kompenzace Hlasitosti" + +#~ msgid "Apply" +#~ msgstr "Použít" + +#~ msgid "Based on" +#~ msgstr "Na základě" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Výchozí rychlost vzorkování" + +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgid "File" +#~ msgstr "Soubor" + +#~ msgid "Configuration" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Based on a" +#~ msgstr "Na základě" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Spočítat kmitočty" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "APO Přednastavení" + +#~ msgid "Auto Gain" +#~ msgstr "Automatické zesílení" + +#~ msgid "Detect Silence" +#~ msgstr "ZjiÅ¡tění Ticha" + +#~ msgid "Muted" +#~ msgstr "Ztlumeno" + +#~ msgid "Distant Headphones" +#~ msgstr "Vzdálená sluchátka" + +#~ msgid "Priority Type" +#~ msgstr "Typ přednosti" + +#~ msgid "Niceness" +#~ msgstr "Přívětivost" + +#~ msgid "Priority" +#~ msgstr "Přednost" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Minimální Kmitočet" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Maximální Kmitočet" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "Znovu připojit mikrofon pro použití změn provedených v Blocklistu" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "Restartovat přehrávač pro použití změn provedených v Blocklistu" + +#~ msgid "About" +#~ msgstr "O programu" + +#~ msgid "Protocol" +#~ msgstr "Protokol" + +#~ msgid "Default Sample Format" +#~ msgstr "Výchozí formát vzorku" + +#~ msgid "Resamplers" +#~ msgstr "Převzorkovače" + +#~ msgid "Buffer" +#~ msgstr "Vyrovnávací paměť" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Ekvalizér - výstup" + +#~ msgid "Block Size" +#~ msgstr "Velikost Bloku" + +#~ msgid "Resampler" +#~ msgstr "Převzorkovač" + +#~ msgid "paused" +#~ msgstr "Pozastaveno" + +#~ msgid "playing" +#~ msgstr "Přehrává se" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "Import APO Presets" +#~ msgstr "Zavést APO Přednastavení" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "ZmenÅ¡ení zesílení" + +#~ msgid "Exponent" +#~ msgstr "Exponent" diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..a4ffef0 --- /dev/null +++ b/po/da.po @@ -0,0 +1,3138 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-08-17 04:16+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizer, Kompressor og Andre Lydeffekter" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Lyd Effekter for PipeWire Applikationer" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "begrænser;kompressor;efterklang;equalizer;autovolume;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Forindstillinger\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Aktiveret" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Stum applikation" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Applikationvolume" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Nulstil Indstillinger" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Præferencer" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "_Om EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Forindstillinger" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Forindstillinger Menu" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Global OmgÃ¥else" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Primær Menu" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects-vindue" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Applikationsliste" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Tomme Vægge" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Applikationvolume" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Nustil historie" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "MÃ¥l" + +#: data/ui/autogain.ui:67 +#, fuzzy +msgid "Silence" +msgstr "Stemning" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Maksimum" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Hanvisning" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Øjeblikkelig" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Kortfristet" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integreret" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Geometrisk Gennemsnit" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Geometrisk Gennemsnit" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Geometrisk Gennemsnit" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Geometrisk Gennemsnit" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Hørestyrke" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativ" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rækkevidde" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Udgangsforstærkning" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Indgang" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Plugin-Indgangsforstærkning" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Udgang" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Plugin-Udgangsforstærkning" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Nustil" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Enhed" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Navn" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Forindstilling" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Fjern Autoindlæst Forudindstilling" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Lyt" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Bland Harmonik" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "Tredje" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "Anden" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Mængde" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonik" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Omfang" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Gulv" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Gulvværdi" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Applikationvolume" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Liste over Blokerede Applikationer" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Liste over Blokerede Applikationer" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Liste over Blokerede Applikationer" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Skjul Vinduet." + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompressor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Tilstand" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Nedadrettet" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Opadrettet" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Øge" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Kompressortilstand" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Øg Grænseværdi" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Øgningsbeløb" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Angreb" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Tid" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Grænseværdi" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Angrebstid" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Angreb Grænseværdi" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Frigør" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Frigøringstid" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Grænseværdi af Frigivelse" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Forhold" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Knæ" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Makeup" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "TørNiveau" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "VÃ¥dniveau" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Sidekæde" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereotilstand" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Kilde" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Midte" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Side" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Venstre" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Højre" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Minimum" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Maksimum" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Sidekæde Kilde" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Forsinkelse Venstre Højre" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Højre" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Side" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Side" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Stereotilstand" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Top" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Lavpasfiltertilstand" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Sidekæde-tilstand" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Ekstern Sidekæde" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Type" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Fremadrettet" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Tilbagemelding" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Ekstern" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Sidekæde Type" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Input-enhed" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Forforstærkning" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reaktivitet" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Fremadskuen" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Sidekæde Filter" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Højpas" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frekvens" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Slukket" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Højpasfiltertilstand" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Højpasfilterfrekvens" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Lavpas" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Lavpasfiltertilstand" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Gain" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Konvolut" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Kurve" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Venstre Kanal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Højre Kanal" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulser" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Kombiner" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Stereo-bredde" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Rate" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Prøver" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Varighed" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Kombiner Impulsresponser" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Første Kerne" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Anden Kerne" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Udgang Filnavn" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Kombineret Kernenavn" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Import Impulser" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Søg" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Søg Impulsfiler" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Impulsfiler liste" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Standard" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Afskæring" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Foder" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "OmgÃ¥else" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Stum" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Opsporing" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Bred" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Opdeling" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 Opdeling" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Frekvens 1 Opdeling" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 Top" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Frekvens 2 Top" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 Gain" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Frekvens 1 Gain" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 Niveau" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Frekvens 2 Niveau" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 Top Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Frekvens 2 Top Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Lakshed" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detektet" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Reduktion" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +#, fuzzy +msgid "Delay" +msgstr "Pre Forsinkelse" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inverter Fase" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filterlængde" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Filterlængde" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Reduktion" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Reduktion" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "BÃ¥nd" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Sidekæde Venstre" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Sidekæde Højre" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Opdel kanaler" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Flad Respons" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Beregn Frekvenser" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "BÃ¥nd" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Import Forudindstilling" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Hældning" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kvalitet" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Bredde" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Ceil" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Ceil Værdi" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "BÃ¥ndtilstand" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Ekstern" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Adgang" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Beskrivelse" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Fjern denne modelfil" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Lav Hylde" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Høj Hylde" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Klokke" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "BÃ¥nd OmgÃ¥else" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Indhak" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonans" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Lavpas" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "BÃ¥nd 1 Max Reduktion" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Alle Pas" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "BÃ¥ndtilstand" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Frigøringstid" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frekvens 2 Top" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Oversampling" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Tøve" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Herm Tynd" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Herm Bred" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Herm Hale" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Herm Duck" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exp Tynd" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp Bred" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Exp Hale" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exp Duck" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Linje Tynd" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Linje Bred" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Linje Hale" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Linje Duck" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ingen" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Halv x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Halv x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Halv x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Halv x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Halv x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Halv x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Halv x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Halv x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Halv x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Halv x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Fuld x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Fuld x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Fuld x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Fuld x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Fuld x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Fuld x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Fuld x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Fuld x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Fuld x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Fuld x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC PræAmp" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Sidekæde Forforstærkning" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Boost" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Stereoforbindelse" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Ekstern Sidekæde" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Ekstern Sidekæde Kilde" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Auto-Nivellering" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Auto-Nivelleringsangreb" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Auto-Nivelleringsudløse" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Auto-Nivellering Knæ" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Gain Venstre" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Gain Højre" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Sidekæde Venstre" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Sidekæde Højre" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standard" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Flad" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "FFT Størrelse" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Udgang Volume" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Loft" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Sidekæde Boost" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "Pink BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "Pinkt MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "Brun BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "Brun MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Driftstilstand" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klassik" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderne" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Inverter Fase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "BÃ¥ndsliste" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "BÃ¥nd 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "BÃ¥nd 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "BÃ¥nd 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "BÃ¥nd 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "BÃ¥nd 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "BÃ¥nd 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "BÃ¥nd 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "BÃ¥nd 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "BÃ¥nd start" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "BÃ¥nd Slut" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "BÃ¥nd Kompressionstilstand" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "BÃ¥nd OmgÃ¥else" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "BÃ¥nd Sidekæde Valgmuligheder" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereotilstand" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +#, fuzzy +msgid "Filter" +msgstr "Filterlængde" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "LavskÃ¥ret Filter" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "LavskÃ¥ret Filter Frekvens" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "HøjskÃ¥ret Filter" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "HøjskÃ¥ret Filter Frekvens" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "PræAmp" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "BÃ¥nd Gain" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "BÃ¥nd Konvolut" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "BÃ¥nd Kurve" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "BÃ¥nd 1 Max Reduktion" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Generelt" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Brug Standard Input" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Brugerdefineret Input-Enhed" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Brug Standard Udgang" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Brugerdefineret Udgangs-Enhed" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Serveroplysninger" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Overskriftsversion" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Bibloteksversion" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Prøvetagningsfrekvens" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Minimumsantal" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Maksimumantal" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Standard Antal" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Forindstil Autolæsning" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Udgangsenheder" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Udgangsforindstillinger" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Skab Associering" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Tilføj Autolæsning Udgangsforindstilling" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Udgangsautolæsingsforindstillinger Liste" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Indgangsenheder" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Indgangsforindstillinger" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Tilføj Autolæsning Indgangsforindstilling" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Indgangsautolæsingsforindstillinger Liste" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Moduler" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Liste over moduler" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Klienter" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Liste over klienter" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Test-Signal" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Tilstand" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Aktiveret" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanaler" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Begge" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Begge Kanaler" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Bølgeform" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinusbølge" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Hvid Støj" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frekvens Rækkevidde" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Skjul Vinduet." + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filterlængde" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitoner" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Hanvisning" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Hanvisning" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Fjern denne modelfil" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Liste over Anvendte Plugins" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "Easyeffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Søgeplugin" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Plugins-liste" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Generelt" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Tjeneste" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +#, fuzzy +msgid "Shutdown on Window Closing" +msgstr "Luk helt ved vinduelukning" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Lyd" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Behandle Alle Udgange" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Behandle Alle Indgange" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Brug Kubisk Volumen" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Stil" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Brug Mørk-tilstand" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Eksperimentelt" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Skjul Vinduet." + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Form" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Bjælke" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linjer" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Point" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Højde" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Linje Bredde" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Fil" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Vis Bjælkerammer" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Farve" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Linjer og Bjælker" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Etiketter pÃ¥ akserne" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Frekvens Rækkevidde" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimum" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maksimum" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Indlæs" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Gem nuværende indstillinger til denne forindstillingsfil" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Gem nuværende indstillinger til denne forindstillingsfil" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Fjern denne forindstillingsfil" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Ny Indgangsforindstillingsnavn" + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Opret Forindstilling" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Import Forudindstilling" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Søg Indgangsforindstillinger" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Liste Af Indgangsforindstillinger" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Højfrekvensdæmpning" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Størrelse af Værelse" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Lille" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Mellem" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Stor" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Stor/Glat" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Eksperimentelt" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Diffusion" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pre Forsinkelse" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Nedbrydningstime" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Bas Snit" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Diskant Snit" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Stemning" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Tomme Vægge" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Værelse" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Stor Tom Hal" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Large Optaget Hal" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Import Model" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Opsporing" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modeller" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Standard Model" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Liste over RNNoise-Modeller" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Aktive Modeller" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Standard RNNoise-Model" + +#: data/ui/shortcuts.ui:11 +#, fuzzy +msgid "Overview" +msgstr "Tjeneste" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +#, fuzzy +msgid "Close the Window" +msgstr "Skjul Vinduet." + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "_Om EasyEffects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Serveroplysninger" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +#, fuzzy +msgid "Start" +msgstr "BÃ¥nd start" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Reduktion" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "F2 Niveau" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Indgangsbalance" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Softclip-niveau" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Stereo-matrix" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Stereo-Standard)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Stereo til Midtside)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Midtside til Stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Mono Venstre Kanal)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Mono Højre Kanal)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Mono sum L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Stereo Vend Kanaler)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Stereotilstand" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Side Niveau" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Side Balance" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Mellem-Niveau" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Mellem-Panorama" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Udgangsbalance" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Forsinkelse L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Forsinkelse Venstre Højre" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Stereo-Base" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Stereo-Fase" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "Gating" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Kanaler" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Afslut EasyEffects. Nyttigt nÃ¥r man kører i servicetilstand." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Indlæs en forindstilling. Eksempelvis: easyeffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Nustli EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Skjul Vinduet." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Global OmgÃ¥else. 1 for at aktivere, 2 for at deaktivere og 3 for at fÃ¥ status" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Vis tilgængelige forindstillinger." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Udgang" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Indgang" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Impulsfiler liste" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Import Impulsfil" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Åben" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Impulsrespons" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Indlæs Impuls" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Fjern Impuls" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Impulsfiler liste" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "Kunne Ikke Indlæse Impulsfilen" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Optagere" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Spillere" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "Easyeffects" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Import APO Forindstillingsfil" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO-Forindstillinger" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Import APO Forindstillingsfil" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Indgangsforindstillinger" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Fjern Autoindlæst Forudindstilling" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Udgangsenhed" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Fjern" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Udgangsenhed" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Tilføj" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Import Modelfil" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise-modeller" + +#: src/tags_plugin_name.cpp:32 +#, fuzzy +msgid "Bass Enhancer" +msgstr "Balance" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "Hørestyrke" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +#, fuzzy +msgid "Echo Canceller" +msgstr "Annuller" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Udgangsenhed" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +#, fuzzy +msgid "Maximizer" +msgstr "Maksimum" + +#: src/tags_plugin_name.cpp:51 +#, fuzzy +msgid "Multiband Compressor" +msgstr "Kompressor" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +#, fuzzy +msgid "Reverberation" +msgstr "Serveroplysninger" + +#: src/tags_plugin_name.cpp:55 +#, fuzzy +msgid "Noise Reduction" +msgstr "Reduktion" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +#, fuzzy +msgid "Stereo Tools" +msgstr "Stereotilstand" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Bruger" + +#~ msgid "Low-Cut Filter" +#~ msgstr "LavskÃ¥ret Filter" + +#~ msgid "High-Cut Filter" +#~ msgstr "HøjskÃ¥ret Filter" + +#~ msgid "Uniform" +#~ msgstr "Ensartet" + +#~ msgid "New Output Preset Name" +#~ msgstr "Ny Udgangsforindstillingsnavn" + +#~ msgid "Search Output Preset" +#~ msgstr "Søg Udgangeforindstillinger" + +#~ msgid "Output Presets List" +#~ msgstr "Liste af Udgangeforindstillinger" + +#~ msgid "infinity" +#~ msgstr "uendelighed" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Forhold" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Grænseværdi" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Lavpas" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Højpas" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Lavpas" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Lavpas" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Lavpas" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Højpas" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Højpas" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Højpas" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct BÃ¥ndpas" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct BÃ¥ndpas" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct BÃ¥ndpas" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct BÃ¥ndafvise" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct BÃ¥ndafvise" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct BÃ¥ndafvise" + +#~ msgid "Inertia" +#~ msgstr "Inerti" + +#~ msgid "Band Type" +#~ msgstr "BÃ¥ndtype" + +#~ msgid "Band Mode" +#~ msgstr "BÃ¥ndtilstand" + +#~ msgid "Band Slope" +#~ msgstr "BÃ¥ndhældning" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Hørestyrke" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Høj Hylde" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvalitet" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formater" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Forindstilling" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Sprødhed" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Opsporing" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Cent" + +#~ msgid "Octaves" +#~ msgstr "Oktaver" + +#~ msgid "_Manual" +#~ msgstr "_Manuel" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Nustli EasyEffects." + +#~ msgid "High Pass" +#~ msgstr "Højpas" + +#~ msgid "Low Pass" +#~ msgstr "Lavpas" + +#~ msgid "Cancel" +#~ msgstr "Annuller" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Forforstærkning" + +#~ msgid "Frame Size" +#~ msgstr "Rammestørrelse" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Lavpas" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Ensartet" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Pre Forsinkelse" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Højre Kanal" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "TørNiveau" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "TørNiveau" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "VÃ¥dniveau" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "VÃ¥dniveau" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Fast Fourier Transform Størrelse" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Lydeffekter for PipeWire applikationer" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Reduktion" + +#~ msgid "Load APO Preset" +#~ msgstr "Indlæs APO-Forindstilling" + +#~ msgid "EasyEffects" +#~ msgstr "Easyeffects" + +#~ msgid "Output Presets: " +#~ msgstr "Udgangsforindstillinger:" + +#~ msgid "Input Presets: " +#~ msgstr "Indgangsforindstillinger:" + +#~ msgid "Split Mode" +#~ msgstr "Opdelt Tilstand" + +#~ msgid "Split 1/2" +#~ msgstr "Opdel 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Opdelt Frekvens 1" + +#~ msgid "Split 2/3" +#~ msgstr "Opdel 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Opdel Frekvens 2" + +#~ msgid "Split 3/4" +#~ msgstr "Opdelt 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Opdel Frekvens 3" + +#~ msgid "Sub Band" +#~ msgstr "UnderbÃ¥nd" + +#~ msgid "Band 1 Bypass" +#~ msgstr "BÃ¥nd 1 OmgÃ¥else" + +#~ msgid "Band 1 Solo" +#~ msgstr "BÃ¥nd 1 Solo" + +#~ msgid "Band 1 Detection" +#~ msgstr "BÃ¥nd 1 Opsporing" + +#~ msgid "Band 1 Attack" +#~ msgstr "BÃ¥nd 1 Angreb" + +#~ msgid "Band 1 Release" +#~ msgstr "BÃ¥nd 1 Frigivelse" + +#~ msgid "Band 1 Threshold" +#~ msgstr "BÃ¥nd 1 Grænseværdi" + +#~ msgid "Band 1 Ratio" +#~ msgstr "BÃ¥nd 1 Forhold" + +#~ msgid "Band 1 Knee" +#~ msgstr "BÃ¥nd 1 Knæ" + +#~ msgid "Band 1 Makeup" +#~ msgstr "BÃ¥nd 1 Makeup" + +#~ msgid "Max Reduction" +#~ msgstr "Max Reduktion" + +#~ msgid "Low Band" +#~ msgstr "LavbÃ¥nd" + +#~ msgid "Band 2 Bypass" +#~ msgstr "BÃ¥nd 2 OmgÃ¥else" + +#~ msgid "Band 2 Solo" +#~ msgstr "BÃ¥nd 2 Solo" + +#~ msgid "Band 2 Detection" +#~ msgstr "BÃ¥nd 2 Opsporing" + +#~ msgid "Band 2 Attack" +#~ msgstr "BÃ¥nd 2 Angreb" + +#~ msgid "Band 2 Release" +#~ msgstr "BÃ¥nd 2 Frigivelse" + +#~ msgid "Band 2 Threshold" +#~ msgstr "BÃ¥nd 2 Grænseværdi" + +#~ msgid "Band 2 Ratio" +#~ msgstr "BÃ¥nd 2 Forhold" + +#~ msgid "Band 2 Knee" +#~ msgstr "BÃ¥nd 2 Knæ" + +#~ msgid "Band 2 Makeup" +#~ msgstr "BÃ¥nd 2 Makeup" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "BÃ¥nd 2 Max Reduktion" + +#~ msgid "Mid Band" +#~ msgstr "MellembÃ¥nd" + +#~ msgid "Band 3 Bypass" +#~ msgstr "BÃ¥nd 3 OmgÃ¥else" + +#~ msgid "Band 3 Solo" +#~ msgstr "BÃ¥nd 3 Solo" + +#~ msgid "Band 3 Detection" +#~ msgstr "BÃ¥nd 3 Opsporing" + +#~ msgid "Band 3 Attack" +#~ msgstr "BÃ¥nd 3 Angreb" + +#~ msgid "Band 3 Release" +#~ msgstr "BÃ¥nd 3 Frigivelse" + +#~ msgid "Band 3 Threshold" +#~ msgstr "BÃ¥nd 3 Grænseværdi" + +#~ msgid "Band 3 Ratio" +#~ msgstr "BÃ¥nd 3 Forhold" + +#~ msgid "Band 3 Knee" +#~ msgstr "BÃ¥nd 3 Knæ" + +#~ msgid "Band 3 Makeup" +#~ msgstr "BÃ¥nd 3 Makeup" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "BÃ¥nd 3 Max Reduktion" + +#~ msgid "High Band" +#~ msgstr "HøjbÃ¥nd" + +#~ msgid "Band 4 Bypass" +#~ msgstr "BÃ¥nd 4 OmgÃ¥else" + +#~ msgid "Band 4 Solo" +#~ msgstr "BÃ¥nd 4 Solo" + +#~ msgid "Band 4 Detection" +#~ msgstr "BÃ¥nd 4 Opsporing" + +#~ msgid "Band 4 Attack" +#~ msgstr "BÃ¥nd 4 Angreb" + +#~ msgid "Band 4 Release" +#~ msgstr "BÃ¥nd 4 Frigivelse" + +#~ msgid "Band 4 Threshold" +#~ msgstr "BÃ¥nd 4 Grænseværdi" + +#~ msgid "Band 4 Ratio" +#~ msgstr "BÃ¥nd 4 Forhold" + +#~ msgid "Band 4 Knee" +#~ msgstr "BÃ¥nd 4 Knæ" + +#~ msgid "Band 4 Makeup" +#~ msgstr "BÃ¥nd 4 Makeup" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "BÃ¥nd 4 Max Reduktion" + +#~ msgid "Wet Amount" +#~ msgstr "VÃ¥dmængde" + +#~ msgid "Dry Amount" +#~ msgstr "Tørmængde" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects er en advanceret lydmanipuleringsværktøj. Det inkluderer en " +#~ "equalizer, begrænser, kompressor og et efterklangsværktøj, for blot at " +#~ "nævne nogle fÃ¥. For at supplere til dette er der ogsÃ¥ en indbygget " +#~ "spektrumanalysator." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects er efterfølgeren til PulseEffects. EasyEffects understøtter " +#~ "kun PipeWires lydserver. PulseAudio brugere bør i stedet bruge " +#~ "PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Da EasyEffects bruger PipeWires standard lydserver, vil den virke med de " +#~ "fleste, hvis ikke alle, progammer du bruger." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Ud over manipulering af lydudgange, er EasyEffects i stand til at anvende " +#~ "effekter pÃ¥ en input-enhed, f.eks. en mikrofon. Dette er f.eks. nyttigt i " +#~ "lydoptagelse, men det virker ogsÃ¥ godt under samtaler." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "NÃ¥r EasyEffects startes, husker den automatisk den konfiguration, der " +#~ "blev brugt i sidste session. Det er ogsÃ¥ muligt at gemme alle nuværende " +#~ "indstillinger som profiler." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "Hovedsiden viser to lydoutput apps" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "Basforstærkersiden, der viser lydkontroller" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "Convolver-siden, der viser lydkontrolelementer" + +#~ msgid "This release adds the following features:" +#~ msgstr "Denne udgivelse tilføjer følgende funktioner:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "BÃ¥nd 1" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Der er en ny indstilling, der giver brugeren mulighed for at vælge en " +#~ "inaktivitetstimeout for pipelinen. NÃ¥r ingen klient spiller" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "til eller optagelse fra vores enheder vil filtrene blive fjernet, nÃ¥r " +#~ "timeout er nÃ¥et. Dette gøres for at sikre" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "vi spilder ikke CPU-kraft pÃ¥ at processerer tavshed." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "Autogain-pluginet giver nu brugeren mulighed for at vælge, hvilken af de " +#~ "tre lydstyrker der bruges til at beregne den geometriske" + +#~ msgid "mean." +#~ msgstr "middel." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "Autogain-pluginet tillader nu at indstille den maksimale historik og " +#~ "bruger ikke længere `libebur128` histogramtilstand." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Dette bør undgÃ¥ de tilfælde, hvor den 'Integrerede' lydstyrke bliver " +#~ "hængende for evigt i den samme værdi." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "EasyEffects-ikonet er blevet opdateret pÃ¥ en mÃ¥de, der burde gøre det " +#~ "synligt i QT-skriveborde." + +#~ msgid "Average" +#~ msgstr "Gennemsnitlig" + +#~ msgid "Failed" +#~ msgstr "Fejlede" + +#~ msgid "Use Default" +#~ msgstr "Brug Standard" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Fjern denne modelfil" + +#~ msgid "Import Presets" +#~ msgstr "Importer Forindstillinger" + +#~ msgid "Start Service at Login" +#~ msgstr "Start Tjeneste ved Login" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktive Modeller" + +#~ msgid "Add to Blocklist" +#~ msgstr "Tilføj til Blokliste" + +#~ msgid "Blocklist" +#~ msgstr "Blockliste" + +#~ msgid "Add Plugin" +#~ msgstr "Tilføj Plugin" + +#~ msgid "Speakers" +#~ msgstr "Højtalerer" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Plugins" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Aktiveret" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Aktiveret" + +#~ msgid "Format" +#~ msgstr "Formater" + +#~ msgid "Latency" +#~ msgstr "Forsinkelse" + +#~ msgid "Faster" +#~ msgstr "Hurtigere" + +#~ msgid "Preserve Formant" +#~ msgstr "Bevar Formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Player Name" +#~ msgstr "Spillernavn" + +#~ msgid "Show Blocklisted Players" +#~ msgstr "Vis Bloklistede Spillere" + +#~ msgid "RLC (BT)" +#~ msgstr "BLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "7bit" +#~ msgstr "7bit" + +#~ msgid "8bit" +#~ msgstr "8bit" + +#~ msgid "11bit" +#~ msgstr "11bit" + +#~ msgid "12bit" +#~ msgstr "12bit" + +#~ msgid "15bit" +#~ msgstr "15bit" + +#~ msgid "16bit" +#~ msgstr "16bit" + +#~ msgid "23bit" +#~ msgstr "23bit" + +#~ msgid "24bit" +#~ msgstr "24bit" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Output Channel" +#~ msgstr "Udgangskanal" + +#~ msgid "Channel" +#~ msgstr "Kanal" + +#~ msgid "Value" +#~ msgstr "Værdi" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..2afaf49 --- /dev/null +++ b/po/de.po @@ -0,0 +1,3930 @@ +# German translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the EasyEffects package. +# Bleuzen , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-07-30 08:05+0000\n" +"Last-Translator: Simon Hahne \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizer, Kompressor und andere Audioeffekte" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Audio Effekte für PipeWire Anwendungen" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "Limiter;Kompressor;Hall;Equalizer;Autovolumen;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Voreinstellungen\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Anwendung aktivieren/deaktivieren" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Aktiviert" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Liste der ausgeschlossenen Anwendungen: Anwendung hinzufügen/entfernen" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Ausschließen" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Anwendung stummschalten" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Lautstärke der Anwendung anpassen" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Anwendungs-Lautstärke" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Hilfe" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Einstellungen zurücksetzen" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Einstellungen" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Tastenkürzel" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Über Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Voreinstellungen" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Voreinstellungs-Menü" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Globale Umleitung aktivieren/deaktivieren" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Globale Umleitung" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Hauptmenü" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Easy Effects Fenster" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Anwendungs-Liste" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Leere Liste" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Keine Audio-Anwendungen verfügbar" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Verlauf löschen" + +#: data/ui/autogain.ui:39 +#, fuzzy +msgid "Controls" +msgstr "Verstärkungsregler" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Ziel" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Ruhe" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Gesamter Verlauf" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referenz" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentan" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Kurzzeitig" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integriert" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Geometrisches Mittel (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Geometrisches Mittel (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Geometrisches Mittel (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Geometrisches Mittel (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Lautstärke" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativ" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Umfang" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Ausgangsverstärkung" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Eingabe" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Eingangsverstärkungs-Plugin" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Ausgang" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Ausgangsverstärkungs-Plugin" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Zurücksetzen" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Gerät" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Name" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Voreinstellung" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "automatisch geladene Voreinstellung entfernen" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Zuhören" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Oberwellen mischen" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "Dritte" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "Zweite" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Betrag" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Obertöne" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Bereich" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Untere Grenze" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Unterer Grenzwert" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Link" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Anwendungen" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Zu ausgeschlossenen Anwendungen hinzufügen" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Liste der ausgeschlossenen Anwendungen" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Ausgeschlossene Anwendungen anzeigen" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Natives Fenster anzeigen" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompressor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modus" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Abwärts" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Aufwärts" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Boosten" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Kompressionsmodus" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Verstärkungsschwelle" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Verstärkung" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Ansprechzeit" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Zeit" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Schwelle" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Ansprechzeit" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Anprech-Schwelle" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Freigabe" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Abklingzeit" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Abkling-Schwelle" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Verhältnis" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Übergang" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Hebung" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Trockenheit" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Feuchtigkeit" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Sidechain" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereo Modus" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Quelle" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Mitte" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Seite" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Links" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Rechts" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Max" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Sidechain-Quelle" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Verzögerung L/R" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Rechts" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Seite" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Seite" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Standard Audioquelle" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Hochpunkt" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Tiefpassfilter" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Einfacher gleitender Mittelwert" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Sidechain-Modus" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Externe Sidechain" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Typ" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Feedforward" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Feed-back" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Extern" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Sidechain-Typ" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Eingabegerät" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Vorverstärkung" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reaktivität" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Ausblick" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Sidechain-Filter" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Hochpass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frequenz" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Aus" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/okt" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/okt" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/okt" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Hochpassfilter-Modus" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Hochpassfilter-Frequenz" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Tiefpass" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Tiefpassfilter-Modus" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Verstärkung" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Steigung" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Kurve" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Linker Kanal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Rechter Kanal" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulse" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Kombinieren" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Stereo-Breite" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "logarithmische Skala" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Automatische Verstärkungsregelung" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Rate" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Probenahme" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Dauer" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Impulsantworten kombinieren" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Erster Kernel" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Zweiter Kernel" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Name der Ausgabedatei" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Kombinierter Kernelname" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Impuls importieren" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Suche" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Impulsdatei suchen" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Impulsfilter-Liste" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Standard" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Abgrenzung" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Speisung" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Umleiten" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Stummschalten" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Erkennung" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Breit" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Teilen" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 Teilen" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Teilfrequenz 1" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 Peak" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Frequenz 2 Peak" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 Verstärkung" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Frequenz 1 Verstärkung" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 Level" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Frequenz 2 Level" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 Peak Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Frequenz 2 Peak Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Nachgiebigkeit" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Erkannt" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Senkung" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Verzögerung" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Phase umkehren" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Dämpfung" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filterlänge" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Filterlänge" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Restechounterdrückung" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Nahechounterdrückung" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Ausgeschlossene Anwendungen" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bereiche" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Tonhöhe links" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Tonhöhe Rechts" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Kanäle trennen" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Flacher Frequenzgang" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Frequenzen berechnen" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Bänder sortieren" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Preset importieren" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Steigung" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Qualität" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Breite" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "obere Grenze" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Deckenwert" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Band Modus" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Intern" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Zugriff" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Beschreibung" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "diese Modell-Datei entfernen" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Tiefen-Kuhschwanzfilter" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Höhen-Kuhschwanzfilter" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Glocke" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Band Umleitung" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Badewannenfilter" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonanz" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Tiefpass" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Bandreduktion" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Allpass" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Equalizer" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Gate" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Gebiet" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Hysterese" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Gemischt" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Ausklingzeit" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frequenz 2 Peak" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Überabtastung" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Herm Breit" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp Breit" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Line Thin" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Line Wide" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Keine" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Halb x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Halb x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Halb x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Halb x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Halb x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Halb x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Halb x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Halb x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Halb x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Halb x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Voll x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Voll x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Voll x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Voll x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Voll x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Voll x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Voll x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Voll x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Voll x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Voll x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC Vorverstärker" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Sidechain Vorverstärkung" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Boost" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Stereoverbindung" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Externe Sidechain" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Externe Sidechain-Quelle" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Auto Leveling" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Auto Leveling Attack" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Auto Leveling Release" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Auto Leveling Knee" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Verstärkung Links" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Verstärkung Rechts" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Sidechain Links" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Sidechain Rechts" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standard" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Flach" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "FFT-Größe" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Ausgangslautstärke" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Kanalzuordnung" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Grenze" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Sidechain Boost" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Betriebsmodus" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klassisch" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Modern" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Phase umkehren" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Band-Liste" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Band 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Band 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Band 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Band 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Band 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Band 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Band 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Band 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Band Beginn" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Band Ende" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Band Kompressionsmodus" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Band Umleitung" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Band Sidechain Einstellungen" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereo Modus" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Hochpass-Filter" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Tiefpassfilter-Frequenz" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Tiefpass-Filter" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Tiefpassfilter-Frequenz" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "Vorverstärker" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Bereichs-Verstärkung" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Band Bereich" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Band-Kurve" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Bandreduktion" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Allgemein" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Geräteverwaltung" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Standardeingang nutzen" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "benutzerdefiniertes Eingabegerät" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Standardausgang nutzen" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "benutzerdefiniertes Ausgabegerät" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Serverinformation" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Header-Version" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Bibliotheksversion" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Abtastrate" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Minimales Quantum" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Maximales Quantum" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Standard Quantum" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "automatisch geladene Voreinstellungen" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Ausgabegeräte" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Ausgabe-Voreinstellungen" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Assoziation erstellen" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "automatische Ausgabe-Voreinstellung hinzufügen" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "automatisch geladene Ausgabe-Voreinstellungen" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Eingabegeräte" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Eingabe-Voreinstellungen" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "automatische Eingangs-Voreinstellung hinzufügen" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "automatisch geladene Eingang-Voreinstellungen" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Module" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Modulliste" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clienten" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Client-Liste" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Testsignal" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Status" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Aktiviert" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Eigenschaften" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanäle" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Beide" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Beide Kanäle" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Schwingungsverlauf" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinuswelle" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Weißes Rauschen" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frequenzspanne" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Fenster" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filterlänge" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Tonhöhe" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Halbtöne" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Referenz" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Referenz" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Diesen Effekt entfernen" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Diesen Effekt aktivieren/deaktivieren" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Position dieses Effekts ändern" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Effekt hinzufügen" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Benutzte Plugins" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Keine Effekte" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Audio Stream nicht verändert" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Plugin suchen" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Pluginliste" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Allgemein" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Dienst" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Dienst beim Systemstart starten" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Beim Schließen des Fensters beenden" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Alle Ausgänge verarbeiten" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Alle Eingänge verarbeiten" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Streams von Monitor-Geräten ignorieren" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Verwende kubische Lautstärke" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Timeout durch Inaktivität" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Stil" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Benutze dunkles Thema" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Menüs beim Rausklicken schließen" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimentell" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Natives Fenster anzeigen" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Form" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Balken" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linien" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Punkte" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Punkte" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Höhe" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Linienbreite" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Ausfüllen" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Balkenbegrenzung anzeigen" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Abgerundete Ecken" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Farbe" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Linien und Leisten" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Achsentitel" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Frequenzspanne" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimum" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maximum" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Laden" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Aktuelle Einstellungen in dieser Preset-Datei speichern" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Aktuelle Einstellungen in dieser Preset-Datei speichern" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Diese Preset-Datei entfernen" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Neuer Eingabe-Presetname" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Eine neue Voreinstellung erstellen" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Voreinstellung importieren" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Eingabe-Preset suchen" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Eingabe-Voreinstellungen" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Hochfrequenz-Dämpfung" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Raumgröße" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Klein" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Mittel" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Groß" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Groß/sanft" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimentell" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Verbreitung" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Vorverzögerung" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Abklingzeit" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Bassschnitt" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Höhenschnitt" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Atmosphäre" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Leere Wände" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Raum" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Große leere Halle" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Große besetzte Halle" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Modell importieren" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Spracherkennung" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modelle" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Standard-Modell" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "RNNoise-Modell Liste" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Modell nicht geladen" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Aktives Modell" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Standard RNNoise-Modell" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Übersicht" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "Hilfe anzeigen" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Vollbildschirm/Vom Vollbildschirm wiederherstellen" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Fenster schließen" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Easy Effects beenden" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Entrauschen" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Automatische Glättungsregelung" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Enthallung" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Wahrscheinlichkeit der Sprachaktivität" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Beginn" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Fortsetzen" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Rauschunterdrückung" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Stufe" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Eingangsverstärkung" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Softclip-Stufe" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Stereo-Matrix" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Stereo Standard)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Stereo zu Mittelseite)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Mittelseite zu Stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Linker Monokanal)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Rechter Monokanal)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Monosumme L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Stereo Kanäle tauschen)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Stereo Modus" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Seitenebene" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Seitenausgleich" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Mittlere Ebene" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Mittleres Panorama" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Ausgabe-Balance" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Verzögerung L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Verzögerung L/R" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Stereo Basis" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Stereo Phase" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "läuft" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "pausiert" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Untätig" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Erstellen" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Fehler" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Unbekannt" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "Kanäle" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Easy Effects beenden. Nützlich bei der Ausführung im Dienstmodus." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Lade ein Preset. Beispiel: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Easy Effects zurücksetzen." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Fenster verstecken." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Globale Umleitung. 1 zum Aktivieren, 2 zum Deaktivieren und 3 zum Erhalten " +"des Status" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Verfügbare Voreinstellungen anzeigen." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Ausgang" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_Eingang" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "Die Datei ist nicht ordnungsgemäß" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" +"Die Impulsdatei ist möglicherweise beschädigt oder wird nicht unterstützt" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Es werden nur Stereo-Impulsdateien unterstützt" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Impulsdatei nicht importiert" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Impulsdatei importieren" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Öffnen" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Impulsantwort" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Impuls laden" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Impuls entfernen" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Keine Impulsdatei geladen" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Die Impulsdatei konnte nicht geladen werden" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Rekorder" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Spieler" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Effekte" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "APO Preset-Datei importieren" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO Voreinstellungen" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "GraphicEQ-Voreinstellungsdatei importieren" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "GraphicEQ-Voreinstellungen" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Voreinstellung automatisch laden" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Ausgabegerät" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Entfernen" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Ausgabegerät" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Hinzufügen" + +#: src/presets_menu.cpp:215 +#, fuzzy +msgid "Save?" +msgstr "Speichern?" + +#: src/presets_menu.cpp:234 +#, fuzzy +msgid "Delete?" +msgstr "Löschen?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Ausgewähltes Modell wurde nicht geladen. Sein Format wird möglicherweise " +"nicht unterstützt. Rückkehr zum Standardmodell." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Modell-Datei importieren" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise-Modelle" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Bassverstärker" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Bass Lautheit" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Crystalizer" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Echounterdrückung" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Equalizer" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Exciter" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Ausgabegerät" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limiter" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximierer" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Multiband-Kompressor" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Multiband Gate" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Nachhall" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Rauschreduzierung" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Sprachprozessor" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Stereowerkzeuge" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} nicht verfügbar" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Nutze" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Hochpass-Filter" + +#~ msgid "High-Cut Filter" +#~ msgstr "Tiefpass-Filter" + +#~ msgid "Uniform" +#~ msgstr "Einheitlich" + +#~ msgid "New Output Preset Name" +#~ msgstr "Neuer Ausgabe-Presetname" + +#~ msgid "Search Output Preset" +#~ msgstr "Ausgabe-Preset suchen" + +#~ msgid "Output Presets List" +#~ msgstr "Liste der Ausgabe-Voreinstellungen" + +#~ msgid "infinity" +#~ msgstr "unendlich" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Verhältnis" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Schwelle" + +#~ msgid "Low-pass" +#~ msgstr "Tiefpass" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Hochpass" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/okt Tiefpass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/okt Tiefpass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/okt Tiefpass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/okt Hochpass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/okt Hochpass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/okt Hochpass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/okt Bandpass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/okt Bandpass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/okt Bandpass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/okt Bandsperre" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/okt Bandsperre" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/okt Bandsperre" + +#~ msgid "Inertia" +#~ msgstr "Trägheit" + +#~ msgid "Band Type" +#~ msgstr "Band Typ" + +#~ msgid "Band Mode" +#~ msgstr "Band Modus" + +#~ msgid "Band Slope" +#~ msgstr "Band Kurve" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Lautstärke" + +#~ msgid "High Speed" +#~ msgstr "Schnell" + +#~ msgid "High Quality" +#~ msgstr "Hohe Qualität" + +#~ msgid "High Consistency" +#~ msgstr "Hohe Konsistenz" + +#~ msgid "Formant" +#~ msgstr "Format" + +#~ msgid "Shifted" +#~ msgstr "Verschoben" + +#~ msgid "Preserved" +#~ msgstr "Beibehalten" + +#~ msgid "Transients" +#~ msgstr "Transient" + +#~ msgid "Crisp" +#~ msgstr "Klar" + +#~ msgid "Mixed" +#~ msgstr "Gemischt" + +#~ msgid "Smooth" +#~ msgstr "Sanft" + +#~ msgid "Detector" +#~ msgstr "Erkennung" + +#~ msgid "Compound" +#~ msgstr "Verbindung" + +#~ msgid "Percussive" +#~ msgstr "Hart" + +#~ msgid "Soft" +#~ msgstr "Weich" + +#~ msgid "Phase" +#~ msgstr "Phase" + +#~ msgid "Laminar" +#~ msgstr "Laminar" + +#~ msgid "Independent" +#~ msgstr "Unabhängig" + +#~ msgid "Cents" +#~ msgstr "Cent" + +#~ msgid "Octaves" +#~ msgstr "Oktaven" + +#~ msgid "_Manual" +#~ msgstr "_Handbuch" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Öffne die Anleitung für Easy Effects" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} ist nicht auf dem System installiert" + +#~ msgid "High Pass" +#~ msgstr "Hochpass" + +#~ msgid "Low Pass" +#~ msgstr "Tiefpass" + +#~ msgid "Cancel" +#~ msgstr "Abbrechen" + +#~ msgid " PreAmplification" +#~ msgstr " Vorverstärkung" + +#~ msgid " Feed-forward" +#~ msgstr " Feed-forward" + +#~ msgid "Frame Size" +#~ msgstr "Rahmengröße" + +#, fuzzy +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "Globale Umleitung aktivieren/deaktivieren" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Tiefpass" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Einheitlich" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Vorverzögerung" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Rechter Kanal" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Trockenheit" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Trockenheit" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Feuchtigkeit" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Feuchtigkeit" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Auflösung der schnellen Fourier-Transformation" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Unterdrückungsgrad" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Audioeffekte für PipeWire Anwendungen" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Rauschreduzierung" + +#~ msgid "Load APO Preset" +#~ msgstr "APO Preset laden" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "" +#~ "Lautstärke von virtuellen EasyEffects Geräten beim Start zurücksetzen" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Ausgabe-Voreinstellungen: " + +#~ msgid "Input Presets: " +#~ msgstr "Eingabe-Voreinstellungen: " + +#~ msgid "Split Mode" +#~ msgstr "Teilungsmodus" + +#~ msgid "Split 1/2" +#~ msgstr "1/2 Teilen" + +#~ msgid "Split Frequency 1" +#~ msgstr "Teilfrequenz 1" + +#~ msgid "Split 2/3" +#~ msgstr "2/3 Teilen" + +#~ msgid "Split Frequency 2" +#~ msgstr "Teilfrequenz 2" + +#~ msgid "Split 3/4" +#~ msgstr "3/4 Teilen" + +#~ msgid "Split Frequency 3" +#~ msgstr "Teilfrequenz 3" + +#~ msgid "Sub Band" +#~ msgstr "Subband" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Band 1 Umleitung" + +#~ msgid "Band 1 Solo" +#~ msgstr "Nur Band 1" + +#~ msgid "Band 1 Detection" +#~ msgstr "Band 1 Erkennung" + +#~ msgid "Band 1 Attack" +#~ msgstr "Band 1 Ansprechzeit" + +#~ msgid "Band 1 Release" +#~ msgstr "Band 1 Freigabe" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Band 1 Schwelle" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Band 1 Verhältnis" + +#~ msgid "Band 1 Knee" +#~ msgstr "Band 1 Knie" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Band 1 Hebung" + +#~ msgid "Max Reduction" +#~ msgstr "Senkung" + +#~ msgid "Low Band" +#~ msgstr "Tiefband" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Band 2 Umleitung" + +#~ msgid "Band 2 Solo" +#~ msgstr "Nur Band 2" + +#~ msgid "Band 2 Detection" +#~ msgstr "Band 2 Erkennung" + +#~ msgid "Band 2 Attack" +#~ msgstr "Band 2 Ansprechzeit" + +#~ msgid "Band 2 Release" +#~ msgstr "Band 2 Freigabe" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Band 2 Schwelle" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Band 2 Verhältnis" + +#~ msgid "Band 2 Knee" +#~ msgstr "Band 2 Knie" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Band 2 Hebung" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "maximale Band 2 Reduktion" + +#~ msgid "Mid Band" +#~ msgstr "Mittelband" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Band 3 Umleitung" + +#~ msgid "Band 3 Solo" +#~ msgstr "Nur Band 3" + +#~ msgid "Band 3 Detection" +#~ msgstr "Band 3 Erkennung" + +#~ msgid "Band 3 Attack" +#~ msgstr "Band 3 Ansprechzeit" + +#~ msgid "Band 3 Release" +#~ msgstr "Band 3 Freigabe" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Band 3 Schwelle" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Band 3 Verhältnis" + +#~ msgid "Band 3 Knee" +#~ msgstr "Band 3 Knie" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Band 3 Hebung" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "maximale Band 3 Reduktion" + +#~ msgid "High Band" +#~ msgstr "Hochband" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Band 4 Umleitung" + +#~ msgid "Band 4 Solo" +#~ msgstr "Nur Band 4" + +#~ msgid "Band 4 Detection" +#~ msgstr "Band 4 Erkennung" + +#~ msgid "Band 4 Attack" +#~ msgstr "Band 4 Ansprechzeit" + +#~ msgid "Band 4 Release" +#~ msgstr "Band 4 Freigabe" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Band 4 Schwelle" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Band 4 Verhältnis" + +#~ msgid "Band 4 Knee" +#~ msgstr "Band 4 Knie" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Band 4 Hebung" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Maximale Band 4 Reduktion" + +#~ msgid "Wet Amount" +#~ msgstr "Feuchtigkeits-Anteil" + +#~ msgid "Dry Amount" +#~ msgstr "Trockenheits-Anteil" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects ist ein fortgeschrittenes Audio-Manipulations-Tool. Es " +#~ "enthält einen Equalizer, Limiter, Kompressor, einen Hall und viele " +#~ "weitere. Dies wird zudem mit einem eingebauten Spektrumanalysator ergänzt." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects ist der Nachfolger von PulseEffects. EasyEffects unterstützt " +#~ "nur den Audioserver von PipeWire. PulseAudio-Nutzer sollte stattdessen " +#~ "PulseEffects verwenden." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Da EasyEffects den Standard PulseAudio Sound Server benutzt, funktioniert " +#~ "es mit so ziemlich allen Anwendungen. Alle unterstützten Anwendungen " +#~ "werden im Hauptfenster angezeigt, wo diese individuell ein-/ausgeschaltet " +#~ "werden können." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Neben der Audiomanipulation des Ausgangs kann EasyEffects auch Effekte " +#~ "auf Eingabegeräte, z.B. Mikrofone, anwenden. Dies ist sinnvoll für z.B. " +#~ "Audioaufnahmen oder VOIP Anwendungen." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Wenn EasyEffects startet, stellt es die Konfiguration der letzten Sitzung " +#~ "wieder her. Es ist auch möglich, die aktuellen Einstellungen als Profile " +#~ "zu speichern." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "Die Hauptseite mit zwei Audioausgabe-Apps" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "Die Bassverstärkerseite mit den Audiosteuerelementen" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "Die Convolverseite mit den Audiosteuerelementen" + +#~ msgid "This release adds the following features:" +#~ msgstr "Dieser Release fügt die folgenden Features hinzu:" + +#~ msgid "" +#~ "When effects are disable to an application we now set its target metadata " +#~ "to null. This will allow the media session" +#~ msgstr "" +#~ "Wenn jetzt Effekte einer Anwendung deaktiviert werden, setzen wir dessen " +#~ "Ziel-Metadaten auf null. Dies ermöglicht der Medien Session" + +#~ msgid "manager" +#~ msgstr "Manager" + +#~ msgid "" +#~ "A new configuration option was added. It allows EasyEffects to ignore " +#~ "streams whose purpose is to monitor sink" +#~ msgstr "" +#~ "Es wurde eine neue Einstellungsmöglichkeit hinzugefügt. Diese erlaubt " +#~ "EasyEffects überwachende Eingänge zu ignorieren" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr ". Dies sollte einige Probleme in Verbindung mit OBS beheben." + +#~ msgid "The code that shows the stream sample format has been improved" +#~ msgstr "Der Code zum Anzeigen des Stream-Auflösungsformats wurde verbessert" + +#~ msgid "" +#~ "The rnnoise library is now optional. This should help package maintainers " +#~ "to build" +#~ msgstr "" +#~ "Die rnnoise-Bibliothek ist jetzt optional. Dadurch sollten Paket-" +#~ "Maintainer einfacher" + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "" +#~ "Debian Pakete bauen können. Siehe Problem #1000 für weiter Informationen." + +#~ msgid "" +#~ "Our logs now show the source code line where the messages are being " +#~ "printed" +#~ msgstr "" +#~ "In den Logs werden jetzt die Sourcecode-Zeilen angezeigt, welche die " +#~ "Nachricht ausgelöst hat" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Dieser Release behebt die folgenden Fehler:" + +#~ msgid "" +#~ "The \"enable effects\" checkbox in our window was not being updated when " +#~ "third party programs like pavucontrol" +#~ msgstr "" +#~ "Die \"Effekte aktivieren\" Checkbox im Fenster wurde nicht aktualisiert, " +#~ "wenn Programme wie Pavucontrol" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "den Stream von unserem virtuellem Gerät entfernt haben. Dies sollte jetzt " +#~ "behoben sein." + +#~ msgid "" +#~ "Fixed a crash that could happen when the maximum autogain history was " +#~ "changed." +#~ msgstr "" +#~ "Ein Absturz-Problem wurde behoben, wenn der Verlauf der automatischen " +#~ "Verstärkungsregelung verändert wurde." + +#~ msgid "Avoid crashes when pw-mididump is running" +#~ msgstr "Absturz-Probleme durch pw-mididump wurden behoben" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "Die Benutzer-Oberfläche der Tonhöhe-Erweiterung wurde verbessert" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "" +#~ "Unser App-Symbol ist jetzt auch mit QT-basierten Desktops kompatibel" + +#~ msgid "" +#~ "Our blocklist code will use the `application.id` tag if the stream sets it" +#~ msgstr "" +#~ "Unser Blocklist-Code berücksichtigt jetzt den `application.id` Tag, " +#~ "sofern dieser gesetzt ist" + +#~ msgid "" +#~ "In order to avoid problems with the mouse scroll the entries in the " +#~ "applications list shown in our `Players/Recorders`" +#~ msgstr "" +#~ "Um Probleme beim Maus-Scrollen zu vermeiden, werden Einträge in der " +#~ "Anwendungen-Liste jetzt unter `Spieler` angezeigt" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "Tab ohne Lautstärke-Skala angezeigt. Weitere Details zu dem Problem und " +#~ "dessen Lösung kann bei Ticket #1211" + +#~ msgid "and #1427" +#~ msgstr "und #1427 nachgelesen werden" + +#~ msgid "" +#~ "When no application is available for display in the `Players/Recorders` a " +#~ "message will be shown to the user" +#~ msgstr "" +#~ "Wenn keine Anwendungen verfügbar sind, wird in `Spieler` eine Nachricht " +#~ "dem Nutzer angezeigt" + +#~ msgid "Many translation updates" +#~ msgstr "Unzählige Übersetzungen aktualisiert" + +#~ msgid "" +#~ "Fixed a bug where EasyEffects crashed when the number of points displayed " +#~ "in the spectrum was changed while" +#~ msgstr "" +#~ "Es wurde ein Fehler behoben, der EasyEffects zum Absturz brachte, wenn " +#~ "die Anzahl der angezeigten Punkte im Spektrum geändert wurde, während" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "die Pipeline aktiv und das Spektrum-Widget sichtbar war" + +#~ msgid "" +#~ "The pipeline latency value displayed in our window could be wrong in some " +#~ "situations. This was fixed." +#~ msgstr "" +#~ "Der angezeigte Pipeline-Latenz-Wert war in bestimmten Situationen falsch. " +#~ "Dies wurde behoben." + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Es gibt eine neue Einstellung, die es den BenutzerInnen erlaubt, einen " +#~ "Timeout nach Inaktivität für den Audioeffekt festzulegen. Wenn kein " +#~ "Client spielt" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "oder von einem Geräte aufnimmt, werden die Filter getrennt, nachdem der " +#~ "Timeout erreicht ist. Dies wird getan um sicherzustellen," + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "" +#~ "dass keine CPU-Leistung für das Verarbeiten von Stille verschwendet wird." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "Das Autogain-Plugin erlaubt es dem Benutzer nun auszuwählen, welche der " +#~ "drei Lautstärken für die Berechnung der geometrischen Werte verwendet " +#~ "werden sollen" + +#~ msgid "mean." +#~ msgstr "gemein." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "Das Autogain-Plugin erlaubt nun die Einstellung des maximalen Verlaufs " +#~ "und verwendet nicht mehr den Histogramm-Modus `libebur128`." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Dies sollte verhindern, dass die \"Integrierte\" Lautheit für immer auf " +#~ "demselben Wert stehen bleibt." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "Das EasyEffects-Symbol wurde aktualisiert, damit es auf QT-Desktops " +#~ "sichtbar ist." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Diese Version behebt den folgenden Fehler:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "Die Kommandozeilen-Option, welche den globalen `bypass`-Status " +#~ "zurückliefert, funktioniert wieder." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Dieser Release fügt die folgenden Features hinzu:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Der Crossfeed-Filter sollte nun besser mit PipeWire's dynamischem Wechsel " +#~ "der Latenz klarkommen. Unstetigkeiten in der Lautstärke sollten in diesen " +#~ "Situationen nicht mehr auftreten." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Es wurde ein Fehler behoben, der verhinderte, dass Monomikrofone " +#~ "ordnungsgemäß mit EasyEffects funktionierten" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Unterstützung für die nächste PipeWire Version '0.3.44'" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Der Autogain-Filter sollte nun besser mit den dynamischen Latenzschaltern " +#~ "von PipeWire umgehen. Lautstärke-Sprünge sollten in diesen Situationen " +#~ "nicht mehr auftreten." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Wir haben eine Option hinzugefügt, mit der die Lautstärke und die " +#~ "Stummschaltung der virtuellen Geräte beim Start von EasyEffects " +#~ "zurückgesetzt werden können. Das sollte in den Fällen helfen, in denen " +#~ "die Geräte aus unbekannten Gründen vom Audioserver selbst stummgeschaltet " +#~ "werden." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Computer in Bereitschaft werden nun besser unterstützt." + +#~ msgid "Updated translations" +#~ msgstr "Übersetzungen wurden aktualisiert" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Es wurde ein Fehler behohen, der die Anwendung zum Absturz brachte, wenn " +#~ "versucht wurde, automatisch ein Profil ohne Voreinstellungen anzulegen." + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "Es wurde ein Fehler behoben, der beim Setzen der Equalizer " +#~ "Flankensteilheit (Q-Wert) auf `Null`die Anwendung zum Abstürzen brachte." + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita wird verwendet in manchen Teilen unseres Fensters und um " +#~ "zwischen dunklem und hellem Farbschema umzuschalten." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "Das Einstellungs-Menü wurde auf LibAdwaita-Komponenten umgebaut." + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "Der Import von Equalizer APO Vorlagen wurde verbessert, sodass dieses " +#~ "nicht mehr nur auf Glocken-Filter, sondern auch auf andere unterstützte " +#~ "angewendet werden kann" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "Die `alle Einstellungen zurücksetzen`-Funktion sollte jetzt auch für " +#~ "Flatpak funktionieren." + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "Jetzt gibt es eine Möglichkeit das automatische Verstecken des Menüs zu " +#~ "deaktivieren. Dies könnte bei einigen Problemen mit den GTK 4.0 Popover-" +#~ "Menüs helfen." + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "APO Voreinstellungen parsen ist jetzt robuster dank Komma als " +#~ "Tausendertrennzeichen im mittleren Frequenzbereich." + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "Die fmt Bibliothek ist eine neue Abhängigkeit; zumindest solange der C++ " +#~ "Kompiler dies nicht unterstützt. Dies sollte in den kommenden Jahren der " +#~ "Fall sein." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM und GLIBMM sind jetzt keine Abhängigkeiten mehr. Jetzt verwenden " +#~ "wir GTK 4.0 direkt." + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "Jetzt ist es möglich Impulsantworten im Convolver zu kombinieren. Eine " +#~ "neue Impuls-Datei wird generiert und sollte in der Impuls-Liste sichtbar " +#~ "sein." + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "X-Achsen-Anzeige in unseren Graphen verbessert. Jetzt wird die Anzahl der " +#~ "Beschriftungen dynamisch an die Fensterbreite angepasst." + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "Die Dokumentation wurde um die neuen EasyEffects-Funktionen erweitert. " +#~ "PulseEffects-Referenzen wurden entfernt. Ein Button zur Dokumentation " +#~ "wurde dem Menü hinzugefügt." + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "Wenn ein Drehknopf einen Wertebereich außerhalb des möglichen Bereichs " +#~ "hat, wird dieser jetzt an die Grenzen angepasst - statt den vorherigen " +#~ "Wert zu verwenden." + +#~ msgid "" +#~ "The application window now remembers the maximized state and restores it " +#~ "on the next opening event." +#~ msgstr "" +#~ "Das Anwengungsfenster speichert sich jetzt den Maximiert-Status und " +#~ "stellt diesen beim nächsten Öffnen wieder her." + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "Die `tbb`-Bibliothek ist jetzt eine neue Abhängigkeit" + +#~ msgid "" +#~ "The Limiter and the Multiband Compressor plugins can now use an optional " +#~ "external sidechain." +#~ msgstr "" +#~ "Die Begrenzer- und Multiband-Kompressor-Plugins können jetzt optional " +#~ "eine externe Sidechain verwenden." + +#~ msgid "" +#~ "The Autogain plugin now allows the user to select which Loudness is used " +#~ "as reference for the volume correction." +#~ msgstr "" +#~ "Der Benutzer kann jetzt im Autogain-Plugin auswählen, welche Loudness als " +#~ "Referenz zur Lautstärken-Korrektur verwendet werden soll." + +#~ msgid "" +#~ "The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +#~ "Amplification\" parameter." +#~ msgstr "" +#~ "Das APO-Profile-Import-Feature des Equalizer-Plugins parst jetzt auch den " +#~ "\"Pre Amplification\" Parameter." + +#~ msgid "Optional Cubic Volume can be enabled in General Settings." +#~ msgstr "" +#~ "Kubische Lautstärke kann jetzt optional in den allgemeinen Einstellungen " +#~ "aktiviert werden." + +#~ msgid "" +#~ "PipeWire monitor streams are now excluded and removed from the " +#~ "applications list." +#~ msgstr "" +#~ "PipeWire Monitor-Streams werden jetzt von der Applikaitonsliste " +#~ "ausgeschlossen." + +#~ msgid "Hopefully crashes like the one reported at [1172]( are fixed." +#~ msgstr "Hoffentlich sind jetzt Abstürze, wie in [1172] gemeldet, behoben." + +#~ msgid "Prevented a case in which Spectrum was crashing." +#~ msgstr "Ein Absturz durch die Spektrum-Anzeige wurde verindert." + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "Pavucontrol wird jetzt nicht mehr in der Liste der Aufnahme-Anwendungen " +#~ "auf nicht-englischen Systemen angezeigt." + +#~ msgid "" +#~ "Improved compatibility with WirePlumber. This is needed to run on systems " +#~ "that decided to use it instead of the" +#~ msgstr "" +#~ "Kompatibilität mit WirePlumber verbesser. Dies ist notwendig, um auf " +#~ "Systemen zu laufen, die sich dazu entschieden haben, es statt" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "dem mitgelieferten PipeWire-Sitzungsmanager zu verwenden. Weitere " +#~ "Informationen bei Fehlerticket [1144](" + +#~ msgid "" +#~ "When trying to add an autoloading profile for a device already in the " +#~ "list its target preset will be updated. This way we can change the " +#~ "profile preset without having to remove and recreating it." +#~ msgstr "" +#~ "Die Ziel-Voreinstellung für Geräte in der Liste werden aktualisiert, wenn " +#~ "ein Standardprofil hinterlegt wird. So kann die Profil-Voreinstellung " +#~ "angepasst werden, ohne das es komplett neu angelegt werden muss." + +#~ msgid "" +#~ "The preset autoloading support implementation was redesigned again. It " +#~ "should work on more hardware now. For more information see issue [1051](" +#~ msgstr "" +#~ "Das Laden von Standard-Voreinstellungen wurde wieder verändert. Jetzt " +#~ "sollten mehr Geräte damit funktionieren. Für weitere Informationen siehe " +#~ "Ticket [1051](" + +#~ msgid "" +#~ "If the Limiter or the Maximizer are set in the last position of the " +#~ "plugin stack, new plugins are added at the second to last position in " +#~ "order to prevent hardware damage on eventually high output level." +#~ msgstr "" +#~ "Wenn der Begrenzer oder Maximierer an der letzten Position der Plugin-" +#~ "Kette stehen, werden weitere Plugins an der zweitletzen Position " +#~ "hinzugefügt, um eventuelle Schäden an den Geräten durch zu hohe Laustärke " +#~ "zu vermeiden." + +#~ msgid "" +#~ "Removing an application from the blocklist, its previous enabled state is " +#~ "restored." +#~ msgstr "" +#~ "Wird eine Anwendung von der Blockliste entfernt, so werden die zuvor " +#~ "aktivierten Einstellungen wiederhergestellt." + +#~ msgid "" +#~ "Sometimes when removing imported models from the noise reduction plugin " +#~ "the current used model was not properly updated. This should be fixed now." +#~ msgstr "" +#~ "Manchmal wurde beim Entfernen von importierten Rauschreduzierungs-" +#~ "Modellen das aktuelle Modell nicht korrekt gesetzt. Dies sollte nun " +#~ "behoben sein." + +#~ msgid "" +#~ "When editing presets files in an external editor, duplicated entries " +#~ "won't be shown in our presets menu." +#~ msgstr "" +#~ "Wenn Voreinstellungs-Datein in einem externen Editor verändert wurden, " +#~ "konnten duplizierte Einträge nicht mehr in dem Menü für Voreinstellungen " +#~ "angezeigt werden." + +#~ msgid "Now the blocklist is correctly set when switching presets." +#~ msgstr "" +#~ "Jetzt wird die Blockliste korrekt gesetzt, wenn Voreinstellungen " +#~ "gewechselt werden." + +#~ msgid "" +#~ "Now the status of the global bypass button is correctly updated when " +#~ "changing plugin stack." +#~ msgstr "" +#~ "Jetzt wird der Status der Knopfes für die globalen Umleitung korrekt " +#~ "aktualisiert, wenn die Plugin-Liste verändert wird." + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Fehlende Symbole des Systems sollten jetzt nicht mehr in der " +#~ "Applikationsinfo-Oberfläche angezeigt werden" + +#~ msgid "" +#~ "Some icons not showing in Plasma DE with Breeze icon theme should appear " +#~ "now." +#~ msgstr "" +#~ "Manche Symbole, die auf der Plasma-Desktopoberfläche gefehlt haben, " +#~ "sollten jetzt wieder angezeigt werden." + +#~ msgid "Updated Chinese translation." +#~ msgstr "Die chinesische Übersetzung wurde aktualisiert." + +#~ msgid "Updated Italian translation." +#~ msgstr "Die italienische Übersetzung wurde aktualisiert." + +#~ msgid "Added support for the compressor parameter `Boost Amount`" +#~ msgstr "Der Kompressor-Parameter `Boost Amount`wird jetzt unterstützt" + +#~ msgid "" +#~ "The multiband compressor plugin now uses the stereo multiband compressor " +#~ "plugin from Linux Studio Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Das Multiband-Kompressor Plugin verwendet jetzt das Stereo Multiband-" +#~ "Kompressor Plugin von Linux Studio anstatt des Plugins von Calf Studio." + +#~ msgid "" +#~ "The limiter plugin now uses the stereo limiter plugin from Linux Studio " +#~ "Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Das Begrenzer Plugin verwendet jetzt das Begrenzer Plugin von Linux " +#~ "Studio Plugins statt das von Calf Studio." + +#~ msgid "" +#~ "LV2 filters now are spawned in PipeWire graph only when loaded the first " +#~ "time. Once loaded, they remain connected until EasyEffects shutdown." +#~ msgstr "" +#~ "LV2 Filter werden jetzt in der PipeWire nur beim ersten Mal eingehängt. " +#~ "Jetzt bleiben diese eingehängt, bis EasyEffects beendet wird." + +#~ msgid "The echo canceller sampling rate is now properly set." +#~ msgstr "Die Abtastrate der Echounterdrückung wird jetzt korrekt gesetzt." + +#~ msgid "" +#~ "The threshold parameter from the deesser plugin is now saved to the " +#~ "preset file." +#~ msgstr "" +#~ "Der Grenz-Parameter des Deesser Plugins wird jetzt in der Voreinstellungs-" +#~ "Datei gespeichert." + +#~ msgid "" +#~ "Depending on the input gain or output gain values the corresponding level " +#~ "bars could not be aligned." +#~ msgstr "" +#~ "Die Balkenvisualisierung konnte nicht abhängig von der Eingangs- oder " +#~ "Ausgangsverstäkung angepasst werden." + +#~ msgid "" +#~ "When adding more equalizer bands they are set to `Bell` instead of `Off`." +#~ msgstr "" +#~ "Beim Hinzufügen von Equalizer-Bereichen, werden diese jetzt mit `Glocke` " +#~ "statt `Aus` vorbesetzt." + +#~ msgid "" +#~ "Equalizer APO presets loading is now working properly on locales " +#~ "different than C." +#~ msgstr "" +#~ "Laden der Equalizer APO Voreinstellungen funktioniert jetzt auch in " +#~ "anderen Sprachen korrekt." + +#~ msgid "Improved linking management between port filter nodes in PipeWire." +#~ msgstr "" +#~ "Verbessertes Verknüfungs-Management zwischen Schnittstellenfilter-Knoten " +#~ "in PipeWire." + +#~ msgid "" +#~ "The crystalizer plugin signal amplification was too high before. It " +#~ "should be within more reasonable levels now." +#~ msgstr "" +#~ "Die Signalverstärkung des Crystalizer Plugins war zuvor zu hoch. Jetzt " +#~ "sollte es mit sinnvolleren Werten vorbelegt sein." + +#~ msgid "" +#~ "Improved the resampler used in the plugins that require one(like the " +#~ "rnnoise plugin)" +#~ msgstr "" +#~ "Der Resampler, der in verschiedenen Plugins (z.B. der " +#~ "Rauschunterdrückung) verwendet wird, wurde verbessert" + +#~ msgid "Setting multiple autoloading presets should be fine now" +#~ msgstr "" +#~ "Setzen von mehreren Standard-Voreinstellungen sollte jetzt funktionieren" + +#~ msgid "Transient windows are now properly set for some plugins dialogs" +#~ msgstr "Die Dialog-Fenster mancher Plugins werden jetzt korrekt dargestellt" + +#~ msgid "" +#~ "The application and its repository have been renamed from PulseEffects to " +#~ "`EasyEffects`" +#~ msgstr "" +#~ "Die Anwendung und dessen Repository wurde von PulseEffects zu " +#~ "`EasyEffects` umbenannt" + +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "GStreamer wurde durch PipeWire-Filter ersetzt." + +#~ msgid "Average" +#~ msgstr "Durchschnitt" + +#~ msgid "Failed" +#~ msgstr "Gescheitert" + +#~ msgid "Use Default" +#~ msgstr "Standard verwenden" + +#~ msgid "Remove this plugin" +#~ msgstr "Dieses Plugin entfernen" + +#~ msgid "Import Presets" +#~ msgstr "Presets importieren" + +#~ msgid "Start Service at Login" +#~ msgstr "Dienst beim Login starten" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktives Modell" + +#~ msgid "Add to Blocklist" +#~ msgstr "Zur Sperrliste hinzufügen" + +#~ msgid "Blocklist" +#~ msgstr "Sperrliste" + +#~ msgid "Add Plugin" +#~ msgstr "Plugin hinzufügen" + +#~ msgid "Speakers" +#~ msgstr "Lautsprecher" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Plugins" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Aktiviert" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Aktiviert" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latenz" + +#~ msgid "idle" +#~ msgstr "inaktiv" + +#~ msgid "Faster" +#~ msgstr "Schneller" + +#~ msgid "Preserve Formant" +#~ msgstr "Formant erhalten" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Player Name" +#~ msgstr "Spielername" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Ausgangsverstärkung" + +#~ msgid "Channel" +#~ msgstr "Kanal" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Boden" + +#~ msgid "Output Effects" +#~ msgstr "Ausgabeeffekte" + +#~ msgid "Settings" +#~ msgstr "Einstellungen" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Einstellungen" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Dauer" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Testsignal" + +#~ msgid "Signal" +#~ msgstr "Signal" + +#~ msgid "Show Spectrum" +#~ msgstr "Spektrum anzeigen" + +#~ msgid "Border" +#~ msgstr "Grenze" + +#~ msgid "Spectrum Type" +#~ msgstr "Spektrumstyp" + +#~ msgid "Spectrum Color" +#~ msgstr "Spektrumfarbe" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Aktives Modell" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Maximale Amplitudenreduktion" + +#~ msgid "Wet" +#~ msgstr "Nass" + +#~ msgid "Dry" +#~ msgstr "Trocken" + +#~ msgid "S/C Level" +#~ msgstr "S/C-Level" + +#~ msgid "Phase Correlation" +#~ msgstr "Phasenkorrelation" + +#~ msgid "Short Term" +#~ msgstr "Kurzfristig" + +#~ msgid "Id" +#~ msgstr "Id" + +#~ msgid "Run in Background" +#~ msgstr "Im Hintergrund ausführen" + +#~ msgid "ceil" +#~ msgstr "Begrenzen" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Setze die Lautstärke und schalte Effekte ein/aus" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Enthält einen Equalizer mit integrierten Presets" + +#~ msgid "Input Limiter" +#~ msgstr "Eingabe-Limiter" + +#~ msgid "Calibration" +#~ msgstr "Kalibrierung" + +#~ msgid "Limit" +#~ msgstr "Grenze" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Audio-Effekte für Pulseaudio Anwendungen" + +#~ msgid "using" +#~ msgstr "nutzt" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Audioeffekte für Pulseaudio-Anwendungen" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrationsmikrofon" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Dieses Preset automatisch anwenden, wenn das aktuell verwendete Gerät an " +#~ "das System angeschlossen ist" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Version" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Rechteck" + +#~ msgid "Saw" +#~ msgstr "Sägezahn" + +#~ msgid "Triangle" +#~ msgstr "Dreieck" + +#~ msgid "Pink Noise" +#~ msgstr "Rosa Rauschen" + +#~ msgid "Ticks" +#~ msgstr "Ticken" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaußsches Rauschen" + +#~ msgid "Blue Noise" +#~ msgstr "Blaues Rauschen" + +#~ msgid "Violet Noise" +#~ msgstr "Violettes Rauschen" + +#~ msgid "Volume" +#~ msgstr "Lautstärke" + +#~ msgid "Measure Noise" +#~ msgstr "Rauschen messen" + +#~ msgid "Subtract Noise" +#~ msgstr "Rauschen reduzieren" + +#~ msgid "Extended Filter" +#~ msgstr "Erweiterter Filter" + +#~ msgid "Low" +#~ msgstr "Tief" + +#~ msgid "Moderate" +#~ msgstr "Mäßig" + +#~ msgid "High" +#~ msgstr "Hoch" + +#~ msgid "Delay Agnostic" +#~ msgstr "Verzögerungsagnostisch" + +#~ msgid "Very High" +#~ msgstr "Sehr hoch" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptiv Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Fixiert Digital" + +#~ msgid "Detection Likelihood" +#~ msgstr "Erkennungswahrscheinlichkeit" + +#~ msgid "Very Low" +#~ msgstr "Sehr Tief" + +#~ msgid "Use Custom Color" +#~ msgstr "Benutzerdefinierte Farbe benutzen" + +#~ msgid "Use Gradient" +#~ msgstr "Farbverlauf nutzen" + +#~ msgid "Gradient Color" +#~ msgstr "Verlaufsfarbe" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Impulsantwortdatei importieren" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Auswahl der Impulsantwortdatei" + +#~ msgid "Aggressive Mode" +#~ msgstr "Aggressiver Modus" + +#~ msgid "Before" +#~ msgstr "Vorher" + +#~ msgid "After" +#~ msgstr "Nachher" + +#~ msgid "Loudness Range" +#~ msgstr "Lautstärkebereich" + +#~ msgid "Apply" +#~ msgstr "Anwenden" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Standard Samplingrate" + +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgid "File" +#~ msgstr "Datei" + +#~ msgid "Configuration" +#~ msgstr "Konfiguration" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Frequenz zurücksetzen" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Einstellungen" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Presets" + +#~ msgid "Auto Gain" +#~ msgstr "Automatische Verstärkungsregelung" + +#~ msgid "Detect Silence" +#~ msgstr "Stille erkennen" + +#~ msgid "Muted" +#~ msgstr "Stumm" + +#~ msgid "Distant Headphones" +#~ msgstr "Entfernte Kopfhörer" + +#~ msgid "Priority Type" +#~ msgstr "Prioritätstyp" + +#~ msgid "Niceness" +#~ msgstr "Qualität" + +#~ msgid "Priority" +#~ msgstr "Priorität" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frequenz" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frequenz" + +#~ msgid "About" +#~ msgstr "Über" + +#~ msgid "Protocol" +#~ msgstr "Protokoll" + +#~ msgid "Default Sample Format" +#~ msgstr "Standard Samplingformat" + +#~ msgid "Resamplers" +#~ msgstr "Resampler" + +#~ msgid "Pipeline Input" +#~ msgstr "Pipeline-Eingang" + +#~ msgid "Buffer" +#~ msgstr "Puffer" + +#~ msgid "Pipeline Output" +#~ msgstr "Pipeline-Ausgang" + +#~ msgid "Block Size" +#~ msgstr "Blockgröße" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#~ msgid "paused" +#~ msgstr "Pausiert" + +#~ msgid "playing" +#~ msgstr "Spielt" + +#~ msgid "Pulseaudio" +#~ msgstr "PulseAudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Presets importieren" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Amplitudenreduktion" + +#~ msgid "Exponent" +#~ msgstr "Exponent" diff --git a/po/easyeffects.pot b/po/easyeffects.pot new file mode 100644 index 0000000..d164efa --- /dev/null +++ b/po/easyeffects.pot @@ -0,0 +1,2404 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..9fba039 --- /dev/null +++ b/po/es.po @@ -0,0 +1,3536 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-10-18 14:15+0000\n" +"Last-Translator: gallegonovato \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.1\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ecualizador, compresor y otros efectos de sonido" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de sonido para las aplicaciones PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Perfiles\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Activar/desactivar esta aplicación" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Activar" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Lista de aplicaciones excluidas: Añadir/quitar esta aplicación" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Excluir" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Silenciar la aplicación" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Cambiar el volumen de esta aplicación" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Volumen de aplicación" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Ayuda" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Restablecer ajustes" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Preferencias" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Atajos de teclado" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Acerca de Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Perfiles" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menú de perfiles" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Activar/desactivar la derivación global" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Bypass global" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menú principal" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Ventana de Easy Effects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Lista de aplicaciones" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Lista vacía" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Ninguna aplicación de audio disponible" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Restablecer el historial" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "Mandos" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Objetivo" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silencio" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Historial máximo" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referencia" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentánea" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Corto plazo" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integral" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Media geométrica (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Media geométrica (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Media geométrica (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Media geométrica (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Sonoridad" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativa" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rango" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Ganancia de salida" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Entrada" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Ganancia de entrada del plugin" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Salida" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Ganancia de salida del plugin" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Restablecer" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Dispositivo" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nombre" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Perfil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Preestablecido" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Eliminar este preajuste de carga automática" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Escuchar" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mezclar armónicos" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3ª" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2ª" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Cantidad" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmónicos" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Alcance" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Límite inferior" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Valor del límite inferior" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Enlace" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Nombre de la aplicación" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Añadir a las aplicaciones excluidas" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Lista de aplicaciones excluidas" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Mostrar aplicaciones excluidas" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Mostrar la ventana nativa" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modo" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Descendente" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Ascendente" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Impulsar" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Modo de compresión" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Umbral de refuerzo" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Cantidad de refuerzo" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Ataque" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Tiempo" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Umbral" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Tiempo de ataque" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Umbral de ataque" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Decaimiento" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Tiempo de decaimiento" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Umbral de decaimiento" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Ratio (n:1)" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Rótula" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Ganancia de compensación" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Nivel" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Nivelado" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Cadena lateral" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Modo estéreo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Fuente" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Medio" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Lateral" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Izquierdo" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Derecho" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Mínimo" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Máximo" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Fuente de la cadena lateral" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "Izquierda/Derecha" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "Derecha/Izquierda" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "Medio/Lateral" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "Lateral/Media" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "Fuente Split para el estéreo" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Pico" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS (media cuadrática)" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Filtro de paso bajo" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Promedio móvil simple" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Modo cadena lateral" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "Escuchar el Sidechain" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipo" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Retroalimentación" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Avance hacia atrás" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Externa" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Tipo de cadena lateral" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Dispositivo de entrada" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Preamplificación" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reactividad" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Anticipación" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Filtros de cadena lateral" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Paso alto" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frecuencia" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Desactivado" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Modo filtro de paso alto" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Frecuencia del filtro de paso alto" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Paso bajo" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Modo filtro de paso bajo" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Ganancia" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Envolvente" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Canal izquierdo" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Canal derecho" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Respuestas a impulsos" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Combinar" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Amplitud estéreo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Espectro" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Escala logarítmica" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Ganancia automática" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Tasa" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Muestras" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Duración" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Combinar las respuestas a impulsos" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Primer núcleo" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Segundo núcleo" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Nombre del archivo de salida" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Nombre del núcleo combinado" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Impulso de la importación" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Buscar" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Buscar archivo de respuesta a impulsos" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Lista de archivos de respuesta a impulsos" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Predeterminado" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Corte" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Alimentación" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Derivación" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Silenciar" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detección" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Banda ancha" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Banda dividida" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "División F1" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "División de la frecuencia 1" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "Pico F2" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Pico de la frecuencia 2" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "Ganancia F1" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Ganancia de la frecuencia 1" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "Nivel F2" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Nivel de la frecuencia 2" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "Pico Q F2" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Pico Q de la frecuencia 2" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Laxitud" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detectado" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Reducción" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Retraso" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Invertir la fase" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "Límite de atenuación" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "Umbral mínimo de procesamiento" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "Umbral máximo de procesamiento de ERB" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "Umbral máximo de procesamiento de DF" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "Buffer mínimo para el procesamiento" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Longitud del filtro" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Longitud del filtro" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Suprimir el eco residual" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Supresión del eco en el extremo cercano" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Aplicaciones excluidas" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Pitch izquierdo" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Pitch derecho" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Dividir canales" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Respuesta plana" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calcular frecuencias" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Ordenar las bandas" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importar perfil" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pendiente" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solista" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Calidad" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Anchura" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Límite superior" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Valor del límite superior" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "Expansor" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "Modo Expansor" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Interna" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Acceder" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Descripción" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Borrar este perfil" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "Low Shelf" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "High Shelf" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Campana" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "Filtro de paso de banda (Band Pass)" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Rechazo de banda" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonancia" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "Filtro Ladder-Pass" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "Reducción de banda" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "Filtro All pass" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "Modo Ecualizador" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Puerta de ruido" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Zona" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Histéresis" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Mezcla" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Inicio de la zona de ataque" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Inicio de la zona de decaimiento" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "Pico real" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sobremuestreo" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Distorsión (Dither)" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Herm delgado" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Hermite Amplia (Función cúbica de interpolación de Hermite)" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Herm cola" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Herm Pato" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exp Delgada" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp amplia" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Exp cola" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exp Pato" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "línea fina" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Ancho de línea" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Cola de línea" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Pato de línea" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ninguno" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Parcial x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Parcial x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Parcial x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Parcial x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Parcial x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Parcial x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Parcial x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Parcial x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Parcial x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Parcial x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Completo x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Completo x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Completo x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Completo x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Completo x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Completo x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Completo x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Completo x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Completo x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Completo x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC PreAmp (Preamplificador)" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Preamplificaión de la cadena lateral" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Refuerzo" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Enlace estéreo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Cadena lateral externa" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Fuente de la cadena lateral externa" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Nivelación automática" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Ataque de nivelación automática" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Decaimiento de nivelación automática" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Rótula (transición) de nivelación automática" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Ganancia izquierda" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Ganancia derecha" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Cadena lateral izquierda" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Cadena lateral derecha" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Estándar" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Plano" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Tamaño de la FFT" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Volumen de salida" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Recorte" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Límite superior" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Refuerzo de la cadena lateral" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "Rosa BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "Rosa MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "Marrón BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "Marrón MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "Mostrar la interfaz de usuario nativa" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Modo de funcionamiento" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Clásico" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderno" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "Fase lineal" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Lista de bandas" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Banda 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Banda 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Banda 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Banda 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Banda 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Banda 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Banda 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Banda 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Inicio de la banda" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Fin de la banda" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Modo de compresión de banda" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Bypass de banda" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Opciones de la cadena lateral de la banda" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Modo estéreo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filtro paso bajo" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Frecuencia del filtro paso bajo" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtro paso alto" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Frecuencia del filtro paso alto" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "PreAmp (subir el nivel de ganancia de manera limpia)" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Ganancia de banda" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Envolvente de banda" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Curva de la banda" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Reducción de banda" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "General" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Gestión de dispositivos" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"Se recomienda NO establecer Easy Effects Sink/Source como dispositivo por " +"defecto en aplicaciones externas (por ejemplo, Gnome Settings y Plasma " +"System Settings)." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Usar entrada predeterminada" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Dispositivo de entrada personalizado" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Usar salida predeterminada" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Dispositivo de salida personalizado" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Información del servidor" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Versión principal" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Versión de la biblioteca" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Tasa de muestreo" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Quantum mínimo" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Quantum máximo" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Quantum por defecto" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Carga automática de perfiles" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Dispositivos de salida" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Perfiles de salida" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Crear asociación" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Agregar un perfil de salida de carga automática" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Lista de perfiles de salida de carga automática" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Dispositivos de entrada" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Perfiles de entrada" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Agregar un perfil de entrada de carga automática" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Lista de perfiles de entrada de carga automática" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Lista de los módulos" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Lista de los clientes" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Señal de prueba" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Estado" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Habilitado" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Propiedades" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canales" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Ambos" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Ambos canales" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Forma de onda" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Onda sinusoidal" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Ruido blanco" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "Búsqueda rápida" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "Suavizado" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "Duración de la secuencia" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "Ventana de búsqueda" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "Longitud de la superposición" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Tono" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitonos" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "Diferencia del tiempo" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "Diferencia del flujo" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Quitar este efecto" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Activar/desactivar este efecto" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Cambiar la posición de este efecto" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Agregar efecto" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Lista de plugins utilizados" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Sin efectos" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Flujo de audio no modificado" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Buscar plugin" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Lista de plugins" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_General" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Servicio" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Lanzar el servicio al iniciar el sistema" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Apagado al cerrar la ventana" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Procesar todos los flujos de salida" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Procesar todos los flujos de entrada" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Ignorar los flujos del monitor de dispositivos" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Usar volumen cúbico" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Tiempo de inactividad" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "Intervalo de actualización (medidores de nivel y espectro)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "Frecuencia de la actualización (Complementos LV2)" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Estilo" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Usar tema oscuro" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Ocultar los menús al hacer click fuera" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "Funciones experimentales" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "Ventana de los complementos nativos" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "Permite mostrar/ocultar la ventana nativa del plugin" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Espectro" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Forma" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barras" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Líneas" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Puntos" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Puntos" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Altura" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Ancho de la línea" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Rellenar" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Mostrar los bordes de las barras" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Redondear las esquinas" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "Escala dinámica" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Color" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Lineas y barras" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Etiquetas del eje" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Rango de frecuencia" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Mínima" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Máximo" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Cargar" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "Descarta los ajustes actuales y carga este preajuste" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Guardar la configuración actual en este perfil" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Eliminar este perfil" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "Nuevo nombre preestablecido" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Crear un preajuste nuevo" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Importar un preajuste" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Buscar perfil de entrada" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Lista de perfiles de entrada" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Atenuación de alta frecuencia" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Tamaño de la sala" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Pequeña" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Mediana" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Túnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/suave" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Música experimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difusión" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pre retraso" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Tiempo de decaimiento" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Corte de graves" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Corte de agudos" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiente" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Paredes vacías" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Sala" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Sala grande vacía" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Discoteca" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Sala grande ocupada" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importar modelo" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Detección de la voz" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modelos" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Modelo estándar" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Lista de modelos de RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Modelo no cargado" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Modelo activo" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Modelo RNNoise estándar" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Resumen" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "Mostrar la ayuda" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Pantalla completa/restaurar desde pantalla completa" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Cerrar la ventana" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Salir de Easy Effects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Denoise AI" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Control automático de ganancia" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Desreverberación" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Probabilidad de actividad de la voz" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Comienzo" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Continuar" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Supresión del ruido" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Nivel" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Balance de entrada" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Recorte suave" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Nivel del recorte suave (soft clipping)" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matriz estéreo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Estéreo predeterminado)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Estéreo a medio-lateral)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Medio-lateral a estéreo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "R > LL (Mono usando el canal izquierdo)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Mono usando el canal derecho)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Mono sumando los canales izq. y dcho.)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Estéreo invirtiendo los canales)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Modo estéreo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Nivel lateral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balance lateral" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Nivel medio" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panoramización media" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Balance de salida" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Retraso L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Retardo izquierdo/derecho" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base estéreo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fase estéreo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "En ejecución" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Suspendido" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Inactivo" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "En creación" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Error" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Desconocido" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "canales" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Deja Easy Effects. Útil cuando se ejecuta en modo de servicio." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Cargar un perfil. Por ejemplo: easyeffects -l musica" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Reiniciar Easy Effects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Ocultar la ventana." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Bypass global. 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +"estado actual" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Mostrar los perfiles disponibles." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Salida" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_Entrada" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_Software PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "El archivo no es regular" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "El archivo de impulso puede estar dañado o no ser compatible" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Sólo se admiten archivos de impulso estéreo" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Archivo de impulso no importado" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importar archivo de respuesta a impulsos" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Abrir" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Respuesta a impulsos" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Cargar archivo de respuesta a impulsos" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Eliminar archivo de respuesta a impulsos" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "No se ha cargado el archivo de impulsos" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Fallo en la carga del archivo de impulso" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Grabadores" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Reproductores" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Efectos" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importar archivo de perfil APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Perfiles APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"No se ha cargado el preajuste APO. Es posible que el formato de archivo no " +"sea compatible. Compruebe su contenido." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "Importar archivo preestablecido de GraphicEQ" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "Preajustes de GraphicEQ" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"Preajuste GraphicEQ no cargado. Es posible que el formato de archivo no sea " +"compatible. Compruebe su contenido." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Eliminar perfil de carga automática" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "Medidor del nivel de salida" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Eliminar" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Dispositivo de salida" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Agregar" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "¿Guardar?" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "¿Borrar?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"El modelo seleccionado no se ha cargado. Su formato puede no ser compatible. " +"Vuelva al modelo estándar." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importar archivo de modelo" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Modelos RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Refuerzo de graves" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Sonoridad de graves" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolucinador" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Alimentación cruzada" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristalizador" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "Eliminador de ruido profundo" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" +"De-essing (efecto reduce la sibilancia excesiva y se utiliza principalmente " +"en grabaciones de voz)" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Cancelación de eco" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ecualizador" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitador" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "Medidor de nivel" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limitador" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizador" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compresor multibanda" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Puerta de ruido multibanda" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Reverberación" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Reducción de ruido" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Procesador de voz" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Herramientas estéreo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} No disponible" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" +"El software necesario para el efecto {}, \"{}\", no está instalado. " +"Considera la posibilidad de utilizar el paquete Easy Effects Flatpak o de " +"instalar el software tu mismo." + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" +"El efecto {} estaba desactivado cuando se compiló Easy Effects. Esto se debe " +"quizás a que el software necesario para este efecto, \"{}\", no estaba " +"disponible. Considera la posibilidad de utilizar el paquete Easy Effects " +"Flatpak o de crear tu propio paquete de Easy Effects." + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "infinito" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "Usando {}" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro paso bajo" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro paso alto" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nombre del nuevo perfil de salida" + +#~ msgid "Search Output Preset" +#~ msgstr "Buscar perfil de salida" + +#~ msgid "Output Presets List" +#~ msgstr "Lista de perfiles de salida" + +#~ msgid "New Input Preset Name" +#~ msgstr "Nombre del nuevo perfil de entrada" + +#~ msgid "Search Input Preset" +#~ msgstr "Buscar perfil de entrada" + +#~ msgid "Input Presets List" +#~ msgstr "Lista de perfiles de entrada" + +#~ msgid "infinity" +#~ msgstr "infinito" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Ratio (n:1)" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Umbral" + +#~ msgid "Low-pass" +#~ msgstr "Paso bajo" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Paso alto" + +#~ msgid "Gating" +#~ msgstr "Actividad de la puerta" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Paso bajo 12dB/oct" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Paso bajo 24dB/oct" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Paso bajo 36dB/oct" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Paso alto 12dB/oct" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Paso alto 24dB/oct" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Paso alto 36dB/oct" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Paso banda 6dB/oct" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Paso banda 12dB/oct" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Paso banda 18dB/oct" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Rechazo de banda 6dB/oct" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Rechazo de banda 12dB/oct" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Rechazo de banda 18dB/oct" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#~ msgid "Band Type" +#~ msgstr "Tipo de banda" + +#~ msgid "Band Mode" +#~ msgstr "Modo de banda" + +#~ msgid "Band Slope" +#~ msgstr "Pendiente de la banda" + +#~ msgid "Loudness List" +#~ msgstr "Lista de sonoridad" + +#~ msgid "High Speed" +#~ msgstr "Alta velocidad" + +#~ msgid "High Quality" +#~ msgstr "Alta calidad" + +#~ msgid "High Consistency" +#~ msgstr "Alta consistencia" + +#~ msgid "Formant" +#~ msgstr "Formato" + +#~ msgid "Shifted" +#~ msgstr "Alterado" + +#~ msgid "Preserved" +#~ msgstr "Preservado" + +#~ msgid "Transients" +#~ msgstr "Transitorios" + +#~ msgid "Crisp" +#~ msgstr "Nítidos" + +#~ msgid "Mixed" +#~ msgstr "Intermedios" + +#~ msgid "Smooth" +#~ msgstr "Suavizados" + +#~ msgid "Detector" +#~ msgstr "Detección" + +#~ msgid "Compound" +#~ msgstr "Compuesto" + +#~ msgid "Percussive" +#~ msgstr "Percusivo" + +#~ msgid "Soft" +#~ msgstr "Suave" + +#~ msgid "Phase" +#~ msgstr "Fase" + +#~ msgid "Laminar" +#~ msgstr "Laminado" + +#~ msgid "Independent" +#~ msgstr "Independiente" + +#~ msgid "Cents" +#~ msgstr "" +#~ "Cents (menor unidad usual que se emplea para medir intervalos musicales)" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#~ msgid "_Manual" +#~ msgstr "_Manual" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Abrir el manual de usuario Easy Effects" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} no está instalado en el Sistema" + +#~ msgid "High Pass" +#~ msgstr "Paso alto" + +#~ msgid "Low Pass" +#~ msgstr "Pase bajo" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid " PreAmplification" +#~ msgstr " Preamplificación" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Cerrar (Pulsar ESC)" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del cuadro" + +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "" +#~ "Activar/desactivar el\n" +#~ " bypass global" + +#~ msgid " Low-Pass" +#~ msgstr " Paso bajo" + +#~ msgid " Uniform" +#~ msgstr " Uniforme" + +#~ msgid "Left Delay" +#~ msgstr "Retraso a la izquierda" + +#~ msgid "Right Delay" +#~ msgstr "Retraso de la derecha" + +#~ msgid "Left Dry Level" +#~ msgstr "Nivel seco izquierdo" + +#~ msgid "Right Dry Level" +#~ msgstr "Nivel Seco derecho" + +#~ msgid "Left Wet Level" +#~ msgstr "Nivel húmedo izquierdo" + +#~ msgid "Right Wet Level" +#~ msgstr "Nivel húmedo derecho" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Tamaño de la transformada rápida de Fourier" + +#~ msgid "Clipping Range" +#~ msgstr "Rango de recorte" + +#~ msgid "Suppression" +#~ msgstr "Supresión" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de audio para aplicaciones que utilizan PipeWire" + +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Reducción de ruido (rápido)" + +#~ msgid "Load APO Preset" +#~ msgstr "Cargar el perfil APO" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "" +#~ "Restablecer el volumen de los dispositivos virtuales de EasyEffects al " +#~ "iniciarse" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de entrada: " + +#~ msgid "Split Mode" +#~ msgstr "Modo de división" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Dividir frecuencia 1" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Dividir frecuencia 2" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Dividir frecuencia 3" + +#~ msgid "Sub Band" +#~ msgstr "Sub-banda" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass de banda 1" + +#~ msgid "Band 1 Solo" +#~ msgstr "Solo de la banda 1" + +#~ msgid "Band 1 Detection" +#~ msgstr "Método de detección de la banda 1" + +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque de la banda 1" + +#~ msgid "Band 1 Release" +#~ msgstr "Tiempo de decaimiento de la banda 1" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Umbral de la banda 1" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Ratio de la banda 1" + +#~ msgid "Band 1 Knee" +#~ msgstr "Rótula (transición) de la banda 1" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Ganancia de compensación de la banda 1" + +#~ msgid "Max Reduction" +#~ msgstr "Atenuación máxima" + +#~ msgid "Low Band" +#~ msgstr "Banda baja" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass de la banda 2" + +#~ msgid "Band 2 Solo" +#~ msgstr "Solo de la banda 2" + +#~ msgid "Band 2 Detection" +#~ msgstr "Método de detección de la banda 2" + +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque de la banda 2" + +#~ msgid "Band 2 Release" +#~ msgstr "Tiempo de decaimiento de la banda 2" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Umbral de la banda 2" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Ratio de la banda 2" + +#~ msgid "Band 2 Knee" +#~ msgstr "Rótula (transición) de la banda 2" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Ganancia de compensación de la banda 2" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción máx. de la banda 2" + +#~ msgid "Mid Band" +#~ msgstr "Banda media" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass de la banda 3" + +#~ msgid "Band 3 Solo" +#~ msgstr "Solo de la banda 3" + +#~ msgid "Band 3 Detection" +#~ msgstr "Método de detección de la banda 3" + +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque de la banda 3" + +#~ msgid "Band 3 Release" +#~ msgstr "Tiempo de decaimiento de la banda 3" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Umbral de la banda 3" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Ratio de la banda 3" + +#~ msgid "Band 3 Knee" +#~ msgstr "Rótula (transición) de la banda 3" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Ganancia de compensación de la banda 3" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción máx. de la banda 3" + +#~ msgid "High Band" +#~ msgstr "Banda alta" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass de la banda 4" + +#~ msgid "Band 4 Solo" +#~ msgstr "Solo de la banda 4" + +#~ msgid "Band 4 Detection" +#~ msgstr "Método de detección de la banda 4" + +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque de la banda 4" + +#~ msgid "Band 4 Release" +#~ msgstr "Tiempo de decaimiento de la banda 4" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Umbral de la banda 4" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Ratio de la banda 4" + +#~ msgid "Band 4 Knee" +#~ msgstr "Rótula (transición) de la banda 4" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Ganancia de compensación de la banda 4" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción máx. de la banda 4" + +#~ msgid "Wet Amount" +#~ msgstr "Cantidad de señal con efectos" + +#~ msgid "Dry Amount" +#~ msgstr "Cantidad de señal sin efectos" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects es una herramienta avanzada de manipulación de audio. Entre " +#~ "sus útiles incluye un ecualizador, un limitador, un compresor y una " +#~ "herramienta de reverberación , solo por mencionar algunos. Para " +#~ "complementar lo anterior, viene con un analizador de espectro incluido." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects es el sucesor de PulseEffects. EasyEffects solo soporta el " +#~ "servidor de audio PipeWire. Los usuarios de PulseAudio deben usar " +#~ "PulseEffects en su lugar." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Debido a que EasyEffects usa por defecto el servidor de audio PipeWire, " +#~ "funcionará con la mayoría, sino todas, las aplicaciones que uses. Todas " +#~ "las aplicaciones son mostradas en la ventana principal, donde pueden ser " +#~ "habilitadas individualmente." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Además de manipular el sonido de salida, EasyEffects también puede " +#~ "aplicar efectos a dispositivos de entrada, como micrófonos. Esto es útil " +#~ "en la grabación de audio, por poner un ejemplo, pero también funciona " +#~ "correctamente durante las conversaciones de voz." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Cuando se inicie EasyEffects, este recordará convenientemente la " +#~ "configuración utilizada en la última sesión. También es posible guardar " +#~ "todos los ajustes actuales en un perfil." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "La página principal mostrando dos aplicaciones de salida de audio" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "" +#~ "La página del potenciador de graves mostrando los controles de audio" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "La página del convolucionador mostrando los controles de audio" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta versión añade las siguientes características:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Esta versión corrige los siguientes errores:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Banda 1" + +#, fuzzy +#~ msgid "Many translation updates" +#~ msgstr "Traducciones actualizadas" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Hay disponible un nuevo ajuste que permite al usuario seleccionar un " +#~ "tiempo de inactividad para la tubería. Cuando ningún cliente está " +#~ "reproduciendo" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "o grabando desde nuestros dispositivos, los filtros se desconectarán una " +#~ "vez alcanzado el tiempo de espera. Esto se hace para asegurarse de que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "no desperdiciamos la potencia de la CPU procesando silencio." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "El plugin de ganancia automática ahora permite al usuario seleccionar " +#~ "cuál de los tres tipos de sonoridad se utiliza para calcular" + +#~ msgid "mean." +#~ msgstr "la media geométrica." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "El plugin de ganancia automática ahora permite establecer el historial " +#~ "máximo y ya no utiliza el modo histograma `libebur128`." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Esto debería evitar los casos en los que la sonoridad `Integrada` se " +#~ "quedaba bloqueada indefinidamente en el mismo valor." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "El icono de EasyEffects ha sido actualizado de forma que debería ser " +#~ "visible en los escritorios QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta versión corrige el siguiente error:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "La opción de línea de comandos que retorna el estado de bypass global " +#~ "vuelve a funcionar." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esta versión añade la siguiente funcionalidad:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "El filtro de alimentación cruzada debería lidiar mejor con la gestión de " +#~ "latencia dinámica de PipeWire. Ya no deberían producirse cambios bruscos " +#~ "en el nivel de volumen en estas situaciones." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Se ha corregido un error que impedía que los micrófonos mono funcionaran " +#~ "correctamente con EasyEffects" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Soporte para la próxima versión `0.3.44` de PipeWire" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "El filtro de alimentación cruzada debería lidiar mejor con la gestión de " +#~ "latencia dinámica de PipeWire. Ya no deberían producirse cambios bruscos " +#~ "en el nivel de volumen en estas situaciones." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Hemos añadido una opción que permite restablecer el volumen y el estado " +#~ "de silencio de nuestros dispositivos virtuales cuando se inicia " +#~ "EasyEffects. Esto debería ayudar en los casos en que nuestros " +#~ "dispositivos son silenciados por el servidor de audio por razones " +#~ "desconocidas." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Se ha mejorado el soporte para la suspensión del ordenador." + +#~ msgid "Updated translations" +#~ msgstr "Traducciones actualizadas" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Se ha corregido un error que causaba que la aplicación se bloqueara al " +#~ "intentar crear un perfil de carga automática que no disponía de " +#~ "preajustes." + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "Se ha corregido un error por el que el ajuste de la `calidad` de una " +#~ "banda del ecualizador a `cero` provocaba un bloqueo de la aplicación." + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "Se hace uso de LibAdwaita para crear algunas partes de nuestra ventana y " +#~ "para manejar el cambio entre temas oscuros y claros." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "" +#~ "El menú de ajustes ha sido rediseñado utilizando widgets de LibAdwaita." + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "Se ha mejorado la función de importación de perfiles del ecualizador APO " +#~ "para aplicar no sólo el filtro Bell, sino también otros compatibles" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "La función `Restablecer todos los ajustes` de nuestro menú debería " +#~ "funcionar ahora en Flatpak." + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "Tenemos una nueva opción `ocultar automáticamente`que permite al usuario " +#~ "desactivar nuestros menús . Esto puede ayudar a solucionar algunos " +#~ "errores que los menús Popover tienen actualmente en gtk4." + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "Un análisis más robusto para importar perfiles APO guardados con una coma " +#~ "como separador de miles en la banda de frecuencia central." + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "La biblioteca fmt es una nueva dependencia, al menos mientras los " +#~ "compiladores de c++ no implementen sus características. Se espera que " +#~ "esto ocurra en los próximos años." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM y GLIBMM ya no son dependencias. Ahora usamos gtk4 directamente." + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "Ahora es posible combinar respuestas a impulsos en la interfaz del " +#~ "convolucionador. Un nuevo archivo de respuesta a impulsos es generado y " +#~ "debe ser visible en la lista de respuestas a impulsos." + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "Se ha mejorado el diseño del `eje x`en nuestros gráficos. Ahora el número " +#~ "de etiquetas se ajusta dinámicamente en función del ancho de la ventana." + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "La documentación se ha actualizado para reflejar las nuevas " +#~ "características de EasyEffects. Se han eliminado las antiguas referencias " +#~ "sobre PulseEffects. Se ha añadido al menú el botón de documentación." + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "Cuando se introduce un valor fuera de rango a un spinbutton, ahora se " +#~ "actualiza con el valor más bajo o más alto en lugar de restablecerse al " +#~ "valor previo." + +#~ msgid "" +#~ "The application window now remembers the maximized state and restores it " +#~ "on the next opening event." +#~ msgstr "" +#~ "La ventana principal ahora recuerda el estado maximizado y lo restaura " +#~ "cuando se abre de nuevo." + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "La biblioteca `tbb` es una nueva dependencia" + +#~ msgid "" +#~ "The Limiter and the Multiband Compressor plugins can now use an optional " +#~ "external sidechain." +#~ msgstr "" +#~ "Los plugins Limitador y Compresor multibanda ahora pueden utilizar una " +#~ "cadena lateral externa opcional." + +#~ msgid "" +#~ "The Autogain plugin now allows the user to select which Loudness is used " +#~ "as reference for the volume correction." +#~ msgstr "" +#~ "El plugin de ganancia automática ahora permite al usuario seleccionar el " +#~ "tipo de sonoridad a usar como referencia en la corrección de volumen." + +#~ msgid "" +#~ "The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +#~ "Amplification\" parameter." +#~ msgstr "" +#~ "La función de importación de perfiles APO del plugin Ecualizador ahora " +#~ "analiza el parámetro \"PreAmplificación\"." + +#~ msgid "Optional Cubic Volume can be enabled in General Settings." +#~ msgstr "" +#~ "El volumen cúbico puede activarse de forma opcional en la configuración " +#~ "general." + +#~ msgid "" +#~ "PipeWire monitor streams are now excluded and removed from the " +#~ "applications list." +#~ msgstr "" +#~ "Los flujos de monitorización de PipeWire están ahora excluidos y " +#~ "eliminados de la lista de aplicaciones." + +#~ msgid "Hopefully crashes like the one reported at [1172]( are fixed." +#~ msgstr "" +#~ "Esperamos que los fallos como el reportado en [1172]( se han solucionado." + +#~ msgid "Prevented a case in which Spectrum was crashing." +#~ msgstr "" +#~ "Se ha corregido un caso en el que el visualizador de espectro se " +#~ "bloqueaba." + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "Pavucontrol ya no se añade a la lista de aplicaciones de entrada en los " +#~ "sistemas con localización diferente a la inglesa." + +#~ msgid "" +#~ "Improved compatibility with WirePlumber. This is needed to run on systems " +#~ "that decided to use it instead of the" +#~ msgstr "" +#~ "Se ha mejorado la compatibilidad con WirePlumber. Esto es necesario para " +#~ "que funcione en los sistemas que decidieron utilizarlo en lugar del" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "gestor de sesiones de PipeWire integrado. Más información en [1144](" + +#~ msgid "" +#~ "When trying to add an autoloading profile for a device already in the " +#~ "list its target preset will be updated. This way we can change the " +#~ "profile preset without having to remove and recreating it." +#~ msgstr "" +#~ "Al intentar añadir un perfil de carga automática para un dispositivo que " +#~ "ya está en la lista se actualizará su perfil de destino. De esta manera " +#~ "podemos modificar los ajustes del perfil sin tener que eliminarlo y " +#~ "volver a crearlo." + +#~ msgid "" +#~ "The preset autoloading support implementation was redesigned again. It " +#~ "should work on more hardware now. For more information see issue [1051](" +#~ msgstr "" +#~ "Se ha rediseñado de nuevo la implementación del soporte de carga " +#~ "automática de perfiles. Ahora debería funcionar en un conjunto mayor de " +#~ "hardware. Consultar [1051]( para más información" + +#~ msgid "" +#~ "If the Limiter or the Maximizer are set in the last position of the " +#~ "plugin stack, new plugins are added at the second to last position in " +#~ "order to prevent hardware damage on eventually high output level." +#~ msgstr "" +#~ "Si el Limitador o el Maximizador se colocan en la última posición de la " +#~ "pila de plugins, los nuevos plugins se añaden en la penúltima posición " +#~ "con el fin de evitar la posibilidad de que el hardware se dañe por un " +#~ "nivel de salida eventualmente alto." + +#~ msgid "" +#~ "Removing an application from the blocklist, its previous enabled state is " +#~ "restored." +#~ msgstr "" +#~ "Al eliminar una aplicación de la lista de aplicaciones bloqueadas, se " +#~ "restablece su estado anterior de activación." + +#~ msgid "" +#~ "Sometimes when removing imported models from the noise reduction plugin " +#~ "the current used model was not properly updated. This should be fixed now." +#~ msgstr "" +#~ "En ocasiones, al eliminar los modelos importados del plugin de reducción " +#~ "de ruido, el modelo en uso no se actualizaba correctamente. Esto debería " +#~ "estar solucionado ahora." + +#~ msgid "" +#~ "When editing presets files in an external editor, duplicated entries " +#~ "won't be shown in our presets menu." +#~ msgstr "" +#~ "Al editar archivos de perfiles en un editor externo, las entradas " +#~ "duplicadas no se mostrarán en el menú de perfiles." + +#~ msgid "Now the blocklist is correctly set when switching presets." +#~ msgstr "" +#~ "Ahora la lista de aplicaciones bloqueadas se ajusta correctamente al " +#~ "cambiar de perfil." + +#~ msgid "" +#~ "Now the status of the global bypass button is correctly updated when " +#~ "changing plugin stack." +#~ msgstr "" +#~ "Ahora el estado del botón de bypass global se actualiza correctamente al " +#~ "modificarse la pila de plugins." + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Los iconos no disponibles en el sistema no deberían mostrarse en la " +#~ "interfaz de información de la aplicación" + +#~ msgid "" +#~ "Some icons not showing in Plasma DE with Breeze icon theme should appear " +#~ "now." +#~ msgstr "" +#~ "Algunos iconos que no se mostraban en el escritorio Plasma con el tema de " +#~ "iconos Breeze deberían ser visibles ahora." + +#~ msgid "Updated Chinese translation." +#~ msgstr "Traducción al chino actualizada." + +#~ msgid "Updated Italian translation." +#~ msgstr "Traducción al italiano actualizada." + +#~ msgid "Added support for the compressor parameter `Boost Amount`" +#~ msgstr "" +#~ "Se ha añadido soporte para el parámetro del compresor `Cantidad de " +#~ "refuerzo`" + +#~ msgid "" +#~ "The multiband compressor plugin now uses the stereo multiband compressor " +#~ "plugin from Linux Studio Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "El plugin de compresión multibanda ahora utiliza el plugin de compresión " +#~ "multibanda estéreo de Linux Studio Plugins, en lugar del de Calf Studio." + +#~ msgid "" +#~ "The limiter plugin now uses the stereo limiter plugin from Linux Studio " +#~ "Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "El plugin del limitador ahora utiliza el plugin del limitador estéreo de " +#~ "Linux Studio Plugins, en lugar del de Calf Studio." + +#~ msgid "" +#~ "LV2 filters now are spawned in PipeWire graph only when loaded the first " +#~ "time. Once loaded, they remain connected until EasyEffects shutdown." +#~ msgstr "" +#~ "Los filtros LV2 ahora se generan en el diagrama de PipeWire sólo cuando " +#~ "se cargan por primera vez. Una vez cargados, permanecen conectados hasta " +#~ "el cierre de EasyEffects." + +#~ msgid "The echo canceller sampling rate is now properly set." +#~ msgstr "" +#~ "La tasa de muestreo del plugin de cancelación de eco está ahora " +#~ "correctamente ajustada." + +#~ msgid "" +#~ "The threshold parameter from the deesser plugin is now saved to the " +#~ "preset file." +#~ msgstr "" +#~ "El parámetro umbral del plugin deesser se guarda ahora en el archivo de " +#~ "perfil." + +#~ msgid "" +#~ "Improved band splitting for crystalizer with new default intensity values." +#~ msgstr "" +#~ "Mejorada la división de bandas para el cristalizador con nuevos valores " +#~ "de intensidad por defecto." + +#~ msgid "" +#~ "Depending on the input gain or output gain values the corresponding level " +#~ "bars could not be aligned." +#~ msgstr "" +#~ "Dependiendo de los valores de la ganancia de entrada y de salida, las " +#~ "barras de nivel correspondientes podrían no alinearse correctamente." + +#~ msgid "" +#~ "When adding more equalizer bands they are set to `Bell` instead of `Off`." +#~ msgstr "" +#~ "Cuando se añaden nuevas bandas de ecualización se les asigna la modalidad " +#~ "`Campana` en lugar de `Apagado`." + +#~ msgid "" +#~ "Equalizer APO presets loading is now working properly on locales " +#~ "different than C." +#~ msgstr "" +#~ "La carga de los perfiles del ecualizador APO ahora funciona correctamente " +#~ "en localizaciones diferentes a C." + +#~ msgid "Improved linking management between port filter nodes in PipeWire." +#~ msgstr "" +#~ "Se ha mejorado la gestión de las conexiones entre puertos de nodos en " +#~ "PipeWire." + +#~ msgid "" +#~ "The crystalizer plugin signal amplification was too high before. It " +#~ "should be within more reasonable levels now." +#~ msgstr "" +#~ "La amplificación de la señal del plugin del cristalizador era demasiado " +#~ "alta antes. Ahora debería estar dentro de niveles más razonables." + +#~ msgid "" +#~ "Improved the resampler used in the plugins that require one(like the " +#~ "rnnoise plugin)" +#~ msgstr "" +#~ "Se ha mejorado el remuestreador (resampler) utilizado en los plugins que " +#~ "lo requieren (como el plugin rnnoise)" + +#~ msgid "Setting multiple autoloading presets should be fine now" +#~ msgstr "" +#~ "La configuración de múltiples perfiles de autocarga debería funcionar " +#~ "ahora correctamente" + +#~ msgid "Transient windows are now properly set for some plugins dialogs" +#~ msgstr "" +#~ "Las ventanas transitorias están ahora correctamente configuradas para " +#~ "algunos diálogos de plugins" + +#~ msgid "" +#~ "The convolver impulse response menu was improved to workaround an issue " +#~ "where the impulse files was not loaded when only one was available in the " +#~ "menu" +#~ msgstr "" +#~ "Se ha mejorado el menú de respuesta a impulsos del convolucionador. Esto " +#~ "tiene como fin solucionar un problema que causaba que no se cargaran los " +#~ "archivos de respuesta a impulsos cuando sólo había uno disponible en el " +#~ "menú" + +#~ msgid "" +#~ "Fixed a bug that could make the pitch plugin to not be properly " +#~ "initialized" +#~ msgstr "" +#~ "Se ha corregido un error que podía hacer que el plugin de tonalidad " +#~ "(pitch) no se inicializara correctamente" + +#~ msgid "" +#~ "The saturation warning should not displace its neighbor widgets anymore" +#~ msgstr "El aviso de saturación ahora no desplaza a los widgets adyacentes" + +#~ msgid "Fixed the locale in a few widgets" +#~ msgstr "Se ha corregido la configuración regional en algunos widgets" + +#~ msgid "Fixed wrong alignment in a few widgets" +#~ msgstr "Se ha corregido la alineación incorrecta de algunos widgets" + +#~ msgid "" +#~ "The Loudness plugin is being used again for the reasons described at This " +#~ "means that is an optional dependency again." +#~ msgstr "" +#~ "El plugin Loudness es usado de nuevo por las razones descritas. Esto " +#~ "implica que es una dependencia opcional de nuevo." + +#~ msgid "" +#~ "Fixed a segmentation fault that happened when optional dependencies were " +#~ "not installed" +#~ msgstr "" +#~ "Se ha corregido un fallo de segmentación que ocurría cuando no se " +#~ "instalaban las dependencias opcionales" + +#~ msgid "Improved equalizer interface." +#~ msgstr "Se ha mejorado la interfaz del ecualizador." + +#~ msgid "" +#~ "Now we use a sidechain LSP compressor that allows the user to select and " +#~ "external source as the sidechain input." +#~ msgstr "" +#~ "Ahora se hace uso de un compresor LSP de cadena lateral que permite al " +#~ "usuario seleccionar una fuente externa como entrada para la cadena " +#~ "lateral." + +#~ msgid "We now support the LSP compressor `Boosting` mode." +#~ msgstr "" +#~ "Agregado soporte para el nuevo modo`Refuerzo` (`Boosting`) del compresor " +#~ "LSP." + +#~ msgid "" +#~ "When `split-channels` is enabled in the equalizer the imported APO preset " +#~ "will be applied only to the channel being visualized in the window. This " +#~ "will allow to import different presets for each channel instead of just " +#~ "settings the same values to both." +#~ msgstr "" +#~ "Cuando se activa la opción de \"dividir canales\" del ecualizador, el " +#~ "perfil APO importado se aplicará sólo al canal que se visualiza " +#~ "actualmente en la ventana. Esto permite importar diferentes perfiles para " +#~ "cada canal, en lugar de asignar los mismos valores para ambos." + +#~ msgid "" +#~ "Fixed some segmentation faults that could happen when creating a preset " +#~ "autoloading profile or removing presets" +#~ msgstr "" +#~ "Se han corregido algunos fallos de segmentación que podían producirse al " +#~ "crear o eliminar un perfil de carga automática" + +#~ msgid "" +#~ "This is one of the biggest releases that I have ever made. The amount of " +#~ "changes is so big that it is hard to talk about everything here." +#~ msgstr "" +#~ "Este es uno de los mayores lanzamientos que he hecho. El número de " +#~ "cambios es tan grande que es difícil describirlos todos aquí." + +#~ msgid "" +#~ "The following are just the most import ones. People interested on the " +#~ "journey that got us here can take" +#~ msgstr "" +#~ "A continuación se indican sólo los más importantes. Quien esté interesado " +#~ "en profundizar más puede echar" + +#~ msgid "a look at and" +#~ msgstr "un vistazo y" + +#~ msgid "" +#~ "The application and its repository have been renamed from PulseEffects to " +#~ "`EasyEffects`" +#~ msgstr "" +#~ "La aplicación y su repositorio han sido renombrados de PulseEffects a " +#~ "`EasyEffects`" + +#~ msgid "gtkmm3 was replaced by gtkmm4" +#~ msgstr "Se ha sustituido gtkmm3 por gtkmm4" + +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "Se ha sustituido Gstreamer por filtros nativos de PipeWire." + +#~ msgid "" +#~ "Many features were reimplemented from scratch. The preset autoloading is " +#~ "one example. Another remarkable change will be seen in the plugins " +#~ "selection menu. Now the user can show in the window only the plugins that " +#~ "he/she wants to use." +#~ msgstr "" +#~ "Muchas características se han reimplementado desde cero. La carga " +#~ "automática de perfiles es un ejemplo. Otro cambio notable se observa en " +#~ "el menú de selección de plugins. Ahora el usuario puede mostrar en la " +#~ "ventana sólo los plugins que desea utilizar." + +#~ msgid "" +#~ "Boost is no longer a dependency. The price paid for that was a little " +#~ "change in our presets structures. With some patience it is possible to " +#~ "edit PulseEffects presets in a text editor and make them work in " +#~ "EasyEffects. Hopefully someone will come up with a script for this in the " +#~ "feature." +#~ msgstr "" +#~ "Boost ya no es una dependencia. El precio a pagar por esto es un pequeño " +#~ "cambio en la estructura de nuestros perfiles. Con algo de paciencia, es " +#~ "posible editar los perfiles de PulseEffects en un editor de texto y " +#~ "hacerlos funcionar en EasyEffects. Con un poco de suerte puede que " +#~ "alguien cree un script para automatizar esto." + +#~ msgid "" +#~ "New libraries are being used and some of the librarires that were " +#~ "optional before are now required" +#~ msgstr "" +#~ "Se utilizan nuevas bibliotecas y algunas de las que antes eran opcionales " +#~ "ahora son requeridas" + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar predeterminado" + +#~ msgid "Remove this plugin" +#~ msgstr "Eliminar este plugin" + +#~ msgid "Import Presets" +#~ msgstr "Importar perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar el servicio en el inicio de sesión" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Restablecer el volumen de los dispositivos de EasyEffect al inicio" diff --git a/po/es_CO.po b/po/es_CO.po new file mode 100644 index 0000000..e003f76 --- /dev/null +++ b/po/es_CO.po @@ -0,0 +1,3574 @@ +# Spanish (CO) translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Pulseeffects package. +# CCaroV , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 14:07+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Spanish (Colombia) \n" +"Language: es_CO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ecualizador, Compresor y Otros Efectos de Sonido" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de audio paras las aplicaciones PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Perfiles\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Habilitar" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +#, fuzzy +msgid "Mute Application" +msgstr "Aplicaciones" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +#, fuzzy +msgid "Application Volume" +msgstr "Aplicaciones" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Ayuda" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Ajustes" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Perfiles" + +#: data/ui/application_window.ui:55 +#, fuzzy +msgid "Presets Menu" +msgstr "Perfiles" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Bypass Global" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Aplicaciones" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Paredes Vacías" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Aplicaciones" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Restablecer Historial" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Objetivo" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silencio" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Máximo" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentáneo" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Corto Plazo" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrado" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Volumen" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Reativo" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rango" + +#: data/ui/autogain.ui:378 +#, fuzzy +msgid "Output Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Entrada" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Salida" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Caudal de Salida" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Restablecer" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nombre" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Perfiles" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Remover preajuste de autocargar" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Escuchar" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mezclar Harmónicos" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3era" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2nda" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Cantidad" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmónicos" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Alcance" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Fondo" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Fondo" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Acoplar" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Aplicaciones" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Aplicaciones" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Aplicaciones" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Aplicaciones" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Cierra la ventana" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modo" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Hacia Abajo" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Hacia Arriba" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Modo de Compresión" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +#, fuzzy +msgid "Boost Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Cantidad" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Ataque" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +#, fuzzy +msgid "Time" +msgstr "Tiempo Real" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Ataque" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Liberar" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "Tiempo Real" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Radio" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Codo" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Amplificación" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "nivel seco" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Nivel húmedo" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Modo Estéreo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Fuente" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Medio" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Lado" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Izquierda" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Derecha" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Máximo" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Máximo" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Retraso Izquierda Derecha" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Derecha" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Lado" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Lado" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Fuente Predeterminada" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Pico" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipo" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Adelantar" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Realimentar" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Efectos de Entrada" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Pre-amplificación" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reactividad" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Atenuación" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "Pase Alto" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frecuencia" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Apagdo" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Paso Bajo" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Ganancia" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Pendiente" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Canales" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Dividir Canales" + +#: data/ui/convolver.ui:71 +#, fuzzy +msgid "Impulses" +msgstr "Respuesta de Impulse" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Amplitud Estéreo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Espectro" + +#: data/ui/convolver.ui:122 +#, fuzzy +msgid "Log Scale" +msgstr "Escala" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "AutoGain" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Tasa" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Muestras" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Duración" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Respuesta de Impulse" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importar Archivo Impulse" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Importar Archivo Impulse" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Importar Archivo Impulse" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Predeterminado" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Umbral" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Alimentar" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Derivación" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Silenciar" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detección" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Ancho" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Dividir" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "Dividir" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "Pico" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "Ganancia" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "Nivel" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "Pico Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Relajamiento" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detectado" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Reducción" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Retraso" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Invertir Fase" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Atenuación" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Cadena Lateral" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Cadena Lateral" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Dividir Canales" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Respuesta Plana" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calcular Frecuencias" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importar Preajuste" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pendiente" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Calidad" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Anchura" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Límite" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Modo" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Integrado" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +#, fuzzy +msgid "Description" +msgstr "Detección" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Borrar este perfil" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Estante Bajo" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Estante Alto" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Timbre" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Bypass" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Muesca" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonancia" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Paso Bajo" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Reducción" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Paso Bajo" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ecualizador" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Puerta de Ruido" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Tiempo Real" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frecuencia" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sobre Muestreo" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Ancho" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Ancho" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Ancho de Linea" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Ancho de Linea" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Mesa Sinusoidal" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ninguno" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Pre-amplificación" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Acoplamiento Estéreo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Cadena Lateral" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Ganancia Automática" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Ganancia" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Derecha" + +#: data/ui/limiter.ui:687 +#, fuzzy +msgid "Sidechain Left" +msgstr "Cadena Lateral" + +#: data/ui/limiter.ui:714 +#, fuzzy +msgid "Sidechain Right" +msgstr "Cadena Lateral" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +#, fuzzy +msgid "FFT Size" +msgstr "Tamaño del Marco" + +#: data/ui/loudness.ui:82 +#, fuzzy +msgid "Output Volume" +msgstr "Salida" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Mapa de Canales" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Límite" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Cadena Lateral" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +#, fuzzy +msgid "Operating Mode" +msgstr "Modo de Compresión" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +#, fuzzy +msgid "Modern" +msgstr "Modo" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Invertir Fase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +#, fuzzy +msgid "Bands List" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +#, fuzzy +msgid "Band 1" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +#, fuzzy +msgid "Band 2" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +#, fuzzy +msgid "Band 3" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +#, fuzzy +msgid "Band 4" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +#, fuzzy +msgid "Band 5" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +#, fuzzy +msgid "Band 6" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +#, fuzzy +msgid "Band 7" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +#, fuzzy +msgid "Band 8" +msgstr "Bandas" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +#, fuzzy +msgid "Band End" +msgstr "Bandas" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Modo de Compresión" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Bypass" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Modo Estéreo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Calcular Frecuencias" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtro de Pase Alto" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Calcular Frecuencias" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +#, fuzzy +msgid "Band Curve" +msgstr "Curva" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Reducción" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "General" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Usar Predeterminado" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Usar Predeterminado" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Reverberación" + +#: data/ui/pipe_manager_box.ui:116 +#, fuzzy +msgid "Header Version" +msgstr "Versión" + +#: data/ui/pipe_manager_box.ui:127 +#, fuzzy +msgid "Library Version" +msgstr "Versión" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Tasa de Muestreo por Defecto" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Ganancia Máxima" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Profundidad Predeterminda" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "Efectos de Salida" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +#, fuzzy +msgid "Output Presets" +msgstr "Perfiles de Dispositivos de Salida: " + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +#, fuzzy +msgid "Output Autoloading Presets List" +msgstr "Perfiles de Dispositivos de Salida: " + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "Efectos de Entrada" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +#, fuzzy +msgid "Input Presets" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:429 +#, fuzzy +msgid "Modules List" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:461 +#, fuzzy +msgid "Clients List" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:475 +#, fuzzy +msgid "Test Signal" +msgstr "Señal de Prueba" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Estado" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +#, fuzzy +msgid "Enabled" +msgstr "Habilitar" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canales" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +#, fuzzy +msgid "Both Channels" +msgstr "Canales" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Mesa Sinusoidal" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Ruido Blanco" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frecuencia" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Ventana" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filtro" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Tono" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitonos" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Borrar este perfil" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "Efectos" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +#, fuzzy +msgid "_General" +msgstr "General" + +#: data/ui/preferences_general.ui:10 +#, fuzzy +msgid "Service" +msgstr "Servidor" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Procesar Todas las Salidas" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Procesar Todas las Entradas" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Usar Tema Oscuro" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimental" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Cierra la ventana" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +#, fuzzy +msgid "_Spectrum" +msgstr "Espectro" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barras" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Lineas" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Puntos" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Altura" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Ancho de Linea" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Rellenar" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +#, fuzzy +msgid "Frequency Range" +msgstr "Frecuencia" + +#: data/ui/preferences_spectrum.ui:212 +#, fuzzy +msgid "Minimum" +msgstr "Máximo" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Máximo" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Guardar esta configuración a este perfil" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Guardar esta configuración a este perfil" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Borrar este perfil" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Crear Perfil" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Importar Preajuste" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Amortiguación de Alta Frecuencia" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Tamaño de la Habitación" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Pequeña" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Mediana" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Túnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/Liso" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difusión" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pre Retraso" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Tiempo de Decaimiento" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Corte de Bajos" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Corte de Sobreagudos" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiente" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Paredes Vacías" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Habitación" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Habitación Vacía Grande" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Habitación Ocupada Grande" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importar Modelo" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Detector de Voz" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modelos" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Modelo estándar" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "RNNoise Lista de Modelos" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Modelo activo" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Modelo estándar RNNoise" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Visión general" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Pantalla completa/Restaurar desde pantalla completa" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Cierra la ventana" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "Salir de EasyEffects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Ruido Rojo" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Regulador de Ganancia" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Reverberación" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Nivel" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Balance de insumos" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Clip Suave" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Nivel del Clip Suave" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matriz Estéreo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Estéreo Predeterminado)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Estéreo hacia Medio Lado)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Medio Lado - Estéreo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Canal Izquierdo Mono)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Canal Derecho Mono)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Suma Mono L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Intercambiar Canales)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Modo Estéreo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Nivel Lateral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balance Lateral" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Nivel Medio" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama Medio" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Balance de producción" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Retraso L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Retraso Izquierda Derecha" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base Estéreo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fase Estéreo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "Corriendo" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Suspendido" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Inactivo" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Creando" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Error" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Desconocido" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "canales" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" +"Salir de EasyEffects. Útil cuando se está ejecutando en modo de servicio." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Cargar un perfil. Ejemplo: easyeffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Restablecer EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Oculta la ventana." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Bypass global, 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +"estado" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Mostrar perfiles disponibles." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Salida" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Entrada" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Importar Archivo Impulse" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importar impulso de archivo" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Abrir" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Respuesta de Impulse" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Cargar impulso" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Remover impulso" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Importar Archivo Impulse" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "No se pudo encontrar el archivo Impulse" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "grabadoras" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Jugadores" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Efectos" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importar archivo de preajuste APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Preajustes APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Importar archivo de preajuste APO" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Remover preajuste de autocargar" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Efectos de Salida" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Efectos de Salida" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Añadir" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importar archivo modelo" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Modelos RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "potenciador de graves" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "sonoridad de graves" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "enrevesado" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristalizador" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "DeEsser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Cancelador de Eco" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ecualizador" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitador" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Efectos de Salida" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limitador" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizador" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compresor Multibanda" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Puerta Multibanda" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Reverberación" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Reducción de ruido" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Herramientas Estéreo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de Pase Alto" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "infinity" +#~ msgstr "infinidad" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Radio" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Pase Alto" + +#~ msgid "Gating" +#~ msgstr "Puerta" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Paso Bajo" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Paso Bajo" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Paso Bajo" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Pase Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Pase Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Pase Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Paso de Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Paso de Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Paso de Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rechazo de Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rechazo de Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rechazo de Banda" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Tipo" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendiente" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Volumen" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Estante Alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidad" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formato" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Frescura" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Clip Suave" + +#~ msgid "Cents" +#~ msgstr "Acentos" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Abrir el manual de EasyEffects" + +#~ msgid "High Pass" +#~ msgstr "Pase Alto" + +#~ msgid "Low Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Pre Retraso" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Dividir Canales" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "nivel seco" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "nivel seco" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Nivel húmedo" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Nivel húmedo" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Nivel de Supresión" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de audio para aplicaciones PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Reducción de ruido" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Low Band" +#~ msgstr "Banda Baja" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Wet Amount" +#~ msgstr "Cantidad húmeda" + +#~ msgid "Dry Amount" +#~ msgstr "Gran cantidad" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects es una herramienta avanzada de manipulación de audio. Incluye " +#~ "un ecualizador, limitador, compresor y una herramienta de reverberación, " +#~ "solo por mencionar algunos. Para complementar esto también hay un " +#~ "analizador de espectro incorporado." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects es el sucesor de PulseEffects. EasyEffects solo admite el " +#~ "servidor de audio de PipeWire. Los usuarios de PulseAudio deben usar " +#~ "PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Debido a que EasyEffects utiliza el servidor de sonido PipeWire " +#~ "predeterminado, funcionará con la mayoría, si no todas, las aplicaciones " +#~ "que utilice. Todas las aplicaciones soportadas se presentan en la ventana " +#~ "principal, donde cada una se puede habilitar individualmente." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Además de manipular el sonido de salida, EasyEffects puede aplicar " +#~ "efectos a dispositivos de entrada, como micrófonos. Esto es útil, por " +#~ "ejemplo, en la grabación de audio, pero también funciona correctamente " +#~ "durante conversaciones de voces." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Cuando EasyEffects esté activo este convenientemente recordará la " +#~ "configuración usada en la última sesión. También es posible guardar la " +#~ "configuración actual como un perfil." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "La página principal que muestra dos aplicaciones de salida de audio" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "" +#~ "La página de potenciador de graves que muestra los controles de audio" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "La página convolver que muestra los controles de audio" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta versión añade las siguientes características:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Esta versión corrige los siguientes errores:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Many translation updates" +#~ msgstr "Traducciones actualizadas" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Hay una nueva configuración que permite al usuario seleccionar un tiempo " +#~ "de inactividad para la canalización. Cuando no se reproduce ningún cliente" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "desde nuestros dispositivos, los filtros se desvincularán después de que " +#~ "se alcance el tiempo de espera. Esto se hace para asegurarse de que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "" +#~ "no desperdiciamos el silencio de procesamiento de energía de la CPU." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "El plugin autogain ahora permite al usuario seleccionar cuál de las tres " +#~ "sonoridades se utilizan para calcular la geométrica" + +#~ msgid "mean." +#~ msgstr "medida." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "El plugin autogain ahora permite establecer el historial máximo y ya no " +#~ "usa el modo `libebur128` histograma." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Esto debe evitar los casos en los que el `Integrated` loudness se queda " +#~ "atascado para siempre en el mismo valor." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "El icono de EasyEffects se ha actualizado de una manera que debería " +#~ "hacerlo visible en los escritorios QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta versión corrige el siguiente error:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "La opción de línea de comandos que devuelve el estado de derivación " +#~ "global está funcionando de nuevo." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esta versión incluye las siguientes novedades:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "El filtro de crossfeed debería tratar mejor con los interruptores de " +#~ "latencia dinámica de PipeWire. Los saltos en el nivel de volumen ya no " +#~ "deberían ocurrir en estas situaciones." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Corregido un error que impedía que los micrófonos mono funcionaran " +#~ "correctamente con EasyEffects" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Soporte para la próxima versión de PipeWire `0.3.44`" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "El filtro de autogain debe tratar mejor con los interruptores de latencia " +#~ "dinámica de PipeWire. Los saltos en el nivel de volumen ya no deberían " +#~ "ocurrir en estas situaciones." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Hemos añadido una opción que permite restablecer el volumen y el estado " +#~ "de silencio de nuestros dispositivos virtuales cuando se inicie " +#~ "EasyEffects. Debería ayudar con los casos en los que nuestros " +#~ "dispositivos son silenciados por el servidor de audio por razones " +#~ "desconocidas." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Mejor soporte para la suspensión de la computadora." + +#~ msgid "Updated translations" +#~ msgstr "Traducciones actualizadas" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Se ha corregido un error por el que al intentar crear un perfil de carga " +#~ "automática sin tener ajustes preestablecidos la aplicación se bloqueaba." + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "se ha Corregido un error donde el establecimiento de una banda de " +#~ "ecualizador `calidad` a `cero` daría lugar a un accidente de aplicación." + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita se utiliza para crear algunas partes de nuestra ventana y para " +#~ "manejar el cambio entre temas oscuros y claros." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "" +#~ "El menú de configuración ha sido rediseñado usando los widgets de " +#~ "LibAdwaita." + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "Ecualizador APO función de importación preestablecida se ha mejorado para " +#~ "aplicar no solo el filtro de Bell, sino también otros soportados" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "La función `Reiniciar todas las configuraciones` de nuestro menú debería " +#~ "funcionar ahora en Flatpak." + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "Tenemos una nueva opción que permite al usuario deshabilitar nuestros " +#~ "menús `autohide`. Esto puede ayudar a solucionar algunos errores que los " +#~ "menús Popover tienen actualmente en gtk4." + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "Análisis más robusto para importar preajustes APO guardados con coma como " +#~ "separador de miles en banda de frecuencia central." + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "La biblioteca fmt es una nueva dependencia Al menos mientras los " +#~ "compiladores de c++ no implementan sus características. Se espera que " +#~ "esto suceda en los próximos años." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM y GLIBMM ya no son una dependencia. Ahora usamos gtk4 directamente." + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "Ahora es posible combinar respuestas de impulso en la interfaz Convolver. " +#~ "Se genera un nuevo archivo de impulso y debe ser visible en la lista de " +#~ "impulsos." + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "Dibujos `x ejes` mejorados en nuestras gráficas. Ahora el número de " +#~ "etiquetas se ajusta dinámicamente dependiendo del ancho de nuestra " +#~ "ventana." + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "La documentación se ha actualizado para reflejar las nuevas " +#~ "características de EasyEffects. Se han eliminado las referencias antiguas " +#~ "sobre PulseEffects. El botón de documentación se ha añadido en la sección " +#~ "de menú." + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "Cuando un spinbutton se llena con un valor fuera de rango, ahora se " +#~ "actualiza con el valor más bajo/ más alto en lugar de reinicializar al " +#~ "anterior." + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Borrar este perfil" + +#~ msgid "Import Presets" +#~ msgstr "Importar Perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar Servicio al Iniciar Sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Lista Negra" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrar Micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "Faster" +#~ msgstr "Más Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar Formato" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Color Personalizado" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Degradado" + +#~ msgid "Spectrum Color" +#~ msgstr "Color del Espectro" + +#~ msgid "Gradient Color" +#~ msgstr "Color del Degradado" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Exponent" +#~ msgstr "Exponente" + +#~ msgid "Sampling" +#~ msgstr "Muestreo" + +#~ msgid "Block Size" +#~ msgstr "Tamaño de Bloque" + +#~ msgid "Pipeline Input" +#~ msgstr "Caudal de Entrada" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Niceness" +#~ msgstr "Meticulosidad" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridad" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Priority" +#~ msgstr "Prioridad" + +# Resampler does not have an official translation +#~ msgid "Resampler" +#~ msgstr "Remuestreador" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Muestreo Predeterminado" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +# Resamplers does not have an official translation +#~ msgid "Resamplers" +#~ msgstr "Remuestreadores" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silencio" + +#~ msgid "-23" +#~ msgstr "-23" + +#~ msgid "Weights" +#~ msgstr "Fuerza" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Silenciado" + +#~ msgid "Distant Headphones" +#~ msgstr "Audífonos a Distancia" + +#~ msgid "Reset Equalizer" +#~ msgstr "Restablecer Ecualizador" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Dry" +#~ msgstr "Secar" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar Archivo de Respuesta Impulse" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione el Archivo de Respuesta Impulse" + +#~ msgid "Loudness Range" +#~ msgstr "Rango de Sonoridad" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Después" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Extendido" + +#~ msgid "Delay Agnostic" +#~ msgstr "Retraso Agnóstico" + +#~ msgid "Low" +#~ msgstr "Bajo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#~ msgid "Very High" +#~ msgstr "Muy Alto" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptado Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Arreglo Digital" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidad de Detección" + +#~ msgid "Very Low" +#~ msgstr "Muy Bajo" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automáticamente aplicar este perfil siempre que el dispositivo actual " +#~ "esté conectado" + +#~ msgid "Volume" +#~ msgstr "Volumen" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cuadrado" + +#~ msgid "Saw" +#~ msgstr "Sierra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Pink Noise" +#~ msgstr "Ruido Rosa" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruido Gaussiano" + +#~ msgid "Blue Noise" +#~ msgstr "Ruido Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruido Violeta" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruido" + +#~ msgid "Subtract Noise" +#~ msgstr "Reducir Ruido" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Establecer el volumen y encender/apagar los efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Incluye un ecualizador con perfiles incluidos" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "reproduciendo" diff --git a/po/es_MX.po b/po/es_MX.po new file mode 100644 index 0000000..ed12640 --- /dev/null +++ b/po/es_MX.po @@ -0,0 +1,3319 @@ +# Spanish (MX) translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Pulseeffects package. +# CCaroV , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 14:07+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Spanish (Mexico) \n" +"Language: es_MX\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ecualizador, Compresor y Otros Efectos de Sonido" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de audio para aplicaciones PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Perfiles\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Habilitar/deshabilitar esta aplicación" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Habilitar" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Lista Aplicaciones Excluidas: Agregar/Quitar esta aplicación" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Excluir" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Silenciar Aplicación" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Cambiar el volumen de esta aplicación" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Volumen de la Aplicación" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Ayuda" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Ajustes" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "Preferencias" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Perfiles" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menú de Perfiles" + +#: data/ui/application_window.ui:62 +#, fuzzy +msgid "Enable/disable the global bypass" +msgstr "Habilitar/Deshabilitar" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Bypass Global" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menú Principal" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Aplicaciones" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Paredes Vacías" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Sin Aplicaciones de Audio Disponibles" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Restablecer Historial" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Objetivo" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silencio" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Máximo" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentáneo" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Corto Plazo" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrado" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Usar la Media Geométrica (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Usar la Media Geométrica (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Usar la Media Geométrica (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Usar la Media Geométrica (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Loudness" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Reativo" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rango" + +#: data/ui/autogain.ui:378 +#, fuzzy +msgid "Output Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Entrada" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Salida" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Caudal de Salida" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Restablecer" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Dispositivo" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nombre" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Perfil" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Perfiles" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Borrar este perfil" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Escuchar" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mezclar Harmónicos" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3era" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2nda" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Cantidad" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmónicos" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Alcance" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Fondo" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Valor del Fondo" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Acoplar" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Nombre de Aplicación" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Añadir a Aplicaciones Excluidas" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Aplicaciones Excluidas" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Mostrar Aplicaciones Excluidas" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Mostrar Ventana Nativa" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modo" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Hacia Abajo" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Hacia Arriba" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Modo de Compresión" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +#, fuzzy +msgid "Boost Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Cantidad" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Ataque" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +#, fuzzy +msgid "Time" +msgstr "Tiempo Real" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Ataque" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Liberar" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Tiempo decaimiento" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Radio" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Codo" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Amplificación" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Nivel" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Nivel Objetivo" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Base Estéreo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Fuente" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Medio" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Lado" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Izquierda" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Derecha" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Máximo" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Máximo" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Retraso L/R" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Derecha" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Lado" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Lado" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Fuente Predeterminada" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Pico" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Cadena Lateral Externa" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipo" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Adelantar" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Realimentar" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Efectos de Entrada" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Pre-amplificación" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reactividad" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Atenuación" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "Pase Alto" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frecuencia" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Apagdo" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Paso Bajo" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Ganancia" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Pendiente" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Canales" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Dividir Canales" + +#: data/ui/convolver.ui:71 +#, fuzzy +msgid "Impulses" +msgstr "Respuesta de Impulse" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Amplitud Estéreo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Espectro" + +#: data/ui/convolver.ui:122 +#, fuzzy +msgid "Log Scale" +msgstr "Escala" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +#, fuzzy +msgid "Autogain" +msgstr "Ganancia Automática" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Tasa" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Muestras" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Duración" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Respuesta de Impulse" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importar Archivo Impulse" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Importar Archivo Impulse" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Importar Archivo Impulse" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Predeterminado" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Umbral" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Alimentar" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Bypass" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Silenciar" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detección" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Ancho" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Dividir" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "Dividir" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "Pico" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "Ganancia" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "Nivel" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "Pico Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Relajamiento" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detectado" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Reducción" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Retraso" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Invertir Fase" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Atenuación" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Cadena Lateral" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Cadena Lateral" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Dividir Canales" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Respuesta Plana" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calcular Frecuencias" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +#, fuzzy +msgid "Import Preset" +msgstr "Importar Perfiles" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pendiente" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Calidad" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Anchura" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Límite" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Modo" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Integrado" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +#, fuzzy +msgid "Description" +msgstr "Detección" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Borrar este perfil" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Estante Bajo" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Estante Alto" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Timbre" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Bypass" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Muesca" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonancia" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Paso Bajo" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Reducción" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Paso Bajo" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ecualizador" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Puerta de Ruido" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Tiempo Real" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frecuencia" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sobre Muestreo" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Ancho" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Ancho" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Ancho de Linea" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Ancho de Linea" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Mesa Sinusoidal" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ninguno" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Pre-amplificación" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Acoplamiento Estéreo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Cadena Lateral Externa" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Ganancia Automática" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Ganancia Izquierda" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Ganancia Derecha" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Cadena Lateral Izquierda" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Cadena Lateral Derecha" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Estándar" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Plano" + +#: data/ui/loudness.ui:58 +#, fuzzy +msgid "FFT Size" +msgstr "Tamaño del Marco" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Volumen de Salida" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Mapa de Canales" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Límite" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Cadena Lateral" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Modo de Operación" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Clásico" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +#, fuzzy +msgid "Modern" +msgstr "Modo" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Invertir Fase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Banda 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Banda 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Banda 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Banda 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Banda 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Banda 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Banda 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Banda 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Inicio de banda" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Final de banda" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Modo de Compresión" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Bypass" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Base Estéreo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Calcular Frecuencias" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtro de Pase Alto" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Calcular Frecuencias" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "Preamplificador" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +#, fuzzy +msgid "Band Curve" +msgstr "Curva" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Reducción" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "General" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Usar Predeterminado" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Usar Predeterminado" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Reverberación" + +#: data/ui/pipe_manager_box.ui:116 +#, fuzzy +msgid "Header Version" +msgstr "Versión" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Versión librerías" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Tasa de Muestreo por Defecto" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Ganancia Máxima" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Profundidad Predeterminda" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "Efectos de Salida" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Perfiles de Dispositivos de Salida" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Perfiles de Dispositivos de Salida" + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "Efectos de Entrada" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Perfiles de Dispositivos de Entrada" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Añadir perfil autocargado" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Perfiles de Dispositivos de Entrada" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Lista de módulos" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Lista de clientes" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Señal de prueba" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Estado" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Habilitado" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Propiedades" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canales" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Ambos" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Ambos canales" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Forma de onda" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Mesa Sinusoidal" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Ruido Blanco" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frecuencia" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Ventana" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filtro" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Tono" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitonos" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Borrar este perfil" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Añadir efecto" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +#, fuzzy +msgid "_General" +msgstr "General" + +#: data/ui/preferences_general.ui:10 +#, fuzzy +msgid "Service" +msgstr "Servidor" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Lanzar el servicio al arranque" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Apagar al cerrar la ventana" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Procesar Todas las Salidas" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Procesar Todas las Entradas" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Usar Tema Oscuro" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimental" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Mostrar Ventana Nativa" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +#, fuzzy +msgid "_Spectrum" +msgstr "Espectro" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Forma" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barras" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Lineas" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Puntos" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Altura" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Ancho de Linea" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Rellenar" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +#, fuzzy +msgid "Frequency Range" +msgstr "Frecuencia" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Mínimo" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Máximo" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Guardar esta configuración a este perfil" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Guardar esta configuración a este perfil" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Borrar este perfil" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Crear Perfil" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Importar Perfiles" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Amortiguación de Alta Frecuencia" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Tamaño de la Habitación" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Pequeña" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Mediana" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Túnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/Liso" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difusión" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pre Retraso" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Tiempo de Decaimiento" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Corte de Bajos" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Corte de Sobreagudos" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiente" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Paredes Vacías" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Habitación" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Habitación Vacía Grande" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Habitación Ocupada Grande" + +#: data/ui/rnnoise.ui:31 +#, fuzzy +msgid "Import Model" +msgstr "Importar Archivo Impulse" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Detector de Voz" + +#: data/ui/rnnoise.ui:153 +#, fuzzy +msgid "Models" +msgstr "Modo" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +#, fuzzy +msgid "Active Model" +msgstr "Modo Agresivo" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "EasyEffects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Ruido Rojo" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Regulador de Ganancia" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Reverberación" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Nivel" + +#: data/ui/stereo_tools.ui:79 +#, fuzzy +msgid "Input Balance" +msgstr "Balance" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Clip Suave" + +#: data/ui/stereo_tools.ui:116 +#, fuzzy +msgid "Softclip Level" +msgstr "Clip Suave" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matriz Estéreo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Estéreo Predeterminado)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Estéreo hacia Medio Lado)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Medio Lado - Estéreo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Canal Izquierdo Mono)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Canal Derecho Mono)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Suma Mono L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Intercambiar Canales)" + +#: data/ui/stereo_tools.ui:151 +#, fuzzy +msgid "Stereo Mode" +msgstr "Base Estéreo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Nivel Lateral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balance Lateral" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Nivel Medio" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama Medio" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "Balance" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Retraso L/R" + +#: data/ui/stereo_tools.ui:460 +#, fuzzy +msgid "Delay Left Right" +msgstr "Retraso L/R" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base Estéreo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fase Estéreo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "Puerta" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Canales" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" +"Salir de EasyEffects. Útil cuando se está ejecutando en modo de servicio." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Cargar un perfil. Ejemplo: easyeffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Restablecer EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Bypass global, 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +"estado" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Mostrar perfiles disponibles." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Salida" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Entrada" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Importar Archivo Impulse" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importar Archivo Impulse" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Abrir" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Respuesta de Impulse" + +#: src/convolver_menu_impulses.cpp:265 +#, fuzzy +msgid "Load Impulse" +msgstr "Importar Archivo Impulse" + +#: src/convolver_menu_impulses.cpp:268 +#, fuzzy +msgid "Remove Impulse" +msgstr "Importar Archivo Impulse" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Importar Archivo Impulse" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "No se pudo encontrar el archivo Impulse" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +#, fuzzy +msgid "Recorders" +msgstr "Bordes" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +#, fuzzy +msgid "Import APO Preset File" +msgstr "Importar Perfiles" + +#: src/equalizer_ui.cpp:387 +#, fuzzy +msgid "APO Presets" +msgstr "Perfiles" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Importar Perfiles" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +#, fuzzy +msgid "Remove Autoloading Preset" +msgstr "Borrar este perfil" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Efectos de Salida" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Efectos de Salida" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +#, fuzzy +msgid "Import Model File" +msgstr "Importar Archivo Impulse" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Potenciado de Graves" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "Loudness" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristalizador" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Cancelador de Eco" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ecualizador" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitador" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Efectos de Salida" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limitador" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizador" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compresor Multibanda" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Puerta Multibanda" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Reverberación" + +#: src/tags_plugin_name.cpp:55 +#, fuzzy +msgid "Noise Reduction" +msgstr "Reducción de Ganancia" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Herramientas Estéreo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de Pase Alto" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "New Output Preset Name" +#~ msgstr "Perfiles de Dispositivos de Salida:" + +#~ msgid "Search Output Preset" +#~ msgstr "Perfiles de Dispositivos de Salida:" + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "infinity" +#~ msgstr "infinidad" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Radio" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Pase Alto" + +#~ msgid "Gating" +#~ msgstr "Puerta" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Paso Bajo" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Paso Bajo" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Paso Bajo" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Pase Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Pase Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Pase Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Paso de Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Paso de Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Paso de Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rechazo de Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rechazo de Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rechazo de Banda" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Tipo" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendiente" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Loudness" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Estante Alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidad" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formato" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Frescura" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Clip Suave" + +#~ msgid "Cents" +#~ msgstr "Acentos" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Restablecer EasyEffects." + +#~ msgid "High Pass" +#~ msgstr "Pase Alto" + +#~ msgid "Low Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Pre Retraso" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Dividir Canales" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Nivel" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Nivel" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Nivel Objetivo" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Nivel Objetivo" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Nivel de Supresión" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de Sonido para las aplicaciones de PulseAudio" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Reducción de Ganancia" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Low Band" +#~ msgstr "Banda Baja" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantidad" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantidad" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#, fuzzy +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects es una avanzada herramienta de manipulación de audio. Incluye " +#~ "un ecualizador, limitador, compresor y herramienta de reverberación , " +#~ "solo por mencionar algunos. Para complementar esto hay también incluido " +#~ "un analizador de espectro." + +#, fuzzy +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Debido a que EasyEffects usa por defecto el servicio de sonido " +#~ "PulseAudio, este funcionará con la mayoría, sino que todas, las " +#~ "aplicaciones que use. Todas las aplicaciones son mostradas en la ventana " +#~ "principal donde pueden ser habilitadas individualmente." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Además de manipular el sonido de salida, EasyEffects puede aplicar " +#~ "efectos a dispositivos de entrada, como micrófonos. Esto es útil, por " +#~ "ejemplo, en la grabación de audio, pero también funciona correctamente " +#~ "durante conversaciones de voces." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Cuando EasyEffects esté activo este convenientemente recordará la " +#~ "configuración usada en la última sesión. También es posible guardar la " +#~ "configuración actual como un perfil." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Borrar este perfil" + +#~ msgid "Import Presets" +#~ msgstr "Importar Perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar Servicio al Iniciar Sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Lista Negra" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrar Micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "Faster" +#~ msgstr "Más Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar Formato" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Color Personalizado" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Degradado" + +#~ msgid "Spectrum Color" +#~ msgstr "Color del Espectro" + +#~ msgid "Gradient Color" +#~ msgstr "Color del Degradado" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Exponent" +#~ msgstr "Exponente" + +#~ msgid "Sampling" +#~ msgstr "Muestreo" + +#~ msgid "Block Size" +#~ msgstr "Tamaño de Bloque" + +#~ msgid "Pipeline Input" +#~ msgstr "Caudal de Entrada" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Niceness" +#~ msgstr "Meticulosidad" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridad" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Priority" +#~ msgstr "Prioridad" + +# Resampler does not have an official translation +#~ msgid "Resampler" +#~ msgstr "Remuestreador" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Muestreo Predeterminado" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +# Resamplers does not have an official translation +#~ msgid "Resamplers" +#~ msgstr "Remuestreadores" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silencio" + +#~ msgid "-23" +#~ msgstr "-23" + +#~ msgid "Weights" +#~ msgstr "Fuerza" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Silenciado" + +#~ msgid "Distant Headphones" +#~ msgstr "Audífonos a Distancia" + +#~ msgid "Reset Equalizer" +#~ msgstr "Restablecer Ecualizador" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Dry" +#~ msgstr "Secar" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar Archivo de Respuesta Impulse" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione el Archivo de Respuesta Impulse" + +#~ msgid "Loudness Range" +#~ msgstr "Rango de Sonoridad" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Después" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Extendido" + +#~ msgid "Delay Agnostic" +#~ msgstr "Retraso Agnóstico" + +#~ msgid "Low" +#~ msgstr "Bajo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#~ msgid "Very High" +#~ msgstr "Muy Alto" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptado Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Arreglo Digital" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidad de Detección" + +#~ msgid "Very Low" +#~ msgstr "Muy Bajo" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automáticamente aplicar este perfil siempre que el dispositivo actual " +#~ "esté conectado" + +#~ msgid "Volume" +#~ msgstr "Volumen" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cuadrado" + +#~ msgid "Saw" +#~ msgstr "Sierra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Pink Noise" +#~ msgstr "Ruido Rosa" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruido Gaussiano" + +#~ msgid "Blue Noise" +#~ msgstr "Ruido Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruido Violeta" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruido" + +#~ msgid "Subtract Noise" +#~ msgstr "Reducir Ruido" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Establecer el volumen y encender/apagar los efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Incluye un ecualizador con perfiles incluidos" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "reproduciendo" diff --git a/po/es_VE.po b/po/es_VE.po new file mode 100644 index 0000000..6ab6af8 --- /dev/null +++ b/po/es_VE.po @@ -0,0 +1,3365 @@ +# Spanish (VE) translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Pulseeffects package. +# CCaroV , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 14:07+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Spanish (Venezuela) \n" +"Language: es_VE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ecualizador, Compresor y Otros Efectos de Sonido" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +#, fuzzy +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de Sonido para las Aplicaciones de PulseAudio" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Perfiles\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Habilitar" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +#, fuzzy +msgid "Mute Application" +msgstr "Aplicaciones" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +#, fuzzy +msgid "Application Volume" +msgstr "Aplicaciones" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Ayuda" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Ajustes" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Perfiles" + +#: data/ui/application_window.ui:55 +#, fuzzy +msgid "Presets Menu" +msgstr "Perfiles" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Bypass Global" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Aplicaciones" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Paredes Vacías" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Aplicaciones" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Restablecer Historial" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Objetivo" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silencio" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Máximo" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentáneo" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Corto Plazo" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrado" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Usar la Media Geométrica" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Loudness" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Reativo" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rango" + +#: data/ui/autogain.ui:378 +#, fuzzy +msgid "Output Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Entrada" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Salida" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Caudal de Salida" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Restablecer" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nombre" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Perfiles" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Borrar este perfil" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Escuchar" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mezclar Harmónicos" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3era" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2nda" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Cantidad" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmónicos" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Alcance" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Fondo" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Fondo" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Acoplar" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Aplicaciones" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Aplicaciones" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Aplicaciones" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Aplicaciones" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Ventana" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modo" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Hacia Abajo" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Hacia Arriba" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Modo de Compresión" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +#, fuzzy +msgid "Boost Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Cantidad" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Ataque" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +#, fuzzy +msgid "Time" +msgstr "Tiempo Real" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Ataque" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Liberar" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "Tiempo Real" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Límite" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Radio" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Codo" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Amplificación" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Nivel" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Nivel Objetivo" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Base Estéreo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Fuente" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Medio" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Lado" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Izquierda" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Derecha" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Máximo" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Máximo" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Retraso L/R" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Derecha" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Lado" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Lado" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Fuente Predeterminada" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Pico" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipo" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Adelantar" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Realimentar" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Efectos de Entrada" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Pre-amplificación" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reactividad" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Atenuación" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Cadena Lateral" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "Pase Alto" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frecuencia" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Apagdo" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Paso Bajo" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Filtro de Pase Alto" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Ganancia" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Pendiente" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Canales" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Dividir Canales" + +#: data/ui/convolver.ui:71 +#, fuzzy +msgid "Impulses" +msgstr "Respuesta de Impulse" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Amplitud Estéreo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Espectro" + +#: data/ui/convolver.ui:122 +#, fuzzy +msgid "Log Scale" +msgstr "Escala" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +#, fuzzy +msgid "Autogain" +msgstr "Ganancia Automática" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Tasa" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Muestras" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Duración" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Respuesta de Impulse" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importar Archivo Impulse" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Importar Archivo Impulse" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Importar Archivo Impulse" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Predeterminado" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Umbral" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Alimentar" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Bypass" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Silenciar" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detección" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Ancho" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Dividir" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "Dividir" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "Pico" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "Ganancia" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "Nivel" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "Pico Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Relajamiento" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detectado" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Reducción" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Retraso" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Invertir Fase" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Atenuación" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Cadena Lateral" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Cadena Lateral" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Dividir Canales" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Respuesta Plana" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calcular Frecuencias" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +#, fuzzy +msgid "Import Preset" +msgstr "Importar Perfiles" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pendiente" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Calidad" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Anchura" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Límite" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Modo" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Integrado" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +#, fuzzy +msgid "Description" +msgstr "Detección" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Borrar este perfil" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Estante Bajo" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Estante Alto" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Timbre" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Bypass" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Muesca" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonancia" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Paso Bajo" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Reducción" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Paso Bajo" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ecualizador" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Puerta de Ruido" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Tiempo Real" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frecuencia" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sobre Muestreo" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Ancho" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Ancho" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Ancho de Linea" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Ancho de Linea" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Mesa Sinusoidal" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ninguno" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Pre-amplificación" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Acoplamiento Estéreo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Cadena Lateral" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Ganancia Automática" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Ganancia" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Derecha" + +#: data/ui/limiter.ui:687 +#, fuzzy +msgid "Sidechain Left" +msgstr "Cadena Lateral" + +#: data/ui/limiter.ui:714 +#, fuzzy +msgid "Sidechain Right" +msgstr "Cadena Lateral" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +#, fuzzy +msgid "FFT Size" +msgstr "Tamaño del Marco" + +#: data/ui/loudness.ui:82 +#, fuzzy +msgid "Output Volume" +msgstr "Salida" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Mapa de Canales" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Límite" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Cadena Lateral" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +#, fuzzy +msgid "Operating Mode" +msgstr "Modo de Compresión" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +#, fuzzy +msgid "Modern" +msgstr "Modo" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Invertir Fase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +#, fuzzy +msgid "Bands List" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +#, fuzzy +msgid "Band 1" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +#, fuzzy +msgid "Band 2" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +#, fuzzy +msgid "Band 3" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +#, fuzzy +msgid "Band 4" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +#, fuzzy +msgid "Band 5" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +#, fuzzy +msgid "Band 6" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +#, fuzzy +msgid "Band 7" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +#, fuzzy +msgid "Band 8" +msgstr "Bandas" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +#, fuzzy +msgid "Band End" +msgstr "Bandas" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Modo de Compresión" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Bypass" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Base Estéreo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Calcular Frecuencias" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtro de Pase Alto" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Calcular Frecuencias" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Ganancia de Entrada" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +#, fuzzy +msgid "Band Curve" +msgstr "Curva" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Reducción" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "General" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Usar Predeterminado" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Usar Predeterminado" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Reverberación" + +#: data/ui/pipe_manager_box.ui:116 +#, fuzzy +msgid "Header Version" +msgstr "Versión" + +#: data/ui/pipe_manager_box.ui:127 +#, fuzzy +msgid "Library Version" +msgstr "Versión" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Tasa de Muestreo por Defecto" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Ganancia Máxima" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Profundidad Predeterminda" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "Efectos de Salida" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +#, fuzzy +msgid "Output Presets" +msgstr "Perfiles de Dispositivos de Salida: " + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +#, fuzzy +msgid "Output Autoloading Presets List" +msgstr "Perfiles de Dispositivos de Salida: " + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "Efectos de Entrada" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +#, fuzzy +msgid "Input Presets" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:429 +#, fuzzy +msgid "Modules List" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:461 +#, fuzzy +msgid "Clients List" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:475 +#, fuzzy +msgid "Test Signal" +msgstr "Señal de Prueba" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Estado" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +#, fuzzy +msgid "Enabled" +msgstr "Habilitar" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canales" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +#, fuzzy +msgid "Both Channels" +msgstr "Canales" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Mesa Sinusoidal" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Ruido Blanco" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frecuencia" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Ventana" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filtro" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Tono" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitonos" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Borrar este perfil" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +#, fuzzy +msgid "_General" +msgstr "General" + +#: data/ui/preferences_general.ui:10 +#, fuzzy +msgid "Service" +msgstr "Servidor" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Procesar Todas las Salidas" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Procesar Todas las Entradas" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Usar Tema Oscuro" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimental" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Ventana" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +#, fuzzy +msgid "_Spectrum" +msgstr "Espectro" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barras" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Lineas" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Puntos" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Altura" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Ancho de Linea" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Rellenar" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +#, fuzzy +msgid "Frequency Range" +msgstr "Frecuencia" + +#: data/ui/preferences_spectrum.ui:212 +#, fuzzy +msgid "Minimum" +msgstr "Máximo" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Máximo" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Guardar esta configuración a este perfil" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Guardar esta configuración a este perfil" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Borrar este perfil" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Crear Perfil" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Importar Perfiles" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Amortiguación de Alta Frecuencia" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Tamaño de la Habitación" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Pequeña" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Mediana" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Túnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/Liso" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difusión" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pre Retraso" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Tiempo de Decaimiento" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Corte de Bajos" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Corte de Sobreagudos" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiente" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Paredes Vacías" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Habitación" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Habitación Vacía Grande" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Habitación Ocupada Grande" + +#: data/ui/rnnoise.ui:31 +#, fuzzy +msgid "Import Model" +msgstr "Importar Archivo Impulse" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Detector de Voz" + +#: data/ui/rnnoise.ui:153 +#, fuzzy +msgid "Models" +msgstr "Modo" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +#, fuzzy +msgid "Active Model" +msgstr "Modo Agresivo" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "EasyEffects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Ruido Rojo" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Regulador de Ganancia" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Reverberación" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Supresor de Ruido" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Nivel" + +#: data/ui/stereo_tools.ui:79 +#, fuzzy +msgid "Input Balance" +msgstr "Balance" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Clip Suave" + +#: data/ui/stereo_tools.ui:116 +#, fuzzy +msgid "Softclip Level" +msgstr "Clip Suave" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matriz Estéreo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Estéreo Predeterminado)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Estéreo hacia Medio Lado)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Medio Lado - Estéreo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Canal Izquierdo Mono)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Canal Derecho Mono)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Suma Mono L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Intercambiar Canales)" + +#: data/ui/stereo_tools.ui:151 +#, fuzzy +msgid "Stereo Mode" +msgstr "Base Estéreo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Nivel Lateral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balance Lateral" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Nivel Medio" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama Medio" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "Balance" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Retraso L/R" + +#: data/ui/stereo_tools.ui:460 +#, fuzzy +msgid "Delay Left Right" +msgstr "Retraso L/R" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base Estéreo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fase Estéreo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "Puerta" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Canales" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" +"Salir de EasyEffects. Útil cuando se está ejecutando en modo de servicio." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Cargar un perfil. Ejemplo: easyeffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Restablecer EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Bypass global, 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +"estado" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Mostrar perfiles disponibles." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Salida" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Entrada" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Importar Archivo Impulse" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importar Archivo Impulse" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Abrir" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Respuesta de Impulse" + +#: src/convolver_menu_impulses.cpp:265 +#, fuzzy +msgid "Load Impulse" +msgstr "Importar Archivo Impulse" + +#: src/convolver_menu_impulses.cpp:268 +#, fuzzy +msgid "Remove Impulse" +msgstr "Importar Archivo Impulse" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Importar Archivo Impulse" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "No se pudo encontrar el archivo Impulse" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +#, fuzzy +msgid "Recorders" +msgstr "Bordes" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +#, fuzzy +msgid "Import APO Preset File" +msgstr "Importar Perfiles" + +#: src/equalizer_ui.cpp:387 +#, fuzzy +msgid "APO Presets" +msgstr "Perfiles" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Importar Perfiles" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Perfiles de Dispositivos de Entrada: " + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +#, fuzzy +msgid "Remove Autoloading Preset" +msgstr "Borrar este perfil" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Efectos de Salida" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Efectos de Salida" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +#, fuzzy +msgid "Import Model File" +msgstr "Importar Archivo Impulse" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Potenciado de Graves" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "Loudness" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristalizador" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Cancelador de Eco" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ecualizador" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitador" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Efectos de Salida" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limitador" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizador" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compresor Multibanda" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Puerta Multibanda" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Reverberación" + +#: src/tags_plugin_name.cpp:55 +#, fuzzy +msgid "Noise Reduction" +msgstr "Reducción de Ganancia" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Herramientas Estéreo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de Pase Alto" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "infinity" +#~ msgstr "infinidad" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Radio" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Pase Alto" + +#~ msgid "Gating" +#~ msgstr "Puerta" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Paso Bajo" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Paso Bajo" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Paso Bajo" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Pase Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Pase Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Pase Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Paso de Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Paso de Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Paso de Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rechazo de Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rechazo de Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rechazo de Banda" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Tipo" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendiente" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Loudness" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Estante Alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidad" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formato" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Frescura" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Clip Suave" + +#~ msgid "Cents" +#~ msgstr "Acentos" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Restablecer EasyEffects." + +#~ msgid "High Pass" +#~ msgstr "Pase Alto" + +#~ msgid "Low Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Pre Retraso" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Dividir Canales" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Nivel" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Nivel" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Nivel Objetivo" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Nivel Objetivo" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Nivel de Supresión" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de Sonido para las aplicaciones de PulseAudio" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Reducción de Ganancia" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Low Band" +#~ msgstr "Banda Baja" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantidad" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantidad" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#, fuzzy +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects es una avanzada herramienta de manipulación de audio. Incluye " +#~ "un ecualizador, limitador, compresor y herramienta de reverberación , " +#~ "solo por mencionar algunos. Para complementar esto hay también incluido " +#~ "un analizador de espectro." + +#, fuzzy +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Debido a que EasyEffects usa por defecto el servicio de sonido " +#~ "PulseAudio, este funcionará con la mayoría, sino que todas, las " +#~ "aplicaciones que use. Todas las aplicaciones son mostradas en la ventana " +#~ "principal donde pueden ser habilitadas individualmente." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Además de manipular el sonido de salida, EasyEffects puede aplicar " +#~ "efectos a dispositivos de entrada, como micrófonos. Esto es útil, por " +#~ "ejemplo, en la grabación de audio, pero también funciona correctamente " +#~ "durante conversaciones de voces." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Cuando EasyEffects esté activo este convenientemente recordará la " +#~ "configuración usada en la última sesión. También es posible guardar la " +#~ "configuración actual como un perfil." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Borrar este perfil" + +#~ msgid "Import Presets" +#~ msgstr "Importar Perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar Servicio al Iniciar Sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Lista Negra" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrar Micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "Faster" +#~ msgstr "Más Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar Formato" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Color Personalizado" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Degradado" + +#~ msgid "Spectrum Color" +#~ msgstr "Color del Espectro" + +#~ msgid "Gradient Color" +#~ msgstr "Color del Degradado" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Exponent" +#~ msgstr "Exponente" + +#~ msgid "Sampling" +#~ msgstr "Muestreo" + +#~ msgid "Block Size" +#~ msgstr "Tamaño de Bloque" + +#~ msgid "Pipeline Input" +#~ msgstr "Caudal de Entrada" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Niceness" +#~ msgstr "Meticulosidad" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridad" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Priority" +#~ msgstr "Prioridad" + +# Resampler does not have an official translation +#~ msgid "Resampler" +#~ msgstr "Remuestreador" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Muestreo Predeterminado" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +# Resamplers does not have an official translation +#~ msgid "Resamplers" +#~ msgstr "Remuestreadores" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silencio" + +#~ msgid "-23" +#~ msgstr "-23" + +#~ msgid "Weights" +#~ msgstr "Fuerza" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Silenciado" + +#~ msgid "Distant Headphones" +#~ msgstr "Audífonos a Distancia" + +#~ msgid "Reset Equalizer" +#~ msgstr "Restablecer Ecualizador" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Dry" +#~ msgstr "Secar" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar Archivo de Respuesta Impulse" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione el Archivo de Respuesta Impulse" + +#~ msgid "Loudness Range" +#~ msgstr "Rango de Sonoridad" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Después" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Extendido" + +#~ msgid "Delay Agnostic" +#~ msgstr "Retraso Agnóstico" + +#~ msgid "Low" +#~ msgstr "Bajo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#~ msgid "Very High" +#~ msgstr "Muy Alto" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptado Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Arreglo Digital" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidad de Detección" + +#~ msgid "Very Low" +#~ msgstr "Muy Bajo" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automáticamente aplicar este perfil siempre que el dispositivo actual " +#~ "esté conectado" + +#~ msgid "Volume" +#~ msgstr "Volumen" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cuadrado" + +#~ msgid "Saw" +#~ msgstr "Sierra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Pink Noise" +#~ msgstr "Ruido Rosa" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruido Gaussiano" + +#~ msgid "Blue Noise" +#~ msgstr "Ruido Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruido Violeta" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruido" + +#~ msgid "Subtract Noise" +#~ msgstr "Reducir Ruido" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Establecer el volumen y encender/apagar los efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Incluye un ecualizador con perfiles incluidos" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "reproduciendo" diff --git a/po/eu.po b/po/eu.po new file mode 100644 index 0000000..6d61ae3 --- /dev/null +++ b/po/eu.po @@ -0,0 +1,2483 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-06-03 20:51+0000\n" +"Last-Translator: Asier Sarasua Garmendia \n" +"Language-Team: Basque \n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ekualizatzailea, konprimatzailea eta beste audio-efektu batzuk" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Audio-efektuak PipeWire aplikazioetarako" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "mugatzailea;konprimatzailea;durunda;ekualizadorea;bolumen automatikoa;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Aurrezarpenak\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Gaitu/desgaitu aplikazio hau" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Gaitu" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Baztertu aplikazio-zerrenda: Gehitu/kendu aplikazio hau" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Baztertu" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Mututu aplikazioa" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Aldatu aplikazio honen bolumena" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Aplikazio-bolumena" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Laguntza" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Berrezarri ezarpenak" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Hobespenak" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "L_asterbideak" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "Easy Effects aplikazioari _buruz" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Aurrezarpenak" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Aurrezarpenen menua" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Gaitu/desgaitu bypass globala" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Bypass globala" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menu nagusia" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Easy Effects leihoa" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Aplikazioen zerrenda" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Zerrenda hutsa" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Ez dago audio-aplikaziorik erabilgarri" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Berrezarri historia" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Helburua" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Isiltasuna" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Gehieneko historia" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Erreferentzia" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Behin-behinekoa" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Epe laburrekoa" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integratua" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Batezbesteko geometrikoa (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Batezbesteko geometrikoa (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Batezbesteko geometrikoa (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Batezbesteko geometrikoa (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Ozentasuna" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Erlatiboa" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Barrutia" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Irteerako irabazia" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Sarrera" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Sarrerako irabaziaren plugina" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Irteera" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Irteerako irabaziaren plugina" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Berrezarri" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Gailua" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Izena" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profila" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Aurrezarpena" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Kendu automatikoki kargatutako aurrezarpen hau" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Entzun" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Nahastu harmonikoak" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3." + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2." + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Kantitatea" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonikoak" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Esparrua" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Zorua" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Zoru-balioa" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Esteka" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Aplikazioaren izena" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Gehitu baztertutako aplikazioei" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Baztertutako aplikazioen zerrenda" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Erakutsi baztertutako aplikazioak" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Konpresorea" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modua" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Beherantz" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Gorantz" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Indartzea" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Konpresio-modua" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Indartze-atalasea" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Indartze kantitatea" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Erasoa" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Denbora" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Atalasea" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Eraso-denbora" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Eraso-atalasea" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Askatzea" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Askatze-denbora" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Askatze-atalasea" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Ratioa" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Trantsizioa" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Goratzea" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Lehortze-maila" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Hezetasun-maila" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Alboko katea" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Estereo-zabalera" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Iturburua" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Erdia" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Alboa" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Ezkerra" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Eskuina" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Max" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Alboko katearen iturburua" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Eskuina" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Eskuina" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Alboa" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Alboa" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Gailurra" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMSa" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Alboko katearen modua" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Alboko katea" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Mota" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Aurrelikatzea" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Atzeraelikatzea" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Kanpokoa" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Alboko katearen mota" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Sarrerako gailua" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Aurreanplifikazioa" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Erreaktibotasuna" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Aurrea hartzea" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Alboko katearen iragazkiak" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Pasaera altua" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Maiztasuna" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Desaktibatuta" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/zortzidun" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/zortzidun" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/zortzidun" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Pasaera altuko iragazki-modua" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Pasaera altuko iragazki-maiztasuna" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Pasaera baxua" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Pasaera baxuko iragazki-modua" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Irabazia" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Inguratzailea" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Kurba" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Ezkerreko kanala" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Eskuineko kanala" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Bulkadak" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Konbinatu" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Estereo-zabalera" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Espektroa" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Eskala logaritmikoa" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Irabazi automatikoa" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Tasa" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Laginak" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Iraupena" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Konbinatu bulkada-erantzunak" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Lehen nukleoa" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Bigarren nukleoa" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Irteerako fitxategiaren izena" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Konbinatutako nukleo-izena" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Inportatu bulkada" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Bilatu" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Bilatu bulkada-iragazkia" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Bulkada-fitxategien zerrenda" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Lehenetsia" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Atalasea" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Elikatzea" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Deribazioa" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Mututu" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detekzioa" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Zabala" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Zatitzea" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 zatitzea" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "1. maiztasunaren zatitzea" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 gailurra" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "2. maiztasunaren gailurra" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 irabazia" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "1. maiztasunaren irabasia" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 maila" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "2. maiztasunaren maila" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 Q gailurra" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "2. maiztasunaren Q gailurra" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Laxotasuna" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detektatua" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Murrizketa" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Atzerapena" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Iragazki-luzera" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Iragazki-luzera" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Hondar-oihartzuna kentzea" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Amaiera aldeko oihartzuna kentzea" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Baztertutako aplikazioak" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandak" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balantzea" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Ezkerreko tonua" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Eskuineko tonua" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Zatitu kanalak" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Erantzun laua" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Kalkulatu maiztasunak" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Ordenatu bandak" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Inportatu aurrezarpena" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Malda" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kalitatea" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Zabalera" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Banda modua" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "APIa" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Sarbidea" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Deskribapena" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Kendu eredu-fitxategi hau" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Pasaera altua" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Bandak" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Erresonantzia" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Pasaera baxua" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Pasaera baxua" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Banda modua" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Atea" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Zona" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Histeresia" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Estereo-zabalera" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Aurrezarpena" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Aurrezarpenak" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#~ msgid "Uniform" +#~ msgstr "Uniformea" + +#~ msgid "IIR" +#~ msgstr "IIRa" + +#~ msgid "FIR" +#~ msgstr "FIRa" + +#~ msgid "FFT" +#~ msgstr "FFTa" + +#~ msgid "SPM" +#~ msgstr "SPMa" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Ratioa" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Atalasea" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Pasaera baxua" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Pasaera altua" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12db/zortzidun pasaera baxua" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24db/zortzidun pasaera baxua" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36db/zortzidun pasaera baxua" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12db/zortzidun pasaera altua" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24db/zortzidun pasaera altua" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36db/zortzidun pasaera altua" + +#~ msgid "Inertia" +#~ msgstr "Inertzia" + +#~ msgid "Band Type" +#~ msgstr "Banda mota" + +#~ msgid "Band Mode" +#~ msgstr "Banda modua" + +#~ msgid "Band Slope" +#~ msgstr "Bandaren malda" diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100644 index 0000000..d5cce7b --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,3842 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-10-18 14:15+0000\n" +"Last-Translator: Bundy01 \n" +"Language-Team: French \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Égaliseur, Compresseur et autres effets audio" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Effets audio pour les applications utilisant le serveur audio PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limiteur ; compresseur ; réverbération ; égaliseur ; autovolume ;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Préréglages\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Autoriser/Interdire cette application" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Activer" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Liste des applications exclues : ajouter/retirer cette application" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Exclure" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Couper le son de l’application" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Modifier le volume de cette application" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Volume de l’application" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Aide" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Réinitialiser les paramètres" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Préférences" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Raccourcis" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_À propos de Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Préréglages" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menu des préréglages" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Activer/désactiver le contournement global" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Contournement global" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menu principal" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Fenêtre de Easy Effects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Liste des applications" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Liste vide" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Aucune application audio disponible" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Réinitialiser l’historique" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "Contrôles" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Cible" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silence" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Historique maximum" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Référence" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Temporaire" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Court-terme" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Intégré" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Moyenne géométrique (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Moyenne géométrique (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Moyenne géométrique (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Moyenne géométrique (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Sonie" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relatif" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Intervalle" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Gain de sortie" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Entrée" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Gain d’entrée du greffon" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Sortie" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Gain de sortie du greffon" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Réinitialiser" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Périphérique" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nom" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Préréglage" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Supprimer ce préréglage auto-chargeant" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Écouter" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mélanger les harmoniques" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3ème" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2ème" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Quantité" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmoniques" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Portée" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Limite inférieure" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Valeur plancher" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Lien" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Nom de l’application" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Ajouter aux applications exclues" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Liste des applications exclues" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Afficher les applications exclues" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Afficher la fenêtre Native" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compresseur" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Mode" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Descendant" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Ascendant" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Renforcement" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Mode de compression" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Seuil de renforcement" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Quantité de renforcement" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Attaque" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Temps" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Seuil" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Temps d’attaque" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Seuil d’attaque" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Relâchement" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Temps de relâchement" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Seuil de relâchement" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Ratio" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Genou" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Compensation de gain" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Niveau des signaux secs" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Niveau des signaux humides" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Chaîne latérale" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "Mode de Séparation Stéréo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Source" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Centrale" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Latérale" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Gauche" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Droite" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Max" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Source Chaîne Latérale" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "Gauche/Droite" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "Droite/Gauche" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "Milieu/Côté" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "Côté/Milieu" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "Source Séparée Stéréo" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Crête" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Filtre Passe-Bas" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Moyenne mobile simple" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Mode Chaîne Latérale" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "Écouter la Chaîne Latérale" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Type" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Retour d'information" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Retour" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Externe" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Type Chaîne Latérale" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Périphérique d’entrée" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Pré amplification" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Réactivité" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Anticipation" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Filtres Chaîne Latérale" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Passe-Haut" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Fréquence" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Désactivé" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Mode du filtre Passe-Haut" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Fréquence du filtre Passe-Haut" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Passe-Bas" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Mode du filtre Passe-Bas" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Gain" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Enveloppe" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Courbe" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "G" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Canal gauche" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "D" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Canal droit" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsions" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Combiner" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Amplitude Stéréo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spectre" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Échelle logarithmique" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Gain automatique" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Taux" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Échantillons" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Durée" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Combiner les réponses impulsionnelles" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Premier noyau" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Deuxième Noyau" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Nom du fichier de sortie" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Nom du noyau combiné" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importer une réponse impulsionnelle" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Rechercher" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Rechercher un fichier de réponse impulsionnelle" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Liste des fichiers de réponse impulsionnelle" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Par défaut" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Coupure" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Flux" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Contourner" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Couper le son" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Détection" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Large" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Diviser" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "Division F1" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Division Fréquence 1" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "Crête F2" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Crête Fréquence 2" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "Gain F1" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Gain Fréquence 1" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "Niveau F2" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Niveau Fréquence 2" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "Crête Q F2" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Crête Q Fréquence 2" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Laxité" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Détecté" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Réduction" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Retard" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inverser la phase" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "Limite d'atténuation" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "Seuil de traitement minimal" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "Seuil maximum de traitement ERB" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "Seuil maximum de traitement DF" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "Tampon de traitement minimal" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "Filtre postérieur Beta" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Longueur du filtre" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Suppression de l'écho résiduel" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Suppression de l'écho proche" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Applications exclues" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandes" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Hauteur Gauche" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Hauteur Droite" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Diviser les canaux" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Réponse Plate" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calculer les fréquences" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Tri des bandes" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importer un préréglage" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pente" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Qualité" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Largeur" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Plafonner" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Valeur du plafonnement" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "Expanseur" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "Mode Expanseur" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Interne" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Accès" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Description" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Supprimer ce fichier modèle" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "Low-Shelf" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "High-Shelf" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Cloche" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "Band-Pass" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Réjection de bande" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Résonance" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "Ladder-Pass" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "Ladder-Rejection" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "All-Pass" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "Mode Égaliseur" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Porte" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Zone" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Hystérèse" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Mix" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Début Zone d’Attaque" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Début Zone de Relâchement" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "Crête réelle" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sur-échantillonnage" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Dither" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Herm Thin" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Herm Wide" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Herm Tail" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Herm Duck" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exp Thin" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp Wide" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Exp Tail" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exp Duck" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Line Thin" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Line Wide" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Line Tail" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Line Duck" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Aucun" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Moitié x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Moitié x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Moitié x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Moitié x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Moitié x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Moitié x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Moitié x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Moitié x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Moitié x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Moitié x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Complet x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Complet x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Complet x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Complet x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Complet x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Complet x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Complet x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Complet x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Complet x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Complet x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC PréAmp" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Pré amplification de la Chaîne Latérale" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Renforcer" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Lien Stéréo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Chaîne Latérale Externe" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Source Chaîne Latérale Externe" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Auto-nivellement" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Auto-nivellement de l’attaque" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Auto-nivellement du relâchement" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Auto-nivellement du genou" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Gain Gauche" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Gain Droit" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Chaîne Latérale Gauche" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Chaîne Latérale Droite" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standard" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Plat" + +# Taking lingual shortcuts to squeeze it in the text box +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Taille FFT" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Volume de sortie" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Coupure" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Plafonnement" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Renforcement de la Chaîne Latérale" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "Rose BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "Rose MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "Marron BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "Marron MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "Afficher l'interface utilisateur native" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Mode Opératoire" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Classique" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderne" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "Phase linéaire" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Liste des Bandes" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Bande 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Bande 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Bande 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Bande 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Bande 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Bande 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Bande 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Bande 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Début de Bande" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Fin de Bande" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Mode de Compression" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Contournement de Bande" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Options Chaîne Latérale de la bande" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "Séparation Stéréo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtre" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "Coupe-Bas" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Fréquence Filtre Coupe-Bas" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "Coupe-Haut" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Fréquence Filtre Coupe-Haut" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "PréAmp" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Gain de Bande" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Enveloppe de bande" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Courbe de Bande" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Réduction de Bande" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Général" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Gestion des périphériques" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"Il est recommandé de ne PAS définir Easy Effects Sink/Source comme " +"périphérique par défaut dans les applications externes (par exemple, les " +"Paramètres de Gnome et les Paramètres de Plasma)." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Utiliser l’entrée par défaut" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Périphérique d’entrée personnalisé" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Utiliser la sortie par défaut" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Périphérique de sortie personnalisé" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Information du serveur" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Version de l’en-tête" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Version de la bibliothèque" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Taux d’échantillonnage" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Quantum minimum" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Quantum maximum" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Quantum par défaut" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Chargement automatique des préréglages" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Périphériques de sortie" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Préréglages de sortie" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Créer une association" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Ajouter un préréglage de sortie auto-chargeant" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Liste des préréglages de sortie auto-chargeant" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Périphériques d’entrée" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Préréglages d’entrée" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Ajouter un préréglage d’entrée auto-chargeant" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Liste des préréglages d’entrée auto-chargeant" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Modules" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Liste des modules" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clients" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Liste des clients" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Signal d’essai" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "État" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Activé" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Propriétés" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canaux" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Tous les deux" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Les deux canaux" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Forme d’onde" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Onde sinusoïdale" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Bruit blanc" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "Recherche rapide" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "Anti-crénelage" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "Durée de la séquence" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "Fenêtre de recherche" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "Durée de chevauchement" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Hauteur" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Demi-tons" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "Différence de tempo" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "Différence de débit" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Supprimer cet effet" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Activer/désactiver cet effet" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Modifier la position de cet effet" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Ajouter un effet" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Liste des greffons utilisés" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Aucun effet" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Flux audio non modifié" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Greffon de recherche" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Liste des greffons" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Général" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Service" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Lancer le service au démarrage du système" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Arrêter à la fermeture de la fenêtre" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Traiter tous les flux de sortie" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Traiter tous les flux d’entrée" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Ignorer les flux du moniteur des périphériques" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Utiliser le volume cubique" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Délai d’inactivité" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "Intervalle de mise à jour (mesureurs de niveau et spectre)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "Fréquence de mise à jour (Greffons LV2)" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Style" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Utiliser le thème sombre" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Masquer les menus en cliquant en dehors" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "Fonctionnalités expérimentales" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "Fenêtre du greffon natif" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "Permet d'afficher/masquer la fenêtre du greffon natif" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spectre" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Forme" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barres" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Lignes" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Points" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Points" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Hauteur" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Largeur de ligne" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Remplir" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Afficher les bordures des barres" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Coins arrondis" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "Échelle dynamique" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Couleur" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Lignes et barres" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Annotation des axes" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Intervalle de fréquences" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimum" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maximum" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Charger" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "Abandonner les réglages actuels et charger ce préréglage" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Enregistrer les paramètres actuels dans ce préréglage" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Supprimer ce préréglage" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "Nouveau nom de préréglage" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Créer un nouveau préréglage" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Importer un préréglage" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "Rechercher un préréglage" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "Liste des préréglages" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Atténuation des Hautes Fréquences" + +# Taking lingual shortcuts to squeeze it in the text box +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Taille de la salle" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Petite" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Moyenne" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/lisse" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Expérimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Diffusion" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pré-retard" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Temps de Déclin" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Couper les Basses" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Couper les Aiguës" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiance" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Murs Vides" + +# Taking lingual shortcuts to squeeze it in the text box +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Salle" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Grande Salle Vide" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Grande Salle Occupée" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importer un modèle" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Détection de la voix" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modèles" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Modèle standard" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Liste des modèles RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Modèle non chargé" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Modèle actif" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Modèle standard RNNoise" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Vue d’ensemble" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "Afficher l'aide" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Plein écran/Restaurer à partir du plein écran" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Fermer la fenêtre" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Quitter Easy Effects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Débruiter" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Contrôle automatique du gain" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Dé-réverbération" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Probabilité d'activité vocale" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Début" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Continuer" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Suppression du bruit" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Niveau" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Balance d’entrée" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Écrêtage doux" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Niveau de l’écrêtage" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matrice Stéréo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "GD > GD (Stéréo par défaut)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "GD > M (Stéréo vers milieu)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "M > GD (Milieu vers stéréo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "GD > GG (Canal gauche mono)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "GD > DD (Canal droit mono)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "GD > G+D (Somme G+D vers mono)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "GD > DG (Inversement des canaux stéréo)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Mode Stéréo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Niveau Latéral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balance Latérale" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Niveau Central" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama central" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Balance de Sortie" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Retard G/D" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Retard Gauche Droit" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base Stéréo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Phase Stéréo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "En cours" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "En pause" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Inactif" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Génération" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Erreur" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Inconnu" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "canaux" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Quitter Easy Effects. Utile en cas de fonctionnement en mode serveur." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Chargez un préréglage. Exemple : easyeffects -l musique" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Réinitialiser Easy Effects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Masquer la Fenêtre." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Contournement global. 1 pour activer, 2 pour désactiver et 3 pour obtenir le " +"statut" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Afficher les préréglages disponibles." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Sortie" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_Entrée" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "Le fichier est irrégulier" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "Le fichier d’impulsion peut être corrompu ou non pris en charge" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Seuls les fichiers d’impulsion stéréo sont pris en charge" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Fichier d’impulsion non importé" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importer un fichier d’impulsion" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Ouvrir" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Réponse impulsionnelle" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Charger une impulsion" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Supprimer l’impulsion" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Aucun fichier d’impulsion chargé" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Impossible de charger le fichier d’impulsion" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Enregistreurs" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Lecteurs" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Effets" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importer un fichier de préréglage APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Préréglages APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"Le préréglage APO n’a pas été chargé. Le format du fichier peut ne pas être " +"pris en charge. Veuillez vérifier son contenu." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "Importer un fichier de préréglage GraphicEQ" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "Préréglages GraphicEQ" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"Le préréglage GraphicEQ n’a pas été chargé. Le format du fichier peut ne pas " +"être pris en charge. Veuillez vérifier son contenu." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Supprimer le préréglage du chargement automatique" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "Indicateur Niveau de Sortie" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Supprimer" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Périphérique de sortie" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Ajouter" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "Sauvegarder ?" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "Effacer ?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Le modèle sélectionné n’a pas été chargé. Son format n’est peut-être pas " +"pris en charge. Retour au modèle standard." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importer un fichier modèle" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Modèles RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Amélioration des basses" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Sonie des basses" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolueur" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Flux croisé" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristallisateur" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "Enlèvement du Bruit Profond" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Déesseur" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Annulateur d’écho" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Égaliseur" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitateur" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "Indicateur de niveau" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limiteur" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximiseur" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compresseur multibande" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Porte multibande" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Réverbération" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Réduction du bruit" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Processeur vocal" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Outils stéréo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} Indisponible" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" +"Le logiciel requis pour l'effet {}, \"{}\", n'est pas installé. Envisagez " +"d'utiliser le paquet Easy Effects Flatpak ou d'installer le logiciel vous-" +"même." + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" +"L'effet {} a été désactivé lorsque Easy Effects a été compilé. C'est peut-" +"être parce que le logiciel requis pour cet effet, \"{}\", n'était pas " +"disponible. Envisagez d'utiliser le paquet Easy Effects Flatpak ou de créer " +"votre propre paquet Easy Effects." + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-inf" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "Utilise {}" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtre Coupe-Bas" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filtre Coupe-Haut" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nom du préréglage de sortie" + +#~ msgid "Search Output Preset" +#~ msgstr "Rechercher un préréglage de sortie" + +#~ msgid "Output Presets List" +#~ msgstr "Liste des préréglages de sortie" + +#~ msgid "infinity" +#~ msgstr "infini" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "TFR" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Ratio" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Seuil" + +#~ msgid "Low-pass" +#~ msgstr "Passe-bas" + +#~ msgid "High-pass" +#~ msgstr "Passe-haut" + +#~ msgid "Gating" +#~ msgstr "Déclenchement" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct passe-bas" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct passe-bas" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct passe-bas" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct passe-haut" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct passe-haut" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct passe-haut" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct passe-bande" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct passe-bande" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct passe-bande" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct coupe-bande" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct coupe-bande" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct coupe-bande" + +#~ msgid "Inertia" +#~ msgstr "Inertie" + +#~ msgid "Band Type" +#~ msgstr "Type de bande" + +#~ msgid "Band Mode" +#~ msgstr "Mode de la Bande" + +#~ msgid "Band Slope" +#~ msgstr "Pente de la Bande" + +#~ msgid "Loudness List" +#~ msgstr "Liste de sonie" + +#~ msgid "High Speed" +#~ msgstr "Haute vélocité" + +#~ msgid "High Quality" +#~ msgstr "Haute qualité" + +#~ msgid "High Consistency" +#~ msgstr "Haute cohérence" + +#~ msgid "Formant" +#~ msgstr "Formant" + +#~ msgid "Shifted" +#~ msgstr "Altéré" + +#~ msgid "Preserved" +#~ msgstr "Préservé" + +#~ msgid "Transients" +#~ msgstr "Transitoires" + +#~ msgid "Crisp" +#~ msgstr "Net" + +#~ msgid "Mixed" +#~ msgstr "Intermédiaire" + +#~ msgid "Smooth" +#~ msgstr "Progressif" + +#~ msgid "Detector" +#~ msgstr "Détecteur" + +#~ msgid "Compound" +#~ msgstr "Composé" + +#~ msgid "Percussive" +#~ msgstr "Percutant" + +#~ msgid "Soft" +#~ msgstr "Doux" + +#~ msgid "Phase" +#~ msgstr "Phase" + +#~ msgid "Laminar" +#~ msgstr "Laminaire" + +#~ msgid "Independent" +#~ msgstr "Indépendante" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Octaves" +#~ msgstr "Octaves" + +#~ msgid "_Manual" +#~ msgstr "_Manuel" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Ouvrir le manuel de Easy Effects" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} n’est pas installé sur le système" + +#~ msgid "High Pass" +#~ msgstr "Passe-haut" + +#~ msgid "Low Pass" +#~ msgstr "Passe-bas" + +#~ msgid "Cancel" +#~ msgstr "Annuler" + +#~ msgid " PreAmplification" +#~ msgstr " Pré-amplification" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Fermer (appuyez sur Échap)" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Frame Size" +#~ msgstr "Taille du cadre" + +#, fuzzy +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "Activer/désactiver le contournement global" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Passe-bas" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Uniforme" + +#~ msgid "Left Delay" +#~ msgstr "Retard Gauche" + +#~ msgid "Right Delay" +#~ msgstr "Retard Droit" + +#~ msgid "Left Dry Level" +#~ msgstr "Niveau de Secs gauche" + +#~ msgid "Right Dry Level" +#~ msgstr "Niveau de Secs droit" + +#~ msgid "Left Wet Level" +#~ msgstr "Niveau d’Humides gauche" + +#~ msgid "Right Wet Level" +#~ msgstr "Niveau d’Humides droit" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Taille Transformation de Fourier Rapide" + +#~ msgid "Clipping Range" +#~ msgstr "Plage de découpage" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Suppression" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Effets audio pour les applications utilisant PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Réduction de bruit" + +#~ msgid "Load APO Preset" +#~ msgstr "Charger un préréglage APO" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "" +#~ "Réinitialiser le volume des périphériques virtuels de EasyEffects au " +#~ "démarrage" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Préréglages de sortie : " + +#~ msgid "Input Presets: " +#~ msgstr "Préréglages d’entrée : " + +#~ msgid "Split Mode" +#~ msgstr "Mode de division" + +#~ msgid "Split 1/2" +#~ msgstr "Diviser 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Diviser la fréquence 1" + +#~ msgid "Split 2/3" +#~ msgstr "Diviser 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Diviser la fréquence 2" + +#~ msgid "Split 3/4" +#~ msgstr "Diviser 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Diviser la fréquence 3" + +#~ msgid "Sub Band" +#~ msgstr "Sous-bande" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Contournement bande 1" + +#~ msgid "Band 1 Solo" +#~ msgstr "Solo de la bande 1" + +#~ msgid "Band 1 Detection" +#~ msgstr "Détection de la bande 1" + +#~ msgid "Band 1 Attack" +#~ msgstr "Attaque de la bande 1" + +#~ msgid "Band 1 Release" +#~ msgstr "Relâ­che­ment de la bande 1" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Seuil de la bande 1" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Ratio de la bande 1" + +#~ msgid "Band 1 Knee" +#~ msgstr "Genou de la bande 1" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Rattrapage de gain de la bande 1" + +#~ msgid "Max Reduction" +#~ msgstr "Atténuation maximale" + +#~ msgid "Low Band" +#~ msgstr "Bande inférieure" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Contournement bande 2" + +#~ msgid "Band 2 Solo" +#~ msgstr "Solo de la bande 2" + +#~ msgid "Band 2 Detection" +#~ msgstr "Détection de la bande 2" + +#~ msgid "Band 2 Attack" +#~ msgstr "Attaque de la bande 2" + +#~ msgid "Band 2 Release" +#~ msgstr "Relâ­che­ment de la bande 2" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Seuil de la bande 2" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Ratio de bande 2" + +#~ msgid "Band 2 Knee" +#~ msgstr "Genou de la bande 2" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Compensation de gain de la bande 2" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Réduction max de la bande 2" + +#~ msgid "Mid Band" +#~ msgstr "Bande centrale" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Contournement bande 3" + +#~ msgid "Band 3 Solo" +#~ msgstr "Solo de la bande 3" + +#~ msgid "Band 3 Detection" +#~ msgstr "Détection de la bande 3" + +#~ msgid "Band 3 Attack" +#~ msgstr "Attaque de la bande 3" + +#~ msgid "Band 3 Release" +#~ msgstr "Relâ­che­ment de la bande 3" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Seuil de la bande 3" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Ratio de bande 3" + +#~ msgid "Band 3 Knee" +#~ msgstr "Genou de la bande 3" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Compensation de gain de la bande 3" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Réduction max. de la banda 3" + +#~ msgid "High Band" +#~ msgstr "Bande supérieure" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Contournement bande 4" + +#~ msgid "Band 4 Solo" +#~ msgstr "Solo de la bande 4" + +#~ msgid "Band 4 Detection" +#~ msgstr "Détection de la bande 4" + +#~ msgid "Band 4 Attack" +#~ msgstr "Attaque de la bande 4" + +#~ msgid "Band 4 Release" +#~ msgstr "Relâ­che­ment de la bande 4" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Seuil de la bande 4" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Ratio de la bande 4" + +#~ msgid "Band 4 Knee" +#~ msgstr "Genou de la bande 4" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Compensation de gain de la bande 4" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Réduction max. de la bande 4" + +#~ msgid "Wet Amount" +#~ msgstr "Quantité de signaux avec effets" + +#~ msgid "Dry Amount" +#~ msgstr "Quantité de signaux sans effets" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects est un outil avancé de manipulation audio. Il inclut, entre " +#~ "autres, un égaliseur, limiteur, compresseur et effet de réverbération. " +#~ "Pour compléter le tout, un analyseur de spectre est également intégré." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects est le successeur de PulseEffects. EasyEffects ne prend en " +#~ "charge que le serveur audio de PipeWire. Les utilisateurs de PulseAudio " +#~ "doivent plutôt utiliser PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Comme EasyEffects utilise le serveur audio PipeWire par défaut, il " +#~ "fonctionnera avec la plupart, sinon la totalité, des applications que " +#~ "vous utilisez. Toutes les applications prises en charge sont présentées " +#~ "dans la fenêtre principale, où chacune peut être activée individuellement." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Outre la manipulation de la sortie audio, EasyEffects est capable de " +#~ "manipuler l’entrée audio (à partir d’un microphone par exemple). Cette " +#~ "fonction est utile pour l’enregistrement audio et fonctionne bien pour " +#~ "les appels vocaux." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "EasyEffects se souvient également de la configuration utilisée lors de la " +#~ "dernière session. Il est aussi possible de sauvegarder tous les " +#~ "paramètres définis sous forme de profils." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "La page principale affichant deux applications en sortie audio" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "La page de l’amplificateur de basses affichant les commandes audio" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "La page du filtre de convolution affichant les commandes audio" + +#~ msgid "This release adds the following features:" +#~ msgstr "Cette version ajoute les fonctionnalités suivantes :" + +#~ msgid "" +#~ "When effects are disable to an application we now set its target metadata " +#~ "to null. This will allow the media session" +#~ msgstr "" +#~ "Lorsque les effets sont désactivés pour une application, nous définissons " +#~ "désormais ses métadonnées cibles comme étant nulles. Cela permettra à la " +#~ "session média" + +#~ msgid "manager" +#~ msgstr "gestionnaire" + +#~ msgid "" +#~ "A new configuration option was added. It allows EasyEffects to ignore " +#~ "streams whose purpose is to monitor sink" +#~ msgstr "" +#~ "Une nouvelle option de configuration a été ajoutée. Elle permet à " +#~ "EasyEffects d’ignorer les flux dont l’objectif est de surveiller" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr "" +#~ "les périphériques puits. Cela aidera à résoudre certains des problèmes " +#~ "rencontrés par nos utilisateurs lors de l’utilisation d’OBS." + +#~ msgid "The code that shows the stream sample format has been improved" +#~ msgstr "" +#~ "Le code qui affiche le format de l’échantillon de flux a été amélioré" + +#~ msgid "" +#~ "The rnnoise library is now optional. This should help package maintainers " +#~ "to build" +#~ msgstr "" +#~ "La bibliothèque rnnoise est désormais facultative. Cela devrait aider les " +#~ "mainteneurs de paquets à construire" + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "un paquet Debian. Voir le problème n°1000 pour plus d’informations." + +#~ msgid "" +#~ "Our logs now show the source code line where the messages are being " +#~ "printed" +#~ msgstr "" +#~ "Nos journaux (logs) indiquent maintenant la ligne de code source où les " +#~ "messages sont imprimés" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Cette version corrige les bugs suivants :" + +#~ msgid "" +#~ "The \"enable effects\" checkbox in our window was not being updated when " +#~ "third party programs like pavucontrol" +#~ msgstr "" +#~ "La case \"activer les effets\" de notre fenêtre n’était pas mise à jour " +#~ "lorsque des programmes tiers comme pavucontrol" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "déplaçait le flux loin de nos appareils virtuels. Cela devrait être " +#~ "maintenant corrigé." + +#~ msgid "" +#~ "Fixed a crash that could happen when the maximum autogain history was " +#~ "changed." +#~ msgstr "" +#~ "Correction d’un crash qui pouvait se produire lorsque l’historique " +#~ "maximum de l’autogain était modifié." + +#~ msgid "Avoid crashes when pw-mididump is running" +#~ msgstr "Éviter les plantages lorsque pw-mididump est en cours d’exécution" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "L'interface du plugin pitch a été améliorée" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "" +#~ "L'icône de notre application est maintenant compatible avec les " +#~ "ordinateurs de bureau qui utilisent QT" + +#~ msgid "" +#~ "Our blocklist code will use the `application.id` tag if the stream sets it" +#~ msgstr "" +#~ "Notre liste de blocage utilisera la balise `application.id` si le flux la " +#~ "définit" + +#~ msgid "" +#~ "In order to avoid problems with the mouse scroll the entries in the " +#~ "applications list shown in our `Players/Recorders`" +#~ msgstr "" +#~ "Afin d’éviter les problèmes de défilement de la souris, les entrées de la " +#~ "liste d’applications s’affichent dans nos `Lecteurs/Enregistreurs`" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "Les onglets n’affichent plus d’échelle de volume. Plus de détails sur le " +#~ "problème et sa solution peuvent être trouvés sur la page #1211" + +#~ msgid "and #1427" +#~ msgstr "et #1427" + +#~ msgid "" +#~ "When no application is available for display in the `Players/Recorders` a " +#~ "message will be shown to the user" +#~ msgstr "" +#~ "Lorsque aucune application n’est disponible pour l’affichage dans les " +#~ "`Lecteurs/Enregistreurs`, un message sera affiché à l’utilisateur" + +#~ msgid "Many translation updates" +#~ msgstr "Mises à jour des traductions" + +#~ msgid "" +#~ "Fixed a bug where EasyEffects crashed when the number of points displayed " +#~ "in the spectrum was changed while" +#~ msgstr "" +#~ "Correction d’un bug où EasyEffeects plantait lorsque le nombre de points " +#~ "affichés dans le spectre était modifié alors que" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "notre pipeline était active et le widget spectre était visible" + +#~ msgid "" +#~ "The pipeline latency value displayed in our window could be wrong in some " +#~ "situations. This was fixed." +#~ msgstr "" +#~ "La valeur de latence du pipeline affichée dans notre fenêtre peut être " +#~ "incorrecte dans certaines situations. Cela a été corrigé." + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Il y a une nouvelle option permettant à l’utilisateur de sélectionner un " +#~ "délai d’inactivité pour les effets audio. Quand aucun client n’émet de son" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "ou n’enregistre depuis l’un des appareils, les filtres sont déconnectés " +#~ "une fois le délai atteint. Cela permet d’assurer" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "de ne pas gâcher l’utilisation du CPU sur du silence." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "le plugin autogain permet désormais à l’utilisateur de sélectionner " +#~ "lesquelles des trois \"loudness\" sont utilisées pour calculer la moyenne" + +#~ msgid "mean." +#~ msgstr "moyenne géométrique." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "Le plugin autogain permet dorénavant d’indiquer une profondeur " +#~ "d’historique maximum et n’utilise plus le mode histogramme `libebur128`." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Cela devrait permettre d’éviter les cas où le loudness `Integrated` reste " +#~ "toujours coincé à la même valeur." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "L'icone EasyEffect a été mise à jour afin d’être visible dans les bureaux " +#~ "QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Cette version corrige les bugs suivants :" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "L'option de ligne de commande retournant l’état du bypass global " +#~ "fonctionne à nouveau." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Cette version ajoute les fonctionnalités suivantes :" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Le filtre crossfeed devrait mieux gérer les changements de latence " +#~ "dynamiques de PipeWire. Les sauts de volume ne devraient plus se produire " +#~ "dans ces situations." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Correction d’un bug qui empêchait les microphones mono de fonctionner " +#~ "correctement avec EasyEffects" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Support de la prochaine version de PipeWire `0.3.44`" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Le filtre autogain devrait mieux gérer les changements de latence " +#~ "dynamiques de PipeWire. Les sauts de volume ne devraient plus se produire " +#~ "dans ces situations." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Nous avons ajouté une option qui permet de réinitialiser le volume et " +#~ "l’état muet de nos périphériques virtuels au démarrage d’EasyEffects. " +#~ "Cela devrait aider dans les cas où nos périphériques sont mis en sourdine " +#~ "par le serveur audio pour des raisons inconnues." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Meilleure prise en charge de la mise en veille de l’ordinateur." + +#~ msgid "Updated translations" +#~ msgstr "Traductions mises à jour" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Correction d’un bogue où la tentative de créer un profil de chargement " +#~ "automatique sans avoir de préréglages entraînait le plantage de " +#~ "l’application." + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "Correction d’un bug où le réglage de la `qualité` d’une bande d’égaliseur " +#~ "sur `zéro` entraînait un plantage de l’application." + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita est utilisé pour créer certaines parties de notre fenêtre et " +#~ "pour gérer le passage entre les thèmes sombres et clairs." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "" +#~ "Le menu des paramètres a été redessiné en utilisant les widgets " +#~ "LibAdwaita." + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "La fonction d’importation de préréglages de l’égaliseur APO a été " +#~ "améliorée pour appliquer non seulement le filtre Bell, mais aussi " +#~ "d’autres filtres pris en charge" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "La fonction `Réinitialiser toutes les options` de notre menu devrait " +#~ "fonctionner dans Flatpak maintenant." + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "Nous avons une nouvelle option qui permet à l’utilisateur de désactiver " +#~ "nos menus `caché automatiquement`. Cela peut aider à contourner certains " +#~ "bugs que les menus Popover ont actuellement sur gtk4." + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "Analyse syntaxique plus robuste pour importer les préréglages APO " +#~ "enregistrés avec une virgule comme séparateur des milliers dans la bande " +#~ "de fréquence centrale." + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "La bibliothèque fmt est une nouvelle dépendance, du moins tant que les " +#~ "compilateurs c++ n’implémentent pas ses fonctionnalités. Cela devrait " +#~ "arriver dans les prochaines années." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM et GLIBMM ne sont plus des dépendances. Nous utilisons maintenant " +#~ "gtk4 directement." + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "Il est maintenant possible de combiner des réponses d’impulsions dans " +#~ "l’interface de Convolver. Un nouveau fichier d’impulsions est généré et " +#~ "il devrait être visible dans la liste des impulsions." + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "Amélioration du dessin de l’axe X dans nos graphiques. Maintenant le " +#~ "nombre d’étiquettes est ajusté dynamiquement en fonction de la largeur de " +#~ "notre fenêtre." + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "La documentation a été mise à jour en tenant compte des nouvelles " +#~ "fonctionnalités d’EasyEffects. Les anciennes références à PulseEffects " +#~ "ont été supprimées. Le bouton de documentation a été ajouté dans le menu." + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "Lorsqu’un bouton rotatif est rempli avec une valeur hors limites, il est " +#~ "maintenant mis à jour avec la valeur la plus basse/haute plutôt que de " +#~ "revenir à la valeur précédente." + +#~ msgid "" +#~ "The application window now remembers the maximized state and restores it " +#~ "on the next opening event." +#~ msgstr "" +#~ "La fenêtre de l’application se souvient désormais de l’état maximisé et " +#~ "le rétablit lors de la prochaine ouverture." + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "La bibliothèque `tbb` est une nouvelle dépendance" + +#~ msgid "" +#~ "The Limiter and the Multiband Compressor plugins can now use an optional " +#~ "external sidechain." +#~ msgstr "" +#~ "Les plugins Limiteur et Compresseur Multibande peuvent désormais utiliser " +#~ "un sidechain optionnel externe." + +#~ msgid "" +#~ "The Autogain plugin now allows the user to select which Loudness is used " +#~ "as reference for the volume correction." +#~ msgstr "" +#~ "Le plugin Autogain permet désormais à l’utilisateur de sélectionner la " +#~ "Loudness utilisée comme référence pour la correction du volume." + +#~ msgid "" +#~ "The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +#~ "Amplification\" parameter." +#~ msgstr "" +#~ "La fonctionnalité d’import de profil APO du plugin égalisateur utilise " +#~ "désormais le paramètre de \"Pré-Amplification\"." + +#~ msgid "Optional Cubic Volume can be enabled in General Settings." +#~ msgstr "" +#~ "L'option de Volume Cubique peut être activée dans les Paramètres Généraux." + +#~ msgid "" +#~ "PipeWire monitor streams are now excluded and removed from the " +#~ "applications list." +#~ msgstr "" +#~ "Les flux PipeWire de monitoring sont maintenant exclus et retirés de la " +#~ "liste d’applications." + +#~ msgid "Hopefully crashes like the one reported at [1172]( are fixed." +#~ msgstr "" +#~ "Les crashs comme celui signalé en [1172]( sont vraisemblablement corrigés." + +#~ msgid "Prevented a case in which Spectrum was crashing." +#~ msgstr "Une situation entraînant un plantage du Spectre a été évitée." + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "Pavucontrol n’est plus ajouté aux liste d’applications en entrée sur les " +#~ "systèmes ayant une autre langue que l’anglais." + +#~ msgid "" +#~ "Improved compatibility with WirePlumber. This is needed to run on systems " +#~ "that decided to use it instead of the" +#~ msgstr "" +#~ "La compatibilité avec WirePlumber a été améliorée. C'est nécessaire pour " +#~ "les systèmes ayant décidé de l’utiliser plutôt que" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "Le gestionnaire de sessions PipeWire fourni. Plus d’informations dans " +#~ "l’issue [1144](" + +#~ msgid "" +#~ "When trying to add an autoloading profile for a device already in the " +#~ "list its target preset will be updated. This way we can change the " +#~ "profile preset without having to remove and recreating it." +#~ msgstr "" +#~ "Lors d’un ajout d’un profil automatique pour un appareil déjà dans la " +#~ "liste, ses presets cibles seront mis à jour. Ainsi, on peut modifier le " +#~ "preset du profil sans le retirer et la re-créer." + +#~ msgid "" +#~ "The preset autoloading support implementation was redesigned again. It " +#~ "should work on more hardware now. For more information see issue [1051](" +#~ msgstr "" +#~ "L'implémentation de la prise en charge du chargement automatique des " +#~ "préréglages a encore été repensée. Elle devrait fonctionner sur plus de " +#~ "matériel maintenant. Pour plus d’informations, consultez le numéro [1051](" + +#~ msgid "" +#~ "If the Limiter or the Maximizer are set in the last position of the " +#~ "plugin stack, new plugins are added at the second to last position in " +#~ "order to prevent hardware damage on eventually high output level." +#~ msgstr "" +#~ "Si le limiteur ou le maximizeur sont placés à la dernière position de la " +#~ "liste des plugins, les nouveaux plugins sont ajoutés à l’avant-dernière " +#~ "position afin d’éviter des dommages matériels dû à un niveau de sortie " +#~ "potentiellement élevé." + +#~ msgid "" +#~ "Removing an application from the blocklist, its previous enabled state is " +#~ "restored." +#~ msgstr "" +#~ "En retirant une application de la liste de blocage, son état d’activation " +#~ "précédent est restauré." + +#~ msgid "" +#~ "Sometimes when removing imported models from the noise reduction plugin " +#~ "the current used model was not properly updated. This should be fixed now." +#~ msgstr "" +#~ "Parfois, lors de la suppression de modèles importés du plugin de " +#~ "réduction du bruit, le modèle actuellement utilisé n’était pas " +#~ "correctement mis à jour. Cela devrait être corrigé maintenant." + +#~ msgid "" +#~ "When editing presets files in an external editor, duplicated entries " +#~ "won't be shown in our presets menu." +#~ msgstr "" +#~ "Lorsque vous modifiez des fichiers de préréglages dans un éditeur " +#~ "externe, les entrées dupliquées n’apparaîtront pas dans notre menu de " +#~ "préréglages." + +#~ msgid "Now the blocklist is correctly set when switching presets." +#~ msgstr "" +#~ "Maintenant, la liste de blocage est correctement définie lors du " +#~ "changement de préréglage." + +#~ msgid "" +#~ "Now the status of the global bypass button is correctly updated when " +#~ "changing plugin stack." +#~ msgstr "" +#~ "Désormais, l’état du bouton de contournement global est correctement mis " +#~ "à jour lors du changement de pile de plugins." + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Les icônes manquantes sur le système ne doivent pas être affichées dans " +#~ "l’interface d’information de l’application" + +#~ msgid "" +#~ "Some icons not showing in Plasma DE with Breeze icon theme should appear " +#~ "now." +#~ msgstr "" +#~ "Certaines icônes qui n’apparaissaient pas dans Plasma DE avec le thème " +#~ "d’icônes Breeze devraient maintenant apparaître." + +#~ msgid "Updated Chinese translation." +#~ msgstr "Mise à jour de la traduction chinoise." + +#~ msgid "Updated Italian translation." +#~ msgstr "Mise à jour de la traduction italienne." + +#~ msgid "Added support for the compressor parameter `Boost Amount`" +#~ msgstr "Ajout du support pour le paramètre du compresseur `Boost Amount`" + +#~ msgid "" +#~ "The multiband compressor plugin now uses the stereo multiband compressor " +#~ "plugin from Linux Studio Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Le plugin de compresseur multibande utilise maintenant le plugin de " +#~ "compresseur multibande stéréo de Linux Studio Plugins au lieu de celui de " +#~ "Calf Studio." + +#~ msgid "" +#~ "The limiter plugin now uses the stereo limiter plugin from Linux Studio " +#~ "Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Le plugin limiteur est désormais celui de Linux Studio Plugins au lieu de " +#~ "celui de Calf Studio." + +#~ msgid "" +#~ "LV2 filters now are spawned in PipeWire graph only when loaded the first " +#~ "time. Once loaded, they remain connected until EasyEffects shutdown." +#~ msgstr "" +#~ "Les filtres LV2 sont désormais créés dans le graphe PipeWire uniquement " +#~ "lorsqu’ils sont chargés pour la première fois. Une fois chargés, ils " +#~ "restent connectés jusqu’à l’arrêt d’EasyEffects." + +#~ msgid "The echo canceller sampling rate is now properly set." +#~ msgstr "" +#~ "Le taux d’échantillonnage de l’annuleur d’écho est maintenant " +#~ "correctement réglé." + +#~ msgid "" +#~ "The threshold parameter from the deesser plugin is now saved to the " +#~ "preset file." +#~ msgstr "" +#~ "Le paramètre de seuil du plugin Deesser est maintenant enregistré dans le " +#~ "fichier de présélection." + +#~ msgid "" +#~ "Improved band splitting for crystalizer with new default intensity values." +#~ msgstr "" +#~ "Division de bandes améliorée pour le cristalliseur avec de nouvelles " +#~ "valeurs d’intensité par défaut." + +#~ msgid "" +#~ "Depending on the input gain or output gain values the corresponding level " +#~ "bars could not be aligned." +#~ msgstr "" +#~ "Selon les valeurs du gain d’entrée ou du gain de sortie, les barres de " +#~ "niveau correspondantes ne pouvaient pas être alignées." + +#~ msgid "" +#~ "When adding more equalizer bands they are set to `Bell` instead of `Off`." +#~ msgstr "" +#~ "Lorsque vous ajoutez d’autres bandes d’égaliseur, elles sont réglées sur " +#~ "`Bell` au lieu de `Off`." + +#~ msgid "" +#~ "Equalizer APO presets loading is now working properly on locales " +#~ "different than C." +#~ msgstr "" +#~ "Le chargement des préréglages de l’Equalizer APO fonctionne désormais " +#~ "correctement dans les langues autres que C." + +#~ msgid "Improved linking management between port filter nodes in PipeWire." +#~ msgstr "" +#~ "Amélioration de la gestion des liens entre les nœuds de filtre de port " +#~ "dans PipeWire." + +#~ msgid "" +#~ "The crystalizer plugin signal amplification was too high before. It " +#~ "should be within more reasonable levels now." +#~ msgstr "" +#~ "L'amplification du signal du plugin du cristalliseur était trop élevée " +#~ "avant. Elle devrait se situer dans des niveaux plus raisonnables " +#~ "maintenant." + +#~ msgid "" +#~ "Improved the resampler used in the plugins that require one(like the " +#~ "rnnoise plugin)" +#~ msgstr "" +#~ "Amélioration du rééchantillonneur utilisé dans les plugins qui en " +#~ "nécessitent un (comme le plugin rnnoise)" + +#~ msgid "Setting multiple autoloading presets should be fine now" +#~ msgstr "" +#~ "La configuration de plusieurs préréglages auto-chargeant devrait être " +#~ "correcte maintenant" + +#~ msgid "Transient windows are now properly set for some plugins dialogs" +#~ msgstr "" +#~ "Les fenêtres transitoires sont désormais correctement définies pour " +#~ "certaines boîtes de dialogue de plugins" + +#~ msgid "" +#~ "The convolver impulse response menu was improved to workaround an issue " +#~ "where the impulse files was not loaded when only one was available in the " +#~ "menu" +#~ msgstr "" +#~ "Le menu des réponses impulsionnelles du convolver a été amélioré pour " +#~ "résoudre un problème où les fichiers impulsionnels n’étaient pas chargés " +#~ "lorsqu’un seul était disponible dans le menu" + +#~ msgid "" +#~ "Fixed a bug that could make the pitch plugin to not be properly " +#~ "initialized" +#~ msgstr "" +#~ "Correction d’un bogue qui pouvait empêcher l’initialisation correcte du " +#~ "plugin \"pitch\"" + +#~ msgid "" +#~ "The saturation warning should not displace its neighbor widgets anymore" +#~ msgstr "" +#~ "L'avertissement de saturation ne doit plus déplacer les widgets voisins" + +#~ msgid "Fixed the locale in a few widgets" +#~ msgstr "Correction des paramètres régionaux dans quelques widgets" + +#~ msgid "Fixed wrong alignment in a few widgets" +#~ msgstr "Correction d’un mauvais alignement dans quelques widgets" + +#~ msgid "" +#~ "The Loudness plugin is being used again for the reasons described at This " +#~ "means that is an optional dependency again." +#~ msgstr "" +#~ "Le plugin Loudness est réutilisé pour les raisons décrites dans. Cela " +#~ "signifie qu’il s’agit à nouveau d’une dépendance facultative." + +#~ msgid "" +#~ "Fixed a segmentation fault that happened when optional dependencies were " +#~ "not installed" +#~ msgstr "" +#~ "Correction d’un défaut de segmentation qui se produisait lorsque les " +#~ "dépendances facultatives n’étaient pas installées" + +#~ msgid "Improved equalizer interface." +#~ msgstr "Interface de l’égaliseur améliorée." + +#~ msgid "" +#~ "Now we use a sidechain LSP compressor that allows the user to select and " +#~ "external source as the sidechain input." +#~ msgstr "" +#~ "Nous utilisons maintenant un compresseur sidechain LSP qui permet à " +#~ "l’utilisateur de sélectionner une source externe comme entrée sidechain." + +#~ msgid "We now support the LSP compressor `Boosting` mode." +#~ msgstr "Nous supportons maintenant le mode `Boosting` du compresseur LSP." + +#~ msgid "" +#~ "When `split-channels` is enabled in the equalizer the imported APO preset " +#~ "will be applied only to the channel being visualized in the window. This " +#~ "will allow to import different presets for each channel instead of just " +#~ "settings the same values to both." +#~ msgstr "" +#~ "Quand `split-channels` est activé dans l’égaliseur, le préréglage APO " +#~ "importé sera appliqué seulement au canal visualisé dans la fenêtre. Cela " +#~ "permet d’importer des préréglage différents pour chaque canal au lieu de " +#~ "régler les mêmes valeurs pour les deux." + +#~ msgid "" +#~ "Fixed some segmentation faults that could happen when creating a preset " +#~ "autoloading profile or removing presets" +#~ msgstr "" +#~ "Correction de certaines erreurs de segmentation qui pouvaient survenir " +#~ "lors de la création d’un profil de chargement automatique prédéfini ou de " +#~ "la suppression de préréglages" + +#~ msgid "" +#~ "This is one of the biggest releases that I have ever made. The amount of " +#~ "changes is so big that it is hard to talk about everything here." +#~ msgstr "" +#~ "C'est l’une des plus grosses versions que j'ai jamais faite. La quantité " +#~ "de changements est si importante qu’il est difficile de parler de tout " +#~ "ici." + +#~ msgid "" +#~ "The following are just the most import ones. People interested on the " +#~ "journey that got us here can take" +#~ msgstr "" +#~ "Voici les plus importantes d’entre elles. Les personnes intéressées par " +#~ "le voyage qui nous a mené jusqu’ici peuvent" + +#~ msgid "a look at and" +#~ msgstr "regarder et" + +#~ msgid "" +#~ "The application and its repository have been renamed from PulseEffects to " +#~ "`EasyEffects`" +#~ msgstr "" +#~ "L'application et son dépôt ont été renommés de PulseEffects à " +#~ "`EasyEffects`" + +#~ msgid "gtkmm3 was replaced by gtkmm4" +#~ msgstr "gtkmm3 a été remplacé par gtkmm4" + +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "Gstreamer a été remplacé par des filtres natifs PipeWire." + +#~ msgid "" +#~ "Many features were reimplemented from scratch. The preset autoloading is " +#~ "one example. Another remarkable change will be seen in the plugins " +#~ "selection menu. Now the user can show in the window only the plugins that " +#~ "he/she wants to use." +#~ msgstr "" +#~ "De nombreuses fonctionnalités ont été réimplémentées à partir de zéro. Le " +#~ "chargement automatique des préréglages en est un exemple. Un autre " +#~ "changement remarquable se trouve dans le menu de sélection des plugins. " +#~ "Désormais, l’utilisateur peut afficher dans la fenêtre uniquement les " +#~ "plugins qu’il souhaite utiliser." + +#~ msgid "" +#~ "Boost is no longer a dependency. The price paid for that was a little " +#~ "change in our presets structures. With some patience it is possible to " +#~ "edit PulseEffects presets in a text editor and make them work in " +#~ "EasyEffects. Hopefully someone will come up with a script for this in the " +#~ "feature." +#~ msgstr "" +#~ "Boost n’est plus une dépendance. Le prix à payer pour cela a été un petit " +#~ "changement dans la structure de nos préréglages. Avec un peu de patience, " +#~ "il est possible d’éditer les préréglages PulseEffects avec un éditeur de " +#~ "texte et de les faire fonctionner dans EasyEffects. Quelqu’un proposera " +#~ "peut-être un script pour cela prochainement." + +#~ msgid "" +#~ "New libraries are being used and some of the librarires that were " +#~ "optional before are now required" +#~ msgstr "" +#~ "De nouvelles bibliothèques sont utilisées et certaines d’entre elles, qui " +#~ "étaient auparavant facultatives, sont désormais obligatoires" + +#~ msgid "Average" +#~ msgstr "Moyenne" + +#~ msgid "Failed" +#~ msgstr "Échec" + +#~ msgid "Use Default" +#~ msgstr "Utiliser la valeur par défaut" + +#~ msgid "Remove this plugin" +#~ msgstr "Supprimer ce plugin" + +#~ msgid "Import Presets" +#~ msgstr "Ouvrir préréglage" + +#~ msgid "Start Service at Login" +#~ msgstr "Lancer le service au démarrage" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Réinitialiser le volume au démarrage" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aucune compression" + +#~ msgid "Add to Blocklist" +#~ msgstr "Ajouter à la liste de blocage" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibration de la correction microphone" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Table sinusoïdale" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Table sinusoïdale" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latence" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Gain d'entrée [dB]" + +#, fuzzy +#~ msgid "Output Effects" +#~ msgstr "Limiteur d'entrée" + +#~ msgid "Settings" +#~ msgstr "Paramètres" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Paramètres" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Calibration" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Signal de test" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Signal de test" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spectromètre" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spectromètre" + +#, fuzzy +#~ msgid "Spectrum Color" +#~ msgstr "Spectromètre" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Réduction de gain" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "Niveau" + +#~ msgid "Input Limiter" +#~ msgstr "Limiteur d'entrée" + +#~ msgid "Calibration" +#~ msgstr "Calibration" + +#, fuzzy +#~ msgid "Limit" +#~ msgstr "Limite [dB]" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Effets audio pour applications PulseAudio" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Effets audio pour applications PulseAudio" + +#, fuzzy +#~ msgid "Calibration Microphone" +#~ msgstr "Calibration de la correction microphone" + +#~ msgid "Sine" +#~ msgstr "Sinusoïde" + +#~ msgid "Square" +#~ msgstr "Carrée" + +#~ msgid "Saw" +#~ msgstr "Dent de scie" + +#~ msgid "Triangle" +#~ msgstr "Triangle" + +#~ msgid "Pink Noise" +#~ msgstr "Bruit rose" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Bruit Gaussien" + +#~ msgid "Blue Noise" +#~ msgstr "Bruit bleu" + +#~ msgid "Violet Noise" +#~ msgstr "Bruit violet" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Measure Noise" +#~ msgstr "Mesurer le bruit" + +#~ msgid "Subtract Noise" +#~ msgstr "Enlever le bruit" + +#, fuzzy +#~ msgid "High" +#~ msgstr "Passe-haut" + +#, fuzzy +#~ msgid "Very High" +#~ msgstr "Passe-haut" + +#, fuzzy +#~ msgid "Detection Likelihood" +#~ msgstr "Atténuation" + +#, fuzzy +#~ msgid "Select the impulse Response File" +#~ msgstr "Réponse plane" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Aucune compression" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Calibration" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Paramètres" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Préréglage" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Atténuation" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Fréquence [Hz]" + +#, fuzzy +#~ msgid "Buffer" +#~ msgstr "Latence" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Égaliseur - Sortie" + +# Taking lingual shortcuts to squeeze it in the text box +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Taille pièce" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Ouvrir préréglage" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Réduction de gain" + +#~ msgid "Red Noise" +#~ msgstr "Bruit rouge" + +#, fuzzy +#~ msgid "Noise Suppressor" +#~ msgstr "Compresseur" + +#, fuzzy +#~ msgid "Voice Detector" +#~ msgstr "Atténuation" diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..adc2526 --- /dev/null +++ b/po/gl.po @@ -0,0 +1,3572 @@ +# Galician translation for EasyEffects +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# Xosé , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-12-31 05:51+0000\n" +"Last-Translator: gallegonovato \n" +"Language-Team: Galician \n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.15.1-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ecualizador, compresor e outros efectos de son" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de son para aplicacións PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitador;compresor;reverberación;ecualizador;volume automático;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "«Preconfiguracións»" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Activado" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +#, fuzzy +msgid "Mute Application" +msgstr "Aplicacións" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +#, fuzzy +msgid "Application Volume" +msgstr "Aplicacións" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Axuda" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Configuración" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Preferencias" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Atallos de teclado" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "_Sobre EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Preconfiguracións" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menú de preconfiguracións" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Desvío global" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menú primario" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "Xanela de EasyEffects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Lista de aplicacións" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Paredes baleiras" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Aplicacións" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Restabelecer historial" + +#: data/ui/autogain.ui:39 +#, fuzzy +msgid "Controls" +msgstr "Controlador de ganancia" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Destino" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silencio" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Máximo" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referencia" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentáneo" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Curto prazo" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrado" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Empregar media xeométrica" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Empregar media xeométrica" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Empregar media xeométrica" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Empregar media xeométrica" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Sonoridade" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativo" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Intervalo" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Ganancia da saída" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Entrada" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Saída" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Saída" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Saída" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Restabelecer" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Dispositivo" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nome" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Perfíl" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Preconfiguración" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Retirar este ficheiro de preconfiguracións" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Escoitar" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mesturar harmónicos" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3.º" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2.º" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Cantidade" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmónicos" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Ámbito" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Chan" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Chan" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Ligazón" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Aplicacións" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Mostrar aplicacións bloqueadas na lapela principal" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Aplicacións" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Mostrar aplicacións bloqueadas na lapela principal" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Agochar a xanela." + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modo" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Descendente" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Ascendente" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Modo de compresión" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Limiar de realce" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Cantidade" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Ataque" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Tempo" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Limiar" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Ataque" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Limiar" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Soltar" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "Soltar" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Limiar da solta relativa" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Proporción" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Xeonllo" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Restauración" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Nivel F2" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Nivel do destino" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Cadea lateral" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Base de estéreo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Fonte" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Medio" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Lado" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Esquerda" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Dereita" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Mínimo" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Máximo" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Cadea lateral" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Delonga E/D" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Dereita" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Lado" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Lado" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Fonte predeterminada" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Pico" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Modo de filtro de frecuencias altas" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Cadea lateral" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Cadea lateral" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipo" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Remitir" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Retroalimentar" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Externo" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Cadea lateral" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Nivel de entrada" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Preamplificación" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reactividade" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Delonga máxima" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Cadea lateral" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Paso alto" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frecuencia" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Desactivado" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Modo de filtro de frecuencias altas" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Frecuencias altas" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Frecuencias baixas" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Modo de filtro de frecuencias altas" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Ganancia" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "E" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Canles" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "D" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Dividir canles" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsos" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Combinar" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Largura do estéreo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Espectro" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +#, fuzzy +msgid "Autogain" +msgstr "Ganancia automática" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Taxa" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Mostras" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Duración" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Resposta de impulso" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +#, fuzzy +msgid "Output File Name" +msgstr "Saída" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importar impulso" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Buscar" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Importar ficheiro de impulso" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Importar ficheiro de impulso" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Predeterminado" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Corte" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Fonte" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Desvío" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Silenciar" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detección" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Amplo" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Dividir" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "División F1" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "Pico F2" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "Ganancia F1" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "Nivel F2" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "Pico F2 Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frecuencia" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Laxitude" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detectado" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Redución" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Delonga" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inverter fase" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Atenuación" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filtro" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Supresión de ruído" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Supresión de ruído" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balance" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Cadea lateral" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Cadea lateral" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Dividir canles" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Resposta plana" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calcular frecuencias" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Ordealas Bandas" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +#, fuzzy +msgid "Import Preset" +msgstr "Importar preconfiguración" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pendente" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Calidade" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Largura" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Teito" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Bandas" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Externo" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Acceso" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Descrición" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Retirar este ficheiro de preconfiguracións" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Andel baixo" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Andel alto" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Campaíña" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Desvío" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Entalla" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonancia" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Frecuencias baixas" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Redución de ganancia" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Todos os pasos" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ecualizador" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Porta" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Soltar" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frecuencia" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sobremostraxe" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Amplo" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Amplo" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Largura de liña" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Largura de liña" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Largura de liña" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ningunha" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Preamplificación" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Ligazón estéreo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Cadea lateral" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Nivelación automática" + +#: data/ui/limiter.ui:537 +#, fuzzy +msgid "Auto Leveling Attack" +msgstr "Nivelación automática" + +#: data/ui/limiter.ui:573 +#, fuzzy +msgid "Auto Leveling Release" +msgstr "Nivelación automática" + +#: data/ui/limiter.ui:608 +#, fuzzy +msgid "Auto Leveling Knee" +msgstr "Nivelación automática" + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Esquerda" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Dereita" + +#: data/ui/limiter.ui:687 +#, fuzzy +msgid "Sidechain Left" +msgstr "Cadea lateral" + +#: data/ui/limiter.ui:714 +#, fuzzy +msgid "Sidechain Right" +msgstr "Cadea lateral" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Estándar" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Plano" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Tamaño de FFT" + +#: data/ui/loudness.ui:82 +#, fuzzy +msgid "Output Volume" +msgstr "Saída" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Asignación de canles" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Teito" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Cadea lateral" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +#, fuzzy +msgid "Operating Mode" +msgstr "Importar modelo" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Clásico" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderno" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Inverter fase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +#, fuzzy +msgid "Bands List" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +#, fuzzy +msgid "Band 1" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +#, fuzzy +msgid "Band 2" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +#, fuzzy +msgid "Band 3" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +#, fuzzy +msgid "Band 4" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +#, fuzzy +msgid "Band 5" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +#, fuzzy +msgid "Band 6" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +#, fuzzy +msgid "Band 7" +msgstr "Bandas" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +#, fuzzy +msgid "Band 8" +msgstr "Bandas" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +#, fuzzy +msgid "Band End" +msgstr "Bandas" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Modo de compresión" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Desvío" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +#, fuzzy +msgid "Band Sidechain Options" +msgstr "Cadea lateral" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Base de estéreo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Modo de filtro de frecuencias baixas" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Modo de filtro de frecuencias baixas" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtro de altas frecuencias" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Filtro de altas frecuencias" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Ganancia F1" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +#, fuzzy +msgid "Band Curve" +msgstr "Curva" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Redución de ganancia" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Xeral" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Empregar o predeterminado" + +#: data/ui/pipe_manager_box.ui:65 +#, fuzzy +msgid "Custom Input Device" +msgstr "Nivel de entrada" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Empregar o predeterminado" + +#: data/ui/pipe_manager_box.ui:101 +#, fuzzy +msgid "Custom Output Device" +msgstr "Saída" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Reverberación" + +#: data/ui/pipe_manager_box.ui:116 +#, fuzzy +msgid "Header Version" +msgstr "Versión" + +#: data/ui/pipe_manager_box.ui:127 +#, fuzzy +msgid "Library Version" +msgstr "Versión" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Taxa da mostraxe predeterminada" + +#: data/ui/pipe_manager_box.ui:149 +#, fuzzy +msgid "Minimum Quantum" +msgstr "Máximo" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Ganancia máxima" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Saída de son por defecto" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "Saída" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +#, fuzzy +msgid "Output Presets" +msgstr "Preconfiguracións de saída: " + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +#, fuzzy +msgid "Output Autoloading Presets List" +msgstr "Preconfiguracións de saída: " + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "Nivel de entrada" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +#, fuzzy +msgid "Input Presets" +msgstr "Preconfiguracións de entrada: " + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Preconfiguracións de entrada: " + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:429 +#, fuzzy +msgid "Modules List" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:461 +#, fuzzy +msgid "Clients List" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:475 +#, fuzzy +msgid "Test Signal" +msgstr "Sinais de proba" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Estado" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Activado" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Propiedades" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canles" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Ambos" + +#: data/ui/pipe_manager_box.ui:530 +#, fuzzy +msgid "Both Channels" +msgstr "Canles" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Forma de onda" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Táboa de senos" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Ruído branco" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frecuencia" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Xanela" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filtro" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Ton" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitóns" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Referencia" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Referencia" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Retirar este ficheiro de preconfiguracións" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +#, fuzzy +msgid "Add Effect" +msgstr "Efectos de entrada" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Xeral" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Servizo" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Procesar todas as saí­das" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Procesar todas as entradas" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +#, fuzzy +msgid "Inactivity Timeout" +msgstr "Tempo límite da actividade" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Estilo" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Empregar tema escuro" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimental" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Agochar a xanela." + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Espectro" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Forma" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barras" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Liñas" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Puntos" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Puntos" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Altura" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Largura de liña" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Encher" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Cor" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +#, fuzzy +msgid "Frequency Range" +msgstr "Frecuencia" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Mínimo" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Máximo" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Cargar" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Gardar as opcións actuais neste ficheiro de preconfiguracións" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Gardar as opcións actuais neste ficheiro de preconfiguracións" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Retirar este ficheiro de preconfiguracións" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Preconfiguracións de entrada: " + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Sen preconfiguración" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Importar preconfiguración" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Preconfiguracións de entrada: " + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Preconfiguracións de entrada: " + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Amortecemento de frecuencias altas" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Tamaño da sala" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Pequena" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Media" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Túnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/suave" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difusión" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Delonga previa" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Tempo de decaemento" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Paso alto" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Corte de agudos" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiente" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Paredes baleiras" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Sala" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Sala de concertos grande baleira" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Sala de concertos grande ocupada" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importar modelo" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Detector de voces" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modelos" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +#, fuzzy +msgid "Standard Model" +msgstr "Modelo RNNoise estándar" + +#: data/ui/rnnoise.ui:205 +#, fuzzy +msgid "RNNoise Models List" +msgstr "Modelo RNNoise estándar" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Modelo activo" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Modelo RNNoise estándar" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Vista xeral" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +#, fuzzy +msgid "Close the Window" +msgstr "Agochar a xanela." + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "EasyEffects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Ruído vermello" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Control de suavizado automático" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Reverberación" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Supresión de ruído" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Nivel F2" + +#: data/ui/stereo_tools.ui:79 +#, fuzzy +msgid "Input Balance" +msgstr "Balance" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Compresión de ganancia" + +#: data/ui/stereo_tools.ui:116 +#, fuzzy +msgid "Softclip Level" +msgstr "Compresión de ganancia" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matriz estéreo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "DE>DE (Predeterminado de estéreo)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "ED>M (Estéreo a medio)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "M>ED (Medio a estéreo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "ED>EE (Mono canle esquerda)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "ED>DD (Mono canle dereita)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "ED>E+D(Mono suma de E+D)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "ED>DE (Canles estéreo invertidas)" + +#: data/ui/stereo_tools.ui:151 +#, fuzzy +msgid "Stereo Mode" +msgstr "Base de estéreo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Nivel lateral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balance lateral" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Nivel medio" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama medio" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "Saída" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Delonga E/D" + +#: data/ui/stereo_tools.ui:460 +#, fuzzy +msgid "Delay Left Right" +msgstr "Delonga E/D" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base de estéreo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fase estéreo" + +#: src/app_info.cpp:65 +#, fuzzy +msgid "Running" +msgstr "en execución" + +#: src/app_info.cpp:67 +#, fuzzy +msgid "Suspended" +msgstr "suspendido" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "a crear" + +#: src/app_info.cpp:73 +#, fuzzy +msgid "Error" +msgstr "erro" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Canles" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Saír do EasyEffects. É últil cando se executa no modo de servizo." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Cargar unha preconfiguración. Exemplo: pulseefects-l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Restabelecer EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Agochar a xanela." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Desvío global. 1 para activar, 2 para desactivar e 3 para coñecer o estado" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Mostrar preoconfiguracións dispoñíbeis." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Saída" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Entrada" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Importar ficheiro de impulso" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importar ficheiro de impulso" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Abrir" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Resposta de impulso" + +#: src/convolver_menu_impulses.cpp:265 +#, fuzzy +msgid "Load Impulse" +msgstr "Resposta de impulso" + +#: src/convolver_menu_impulses.cpp:268 +#, fuzzy +msgid "Remove Impulse" +msgstr "Importar impulso" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Importar ficheiro de impulso" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "Non foi posíbel cargar o ficheiro de impulso" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Gravadoras" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Reprodutores" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importar ficheiro de preconfiguracións de APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Preconfiguracións de APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Importar ficheiro de preconfiguracións de APO" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Preconfiguracións de entrada: " + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +#, fuzzy +msgid "Remove Autoloading Preset" +msgstr "Retirar este ficheiro de preconfiguracións" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Saída" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Eliminar" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Saída" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Engadir" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importar ficheiro de modelo" + +#: src/rnnoise_ui.cpp:151 +#, fuzzy +msgid "RNNoise Models" +msgstr "Modelo RNNoise estándar" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Mellora de baixos" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "Sonoridade" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolución" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristalizador" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Cancelador de cco" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ecualizador" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitación" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Saída" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limitador" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizador" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compresor multibanda" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Porta multibanda" + +#: src/tags_plugin_name.cpp:54 +#, fuzzy +msgid "Reverberation" +msgstr "Reverberación" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Redución de ruído" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Ferramentas de estéreo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Usando" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Modo de filtro de frecuencias baixas" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de altas frecuencias" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Preconfiguracións de saída: " + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Preconfiguracións de saída: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Preconfiguracións de saída: " + +#~ msgid "infinity" +#~ msgstr "infinito" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#, fuzzy +#~ msgid "FFT" +#~ msgstr "Transformada rápida de Fourier" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Proporción" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Frecuencias baixas" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Paso alto" + +#~ msgid "Gating" +#~ msgstr "Limiar dinámico" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Paso baixo 12dB/oct" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Paso baixo 24dB/oct" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Paso baixo 36dB/oct" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Paso alto 12dB/oct" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Paso alto 24dB/oct" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Paso alto 36dB/oct" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Paso de banda 6dB/oct" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Paso de banda 12dB/oct" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Paso de banda 18dB/oct" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Rexeita faixa 6dB/oct" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Rexeita faixa 12dB/oct" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Rexeita faixa 18dB/oct" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendente" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Sonoridade" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Andel alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidade" + +#~ msgid "Preserved" +#~ msgstr "Preservado" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Limpidez" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Compresión de ganancia" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Octaves" +#~ msgstr "Oitavas" + +#~ msgid "_Manual" +#~ msgstr "_Manual" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Restabelecer EasyEffects." + +#~ msgid "High Pass" +#~ msgstr "Frecuencias altas" + +#~ msgid "Low Pass" +#~ msgstr "Frecuencias baixas" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Preamplificación" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño de fotograma" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Frecuencias baixas" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Delonga previa" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Dividir canles" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Nivel F2" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Nivel F2" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Nivel do destino" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Nivel do destino" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Nivel de supresión" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de son para as aplicacións de PulseAudio" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Redución de ruído" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Preconfiguracións de APO" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Preconfiguracións de saída: " + +#~ msgid "Input Presets: " +#~ msgstr "Preconfiguracións de entrada: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub-banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Restauración" + +#~ msgid "Max Reduction" +#~ msgstr "Redución" + +#~ msgid "Low Band" +#~ msgstr "Banda baixa" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redución de ganancia" + +#~ msgid "Mid Band" +#~ msgstr "Banda media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redución de ganancia" + +#~ msgid "High Band" +#~ msgstr "Banda alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantidade" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantidade" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "O EasyEffects é unha ferramenta avanzada de manipulación de son. Inclúe " +#~ "ferramentas como ecualizador, limitador, compresor e reverberación, por " +#~ "mencionar só algunhas. Para complementalas, incorpora tamén un analizador " +#~ "de espectros." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects é o sucesor de PulseEffects. EasyEffects só admite o servidor " +#~ "de son de PipeWire. Os usuarios de PulseAudio deberían usar no lugar " +#~ "PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Dado que o EasyEffects emprega o servidor de son PipeWire predeterminado " +#~ "debería funcionar coa maioría, se non todas, as aplicacións que use. " +#~ "Todas as aplicacións admitidas preséntanse na xanela principal, na que é " +#~ "posíbel activar cada unha delas individualmente." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Ademais de manipular a saída de son, o EasyEffects pode aplicar efectos a " +#~ "un dispositivo de entrada, como un micrófono. Isto é útil, por exemplo, " +#~ "para gravar son, mais tamén funciona ben durante as conversas de voz." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Ao iniciar, EasyEffects lembra a configuración empregada na sesión " +#~ "anterior. Tamén é posíbel gardar as opcións actuais como perfís." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "A páxina principal que mostra dúas aplicacóns con saída de son" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "A páxina do mellorador de baixos mostrando os controles de son" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "A páxina do convolucionador mostrando os controles de son" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta publicación engade as seguintes características:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Esta publicación arranxa os seguintes erros:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Hai unha nova configuración que lle permite ao usuario seleccionar un " +#~ "tempo de espera de inactividade para o pipeline. Cando non hai un cliente " +#~ "reproducindo" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "ou gravando desde os seus dispositivos os filtros desligaranse despois " +#~ "dun tempo. Isto faise para asegurarse que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "non gasta enerxía no procesador sen que se entere." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Isto debería evitar os casos onde o volume «Integrado» bloquease sempre " +#~ "no mesmo valor." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "A icona de EasyEffects foi actualizada para que poida verse mellor en " +#~ "escritorios QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta publicación arranxa o seguinte erro:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "A opción de liña de ordes que devolve un estado bypass global está " +#~ "funcionando de novo." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esta publicación engade a seguinte característica:" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Compatibilidade para a seguinte publicación de Pipewire 0.3.44" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Arranxouse un erro ao tentar crear un perfil de autocarga sen ter " +#~ "preconfiguracions causados por unha quebra da aplicación" + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "Úsase LibAdwaita para crear algunhas partes da nosa xanela e para " +#~ "xestionar o troque entre temas escuro e claro." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "" +#~ "O menú de preferencias foi redeseñado empregando trebellos de LibAdwaita." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM e GLIBMM xa non son dependencias. Agora usamos gtk4 directamente." + +#~ msgid "Average" +#~ msgstr "Media" + +#~ msgid "Failed" +#~ msgstr "Fallou" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Empregar o predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Retirar este ficheiro de preconfiguracións" + +#~ msgid "Import Presets" +#~ msgstr "Importar preconfiguración" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar automaticamente coa sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modelo activo" + +#~ msgid "Add to Blocklist" +#~ msgstr "Engadir á lista de bloqueo" + +#~ msgid "Blocklist" +#~ msgstr "Lista de bloqueos" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibración do micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Activar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Activar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "idle" +#~ msgstr "ocioso" + +#~ msgid "Faster" +#~ msgstr "Máis rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar formante" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Saída" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Canles" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Chan" + +#~ msgid "Output Effects" +#~ msgstr "Efectos de saída" + +#~ msgid "Settings" +#~ msgstr "Configuración" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Configuración" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Duración" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Sinais de proba" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Sinais de proba" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar espectro" + +#~ msgid "Border" +#~ msgstr "Bordo" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de espectro" + +#~ msgid "Spectrum Color" +#~ msgstr "Cor do espectro" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Modelo activo" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Redución máxima da ganancia" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Ponderacións" + +#~ msgid "Dry" +#~ msgstr "Seco" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Short Term" +#~ msgstr "Curto prazo" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Fixación do volume e des/activación dos efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Inclúe un ecualizador con preconfiguracións incorporadas" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Efectos de son para as aplicacións de PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Efectos de son para as aplicacións de PulseAudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Calibración do micrófono" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Aplicar esta preconfiguración automaticamente sempre que o dispositivo en " +#~ "uso estea conectado ao sistema" + +#~ msgid "Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Default Devices and Sampling Rate" +#~ msgstr "Taxa da mostraxe predeterminada" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cadrado" + +#~ msgid "Saw" +#~ msgstr "Serra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Pink Noise" +#~ msgstr "Ruído rosa" + +#~ msgid "Ticks" +#~ msgstr "Marcas" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruído gaussiano" + +#~ msgid "Blue Noise" +#~ msgstr "Ruído azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruído violeta" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Measure Noise" +#~ msgstr "Medir ruído" + +#~ msgid "Subtract Noise" +#~ msgstr "Subtraer ruído" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Provided by" +#~ msgstr "Fornecido por" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro estendido" + +#~ msgid "Low" +#~ msgstr "Baixo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alta" + +#~ msgid "Delay Agnostic" +#~ msgstr "Agnóstico coa delonga" + +#~ msgid "Very High" +#~ msgstr "Moi alta" + +#~ msgid "Adaptive Digital" +#~ msgstr "Dixital adaptativo" + +#~ msgid "Fixed Digital" +#~ msgstr "Dixital fixo" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidade de detección" + +#~ msgid "Very Low" +#~ msgstr "Moi baixa" + +#~ msgid "Use Custom Color" +#~ msgstr "Empregar cor personalizada" + +#~ msgid "Use Gradient" +#~ msgstr "Empregar gradación" + +#~ msgid "Gradient Color" +#~ msgstr "Cor de gradación" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar ficheiro de resposta de impulso" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione o ficheiro de resposta de impulso" + +#~ msgid "Aggressive Mode" +#~ msgstr "Modo agresivo" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Despois" + +#~ msgid "Loudness Range" +#~ msgstr "Intervalo de sonoridade" + +#~ msgid "Loudness Compensator" +#~ msgstr "Compensador de sonoridade" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Based on" +#~ msgstr "Baseado en" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar silencio" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Conecte de novo o micrófono para aplicar os cambios feitos na lista de " +#~ "bloqueos" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Reinicie o reprodutor para aplicar os cambios feitos na lista de boqueos" + +#~ msgid "Low-pass Frequency" +#~ msgstr "Frecuencias baixas" + +#~ msgid "Advanced" +#~ msgstr "Avanzado" + +#~ msgid "Apply APO Preset" +#~ msgstr "Aplicar preconfiguración de APO" + +#~ msgid "Muted" +#~ msgstr "Enmudecido" + +#~ msgid "Distant Headphones" +#~ msgstr "Auriculares distantes" + +#~ msgid "Niceness" +#~ msgstr "Prioridade" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de prioridade" + +#~ msgid "Priority" +#~ msgstr "Prioridade" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de mostraxe predeterminado" + +#~ msgid "Server" +#~ msgstr "Servidor" + +#~ msgid "File" +#~ msgstr "Ficheiro" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +#~ msgid "Resamplers" +#~ msgstr "Resampleadores" + +#~ msgid "Pipeline Input" +#~ msgstr "Entrada de tubaxe" + +#~ msgid "Buffer" +#~ msgstr "Búfer" + +#~ msgid "Pipeline Output" +#~ msgstr "Saída de tubaxe" + +#~ msgid "Block Size" +#~ msgstr "Tamaño do bloque" + +#~ msgid "Sampling" +#~ msgstr "Mostraxe" + +#~ msgid "Minimum Frequency" +#~ msgstr "Frecuencia mínima" + +#~ msgid "Maximum Frequency" +#~ msgstr "Frecuencia máxima" diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 0000000..a8a3319 --- /dev/null +++ b/po/hr.po @@ -0,0 +1,3418 @@ +# Croatian translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the EasyEffects package. +# gogo , 2017. +# rooty , 2018. +# flipwise , 2018. +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-05-01 06:52+0000\n" +"Last-Translator: Milo Ivir \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.18-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ekvalizator, kompresor i drugi audio efekti" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Zvučni efekti za PipeWire aplikacije" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "graničnik;kompresor;odjek;ekvalizator;automatska glasnoća zvuka;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +#, fuzzy +msgid "\"Presets\"" +msgstr "Predlošci" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Omogući" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +#, fuzzy +msgid "Mute Application" +msgstr "Aplikacije" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +#, fuzzy +msgid "Application Volume" +msgstr "Aplikacije" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Pomoć" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Postavke" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +#, fuzzy +msgid "_Shortcuts" +msgstr "Kratkoročno" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Predlošci" + +#: data/ui/application_window.ui:55 +#, fuzzy +msgid "Presets Menu" +msgstr "Predlošci" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +#, fuzzy +msgid "Global Bypass" +msgstr "Premosnica" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Aplikacije" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Prazna soba" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Aplikacije" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +#, fuzzy +msgid "Reset History" +msgstr "Vrati izvornu kvalitetu" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Meta" + +#: data/ui/autogain.ui:67 +#, fuzzy +msgid "Silence" +msgstr "Tišina" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Najveće pojačanje" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Trenutačno" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Kratkoročno" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrirano" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Glasnoća" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativno" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Raspon" + +#: data/ui/autogain.ui:378 +#, fuzzy +msgid "Output Gain" +msgstr "Pojačanje ulaza" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Ulaz" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Pojačanje ulaza" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Izlaz" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Pojačanje ulaza" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Vrati na tvorničke postavke" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +#, fuzzy +msgid "Device" +msgstr "Ulazni uređaj" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Naziv" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Predlošci" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Kompresija" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Poslušaj" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Spajanje harmonijskog reda" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3." + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2." + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Jačina" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonijski red" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Raspon" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Dno" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Dno" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Aplikacije" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Aplikacije" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Aplikacije" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Aplikacije" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Prozor" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Način" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +#, fuzzy +msgid "Compression Mode" +msgstr "Kompresija" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +#, fuzzy +msgid "Boost Threshold" +msgstr "Prag" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Jačina" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Pokretanje" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +#, fuzzy +msgid "Time" +msgstr "Vrijeme opadanja intenziteta signala" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Prag" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Pokretanje" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Prag" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Vrijeme prijelaza" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "Vrijeme prijelaza" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Prag" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Omjer" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +#, fuzzy +msgid "Knee" +msgstr "Koljeno" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +#, fuzzy +msgid "Makeup" +msgstr "Dorada" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Razina" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Ciljana razina" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +#, fuzzy +msgid "Sidechain" +msgstr "Postranični ulaz" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereo baza" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +#, fuzzy +msgid "Source" +msgstr "Izvor" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +#, fuzzy +msgid "Middle" +msgstr "Srednji nivo" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +#, fuzzy +msgid "Side" +msgstr "Strana" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Lijevo" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Desno" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Maksimum" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Maksimum" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Postranični ulaz" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Kašnjenje L/D" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Desno" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Strana" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Strana" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Tvorničke postavke" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Vrhunac" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Filter visokog prolaza" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Postranični ulaz" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Postranični ulaz" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +#, fuzzy +msgid "Feed-back" +msgstr "Dovod zvuka" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Postranični ulaz" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Ulazni uređaj" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Aplikacije" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Preduhvatiti" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Postranični ulaz" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "Filter visokog prolaza" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frekvencija" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +#, fuzzy +msgid "12 dB/oct" +msgstr "12dB/oct niski prolaz" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +#, fuzzy +msgid "24 dB/oct" +msgstr "24dB/oct niski prolaz" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +#, fuzzy +msgid "36 dB/oct" +msgstr "36dB/oct niski prolaz" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Filter visokog prolaza" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Prigušivanje visokih frekvencija" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +#, fuzzy +msgid "Low-Pass" +msgstr "Nizak prolaz" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Filter visokog prolaza" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Pojačanje" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Kanali" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "D" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Kanali" + +#: data/ui/convolver.ui:71 +#, fuzzy +msgid "Impulses" +msgstr "Reakcija impulsa" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +#, fuzzy +msgid "Stereo Width" +msgstr "Stereo širina" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektar" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +#, fuzzy +msgid "Autogain" +msgstr "Automatsko pojačavanje" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Frekvencija" + +#: data/ui/convolver.ui:169 +#, fuzzy +msgid "Samples" +msgstr "Semplovi" + +#: data/ui/convolver.ui:190 +#, fuzzy +msgid "Duration" +msgstr "Trajanje" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Reakcija impulsa" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +#, fuzzy +msgid "Output File Name" +msgstr "Izlaz" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +#, fuzzy +msgid "Import Impulse" +msgstr "Učitaj impuls" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Učitaj impuls datoteku" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Učitaj impuls datoteku" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Tvorničke postavke" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Prekid" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Dovod zvuka" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Premosnica" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Bezvučno" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detekcija" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Široko" + +#: data/ui/deesser.ui:78 +#, fuzzy +msgid "Split" +msgstr "Razdvojeno" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "Razdvojeno" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frekvencija" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "Vrhunac" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frekvencija" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "Pojačanje" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frekvencija" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "Razina" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frekvencija" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "Vrhunac Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frekvencija" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Popustljivost" + +#: data/ui/deesser.ui:586 +#, fuzzy +msgid "Detected" +msgstr "Detektirano" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Smanjenje" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Kašnjenje" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inverzija faze" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Prigušenje" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filter" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filter" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Supresija buke" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Supresija buke" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Broj raspona" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Ravnoteža" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Postranični ulaz" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Postranični ulaz" + +#: data/ui/equalizer.ui:292 +#, fuzzy +msgid "Split Channels" +msgstr "Kanali" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Ravan izlaz" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Izračunaj frekvencije" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Broj raspona" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +#, fuzzy +msgid "Import Preset" +msgstr "Učitaj predloške" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kvaliteta" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Širina" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Vrh" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Broj raspona" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Integrirano" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +#, fuzzy +msgid "Description" +msgstr "Detekcija" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Kompresija" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Niski shelf" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Visoki shelf" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Premosnica" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Rezonancija" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Nizak prolaz" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Ograničenje pojačanja" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Nizak prolaz" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ekvalizator" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Vrata" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Vrijeme prijelaza" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frekvencija" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Jači sampling" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Široko" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Široko" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Širina" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Širina" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Širina" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Aplikacije" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Stereo veza" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Postranični ulaz" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Automatsko pojačavanje" + +#: data/ui/limiter.ui:537 +#, fuzzy +msgid "Auto Leveling Attack" +msgstr "Automatsko pojačavanje" + +#: data/ui/limiter.ui:573 +#, fuzzy +msgid "Auto Leveling Release" +msgstr "Automatsko pojačavanje" + +#: data/ui/limiter.ui:608 +#, fuzzy +msgid "Auto Leveling Knee" +msgstr "Automatsko pojačavanje" + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Lijevo" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Desno" + +#: data/ui/limiter.ui:687 +#, fuzzy +msgid "Sidechain Left" +msgstr "Postranični ulaz" + +#: data/ui/limiter.ui:714 +#, fuzzy +msgid "Sidechain Right" +msgstr "Postranični ulaz" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +#, fuzzy +msgid "FFT Size" +msgstr "Veličina okvira" + +#: data/ui/loudness.ui:82 +#, fuzzy +msgid "Output Volume" +msgstr "Izlaz" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Kanali" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Vrh" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Postranični ulaz" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +#, fuzzy +msgid "Operating Mode" +msgstr "Učitaj impuls" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +#, fuzzy +msgid "Modern" +msgstr "Način" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Inverzija faze" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +#, fuzzy +msgid "Bands List" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +#, fuzzy +msgid "Band 1" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +#, fuzzy +msgid "Band 2" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +#, fuzzy +msgid "Band 3" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +#, fuzzy +msgid "Band 4" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +#, fuzzy +msgid "Band 5" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +#, fuzzy +msgid "Band 6" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +#, fuzzy +msgid "Band 7" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +#, fuzzy +msgid "Band 8" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +#, fuzzy +msgid "Band End" +msgstr "Broj raspona" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Kompresija" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Premosnica" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +#, fuzzy +msgid "Band Sidechain Options" +msgstr "Postranični ulaz" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereo baza" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +#, fuzzy +msgid "Filter" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filter visokog prolaza" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Filter visokog prolaza" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Pojačanje ulaza" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Ograničenje pojačanja" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Općenito" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Koristi tvorničke postavke" + +#: data/ui/pipe_manager_box.ui:65 +#, fuzzy +msgid "Custom Input Device" +msgstr "Ulazni uređaj" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Koristi tvorničke postavke" + +#: data/ui/pipe_manager_box.ui:101 +#, fuzzy +msgid "Custom Output Device" +msgstr "Pojačanje ulaza" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Reverberacija" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Jači sampling" + +#: data/ui/pipe_manager_box.ui:149 +#, fuzzy +msgid "Minimum Quantum" +msgstr "Frekvencija" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Najveće pojačanje" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Tvorničke postavke" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Izlazni uređaji" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +#, fuzzy +msgid "Output Presets" +msgstr "Predlošci: " + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +#, fuzzy +msgid "Output Autoloading Presets List" +msgstr "Predlošci: " + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Ulazni uređaji" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +#, fuzzy +msgid "Input Presets" +msgstr "Učitaj predloške" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Učitaj predloške" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Moduli" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Popis modula" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Klijenti" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Popis klijenata" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Testni signal" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Stanje" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Aktivirano" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Svojstva" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanali" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Oba" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Oba kanala" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Sinus tablica" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Bijeli šum" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Raspon frekvencije" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Prozor" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filter" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Visina" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Polustepeni" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Kompresija" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +#, fuzzy +msgid "Add Effect" +msgstr "Ulazni efekti" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +#, fuzzy +msgid "_General" +msgstr "Općenito" + +#: data/ui/preferences_general.ui:10 +#, fuzzy +msgid "Service" +msgstr "Ulazni uređaj" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Stil" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Koristi tamnu temu" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Eksperimentalna" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Prozor" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +#, fuzzy +msgid "_Spectrum" +msgstr "Spektar" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Oblik" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Trake" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linije" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Točke" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Točke" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Visina" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Širina linija" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Ispuna" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Prikaži konture traka" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Zaobljeni kutovi" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Boja" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Linije i trake" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Oznake osi" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Raspon frekvencije" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimum" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maksimum" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Spremi trenutne postavke u predložak" + +#: data/ui/preset_row.ui:47 +#, fuzzy +msgid "Save current settings to this preset file" +msgstr "Spremi trenutne postavke u predložak" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Učitaj predloške" + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Stvori predložak" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Učitaj predloške" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Učitaj predloške" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Učitaj predloške" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Prigušivanje visokih frekvencija" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Veličina sobe" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Mala" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Srednje velika" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Velika" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Velika/glatko" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Eksperimentalna" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difuzija" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Prijevremeno kašnjenje" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Vrijeme opadanja" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Odrezivanje basa" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Odrezivanje trebla" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Atmosera" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Prazni zidovi" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Soba" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Velika prazna dvorana" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Velika popunjena dvorana" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Uvezi model" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Detektor glasa" + +#: data/ui/rnnoise.ui:153 +#, fuzzy +msgid "Models" +msgstr "Način" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +#, fuzzy +msgid "Active Model" +msgstr "Kompresija" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +#, fuzzy +msgid "Overview" +msgstr "Ulazni uređaj" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "EasyEffects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Crveni šum" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Kontrola pojačanja" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Reverberacija" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Supresija buke" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Razina" + +#: data/ui/stereo_tools.ui:79 +#, fuzzy +msgid "Input Balance" +msgstr "Ravnoteža" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +#, fuzzy +msgid "Softclip Level" +msgstr "Stranična razina" + +#: data/ui/stereo_tools.ui:128 +#, fuzzy +msgid "Stereo Matrix" +msgstr "Stereo matrica" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +#, fuzzy +msgid "Stereo Mode" +msgstr "Stereo baza" + +#: data/ui/stereo_tools.ui:236 +#, fuzzy +msgid "Side Level" +msgstr "Stranična razina" + +#: data/ui/stereo_tools.ui:272 +#, fuzzy +msgid "Side Balance" +msgstr "Stranična ravnoteža" + +#: data/ui/stereo_tools.ui:308 +#, fuzzy +msgid "Middle Level" +msgstr "Srednji nivo" + +#: data/ui/stereo_tools.ui:344 +#, fuzzy +msgid "Middle Panorama" +msgstr "Srednja panorama" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "Pojačanje ulaza" + +#: data/ui/stereo_tools.ui:433 +#, fuzzy +msgid "Delay L/R" +msgstr "Kašnjenje L/D" + +#: data/ui/stereo_tools.ui:460 +#, fuzzy +msgid "Delay Left Right" +msgstr "Kašnjenje L/D" + +#: data/ui/stereo_tools.ui:469 +#, fuzzy +msgid "Stereo Base" +msgstr "Stereo baza" + +#: data/ui/stereo_tools.ui:505 +#, fuzzy +msgid "Stereo Phase" +msgstr "Stereo faza" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "Postavke" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Kanali" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" +"Zatvori EasyEffects. Korisno pri upotrebi u servisnom načinu pokretanja." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Učitaj predložak. Primjer: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Obnovi EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Prikaži dostupne predloške." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Izlaz" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Ulaz" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Učitaj impuls datoteku" + +#: src/convolver_menu_impulses.cpp:131 +#, fuzzy +msgid "Import Impulse File" +msgstr "Učitaj impuls datoteku" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Otvori" + +#: src/convolver_menu_impulses.cpp:144 +#, fuzzy +msgid "Impulse Response" +msgstr "Reakcija impulsa" + +#: src/convolver_menu_impulses.cpp:265 +#, fuzzy +msgid "Load Impulse" +msgstr "Reakcija impulsa" + +#: src/convolver_menu_impulses.cpp:268 +#, fuzzy +msgid "Remove Impulse" +msgstr "Učitaj impuls" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Učitaj impuls datoteku" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "Nije bilo moguće učitati impuls datoteku" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +#, fuzzy +msgid "Import APO Preset File" +msgstr "Učitaj predloške" + +#: src/equalizer_ui.cpp:387 +#, fuzzy +msgid "APO Presets" +msgstr "Predlošci" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Učitaj predloške" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Učitaj predloške" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Pojačanje ulaza" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Pojačanje ulaza" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +#, fuzzy +msgid "Import Model File" +msgstr "Učitaj impuls datoteku" + +#: src/rnnoise_ui.cpp:151 +#, fuzzy +msgid "RNNoise Models" +msgstr "Kompresija" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Pojačanje basa" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "Glasnoća" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Konvolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Križno spajanje" + +#: src/tags_plugin_name.cpp:37 +#, fuzzy +msgid "Crystalizer" +msgstr "Kristalizator" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "De-esiranje" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Poništenje jeke" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ekvalizator" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Uzbuđivač" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Pojačanje ulaza" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Graničnik" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maksimizer" + +#: src/tags_plugin_name.cpp:51 +#, fuzzy +msgid "Multiband Compressor" +msgstr "Višerasponski kompresor" + +#: src/tags_plugin_name.cpp:52 +#, fuzzy +msgid "Multiband Gate" +msgstr "Višerasponska vrata" + +#: src/tags_plugin_name.cpp:54 +#, fuzzy +msgid "Reverberation" +msgstr "Reverberacija" + +#: src/tags_plugin_name.cpp:55 +#, fuzzy +msgid "Noise Reduction" +msgstr "Ograničenje pojačanja" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +#, fuzzy +msgid "Stereo Tools" +msgstr "Stereo alati" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filter" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filter visokog prolaza" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Omjer" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Nizak prolaz" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Filter visokog prolaza" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct niski prolaz" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct niski prolaz" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct niski prolaz" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct visoki prolaz" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct visoki prolaz" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct visoki prolaz" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct band prolaz" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct band prolaz" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct band prolaz" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct odbijanje banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct odbijanje banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct odbijanje banda" + +#~ msgid "Inertia" +#~ msgstr "Inercija" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Glasnoća" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Visoki shelf" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvaliteta" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Oštrina" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detekcija" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresija" + +#~ msgid "Cents" +#~ msgstr "Centi" + +#~ msgid "Octaves" +#~ msgstr "Oktave" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "High Pass" +#~ msgstr "Filter visokog prolaza" + +#~ msgid "Low Pass" +#~ msgstr "Nizak prolaz" + +#~ msgid "Cancel" +#~ msgstr "Poništi" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Aplikacije" + +#~ msgid "Frame Size" +#~ msgstr "Veličina okvira" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Nizak prolaz" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Prijevremeno kašnjenje" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Razina" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Razina" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Ciljana razina" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Ciljana razina" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Razina supresije" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Zvučni efekti za Pulseaudio aplikacije" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Output Presets: " +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Input Presets: " +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Razdvojeno" + +#, fuzzy +#~ msgid "Split 1/2" +#~ msgstr "Razdvojeno 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Split 2/3" +#~ msgstr "Razdvojeno 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Split 3/4" +#~ msgstr "Razdvojeno 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Sub Band" +#~ msgstr "Sub band" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Dorada" + +#~ msgid "Max Reduction" +#~ msgstr "Smanjenje" + +#, fuzzy +#~ msgid "Low Band" +#~ msgstr "Niski band" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Dorada" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Mid Band" +#~ msgstr "Srednji band" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Dorada" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "High Band" +#~ msgstr "Visoki band" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Dorada" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Jačina" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Jačina" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#, fuzzy +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects je napredan alat za manipulaciju zvukom. Uključuje " +#~ "ekvalizator, graničnik, kompresor, alat odjeka te mnoge druge druge " +#~ "alate. Još sadrži i ugrađeni analizator spektra." + +#, fuzzy +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Zato što EasyEffects koristi zadani PulseAudio zvučni poslužitelj, radit " +#~ "će s većinom, ako ne i sa svim aplikacijama koje koristite. Sve podržane " +#~ "aplikacije su prikazane u glavnom prozoru, gdje se na svaku pojedinačno " +#~ "može omogućiti utjecaj efekata." + +#, fuzzy +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Osim manipuliranja izlaza zvuka, EasyEffects može primijeniti efekte i na " +#~ "ulazni uređaj, poput mikrofona. To je na primjer korisno pri snimanju " +#~ "zvuka, ali isto tako funkcionira dobro i tijekom glasovnih razgovora." + +#, fuzzy +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Kad je EasyEffects pokrenut, upotrijebit će podešavanja od prošlog puta. " +#~ "Također je moguće spremiti sve trenutne postavke kao predloške." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Average" +#~ msgstr "Prosjek" + +#~ msgid "Failed" +#~ msgstr "Nije uspjelo" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Koristi tvorničke postavke" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Kompresija" + +#~ msgid "Import Presets" +#~ msgstr "Učitaj predloške" + +#~ msgid "Start Service at Login" +#~ msgstr "Pokreni servis pri pokretanju računala" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Crna lista" + +#~ msgid "Blocklist" +#~ msgstr "Crna lista" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibracija mikrofona" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Omogući" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Omogući" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latencija" + +#~ msgid "Faster" +#~ msgstr "Brže" + +#~ msgid "Preserve Formant" +#~ msgstr "Sačuvaj formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Pojačanje ulaza" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Dno" + +#~ msgid "Output Effects" +#~ msgstr "Izlazni efekti" + +#~ msgid "Settings" +#~ msgstr "Postavke" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Postavke" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Trajanje" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Testni signali" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Testni signali" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spektar" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spektar" + +#, fuzzy +#~ msgid "Spectrum Color" +#~ msgstr "Boja spektra" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Otežanja" + +#~ msgid "Dry" +#~ msgstr "Suhoća" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "S/C Razina" + +#~ msgid "Short Term" +#~ msgstr "Kratkoročno" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Postavi razinu zvuka te uključi/isključi efekte" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Uključuje i ekvalizator s ugrađenim predlošcima" + +#~ msgid "Input Limiter" +#~ msgstr "Graničnik ulaza" + +#~ msgid "Calibration" +#~ msgstr "Kalibracija" + +#~ msgid "Limit" +#~ msgstr "Granica" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Zvučni efekti za Pulseaudio aplikacije" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Zvučni efekti za Pulseaudio aplikacije" + +#, fuzzy +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibracija mikrofona" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Kvadrat" + +#~ msgid "Saw" +#~ msgstr "Pila" + +#~ msgid "Triangle" +#~ msgstr "Trokut" + +#~ msgid "Pink Noise" +#~ msgstr "Rozi šum" + +#~ msgid "Ticks" +#~ msgstr "Otkucaji" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussov šum" + +#~ msgid "Blue Noise" +#~ msgstr "Plavi šum" + +#~ msgid "Violet Noise" +#~ msgstr "Ljubičasti šum" + +#~ msgid "Volume" +#~ msgstr "Glasnoća" + +#~ msgid "Measure Noise" +#~ msgstr "Izmjeri šum" + +#~ msgid "Subtract Noise" +#~ msgstr "Izdvoji šum" + +#~ msgid "Extended Filter" +#~ msgstr "Prošireni filter" + +#~ msgid "Low" +#~ msgstr "Nisko" + +#~ msgid "Moderate" +#~ msgstr "Umjereno" + +#~ msgid "High" +#~ msgstr "Visoko" + +#, fuzzy +#~ msgid "Very High" +#~ msgstr "Jako visoko" + +#~ msgid "Detection Likelihood" +#~ msgstr "Vjerojatnost detekcije" + +#~ msgid "Very Low" +#~ msgstr "Vrlo nisko" + +#~ msgid "Use Custom Color" +#~ msgstr "Koristi vlastitu boju" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Učitaj datoteku reakcije impulsa" + +#, fuzzy +#~ msgid "Select the impulse Response File" +#~ msgstr "Odaberite datoteku reakcije impulsa" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Loudness Range" +#~ msgstr "Glasnoća" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Tvorničke postavke" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Trajanje" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Izračunaj frekvencije" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Napredne postavke" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Detekcija" + +#, fuzzy +#~ msgid "Muted" +#~ msgstr "Bezvučno" + +#~ msgid "Distant Headphones" +#~ msgstr "Udaljene slušalice" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Promjena frekvencije" + +#~ msgid "Buffer" +#~ msgstr "Latencija međuspremnika" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Ekvalizator - Izlaz" + +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Veličina bloka" + +#~ msgid "Resampler" +#~ msgstr "Promjena frekvencije" + +#~ msgid "paused" +#~ msgstr "pauzirano" + +#~ msgid "playing" +#~ msgstr "reprodukcija" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Ograničenje pojačanja" diff --git a/po/id_ID.po b/po/id_ID.po new file mode 100644 index 0000000..318f5d0 --- /dev/null +++ b/po/id_ID.po @@ -0,0 +1,3416 @@ +# This is Indonesia translate file for PE. We are need your help to completely translate this project. You can translate PuleEffect's help file to Indonesian to develop this project. If you any question about translating process, just send email that I have been desribed below. But if you want to support such as reporting any bugs, go ahead to github page @ https://github.com/wwmm/easyeffects/ +# Copyright (C) 2018 +# This file is distributed under the same license as the EasyEffects package. +# Dika Muhamad A. , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-11-04 05:01+0000\n" +"Last-Translator: Reno Sifana Paksi \n" +"Language-Team: Indonesian \n" +"Language: id_ID\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.14.2-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizer, Compressor and Other Audio Effects" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efek Audio untuk Aplikasi PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limiter;compressor;reverberation;equalizer;autovolume;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "Preset" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Hidupkan/matikan aplikasi ini" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Hidupkan" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Pengecualian daftar aplikasi: Tambah/buang aplikasi ini" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Pengecualian" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Bisukan Aplikasi" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Volume Aplikasi" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Bantuan" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Setelan" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Preferensi" + +#: data/ui/application_window.ui:22 +#, fuzzy +msgid "_Shortcuts" +msgstr "Waktu Singkat" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "Tentang EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Preset" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menu Preset" + +#: data/ui/application_window.ui:62 +#, fuzzy +msgid "Enable/disable the global bypass" +msgstr "Hidupkan/matikan aplikasi ini" + +#: data/ui/application_window.ui:67 +#, fuzzy +msgid "Global Bypass" +msgstr "Bypass" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Daftar Aplikasi" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Daftar Kosong" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Tidak ada Aplikasi Audio yang tersedia" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Atur Ulang Riwayat" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Target" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Diam" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Angkatan Maksimal" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referensi" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Efek Sejenak" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Waktu Singkat" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Terintegrasi" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Terapkan Gradien warna" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Terapkan Gradien warna" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Terapkan Gradien warna" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Terapkan Gradien warna" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Kelantangan" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relatif" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rentang" + +#: data/ui/autogain.ui:378 +#, fuzzy +msgid "Output Gain" +msgstr "Gain Input" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Masukan" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Gain Input" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Output" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Gain Input" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Atur Ulang" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +#, fuzzy +msgid "Device" +msgstr "Pembatas Masukan" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nama" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Preset" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Hapus Preset Pemuatan Otomatis" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Uji Pengaturan" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Pencampuran Harmonik" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "Ketiga" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "Kedua" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Besaran" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonik" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Frekuensi Target Bass" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Monitor Lantai" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Monitor Lantai" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Aplikasi" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Aplikasi" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Aplikasi" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Aplikasi" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Tutup jendela" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modus" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Kompresi Menekan" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Kompresi Mengangkat" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +#, fuzzy +msgid "Compression Mode" +msgstr "Modus Kompresi" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +#, fuzzy +msgid "Boost Threshold" +msgstr "Ambang Batas" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Besaran" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Attack" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +#, fuzzy +msgid "Time" +msgstr "Waktu Real Time" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Ambang Batas" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Attack" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Ambang Batas" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Rilis" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "Rilis" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Ambang Batas" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Rasio" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Knee" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Penguatan" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Tingkat Dry" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Tingkat Wet" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Sidechain" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Mode Stereo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Sumber" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +#, fuzzy +msgid "Middle" +msgstr "Volume Kanal Tengah" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Volume Kanal Sisi" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Kiri" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Kanan" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Minimum" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Maksimal" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Sidechain" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Penundaan Kiri Kanan" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Kanan" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Volume Kanal Sisi" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Volume Kanal Sisi" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Aturan Bawaan" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Peak" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Filter High Pass" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Sidechain" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Sidechain" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipe" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Feed-forward" + +#: data/ui/compressor.ui:700 +#, fuzzy +msgid "Feed-back" +msgstr "Volume Penyuapan" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Sidechain" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Pembatas Masukan" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Pra-Amplifikasi" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Pengaktifan Ulang" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Lookahead" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Sidechain" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "High Pass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frekuensi" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Mati" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +#, fuzzy +msgid "12 dB/oct" +msgstr "Lowpass 12dB/oktaf" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +#, fuzzy +msgid "24 dB/oct" +msgstr "Lowpass 24dB/oktaf" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +#, fuzzy +msgid "36 dB/oct" +msgstr "Lowpass 36dB/oktaf" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Filter High Pass" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Frekuensi Tinggi" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +#, fuzzy +msgid "Low-Pass" +msgstr "Band Rendah" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Filter High Pass" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Besar Gain" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Besar Lembah" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Bentuk Kurva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "Kiri" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Total Kanal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "Kanan" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Pisahkan Kanal" + +#: data/ui/convolver.ui:71 +#, fuzzy +msgid "Impulses" +msgstr "Respons Impuls" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Lebar Stereo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +#, fuzzy +msgid "Log Scale" +msgstr "Skala" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Autogain" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Rataan Frekuensi" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Jumlah Sampel" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Durasi" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Respons Impuls" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +#, fuzzy +msgid "Output File Name" +msgstr "Output" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Muat Impuls" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Muat Berkas Impuls" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Muat Berkas Impuls" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Aturan Bawaan" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Frekuensi Potong" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Volume Penyuapan" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Bypass" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Bungkam" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Deteksi" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Luas" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Pisah" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "Pisah" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frekuensi" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "Peak" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frekuensi" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "Besar Gain" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frekuensi" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "Level" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frekuensi" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "Peak Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frekuensi" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Laksitas" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Terlacak" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Pengurangan" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Penundaan" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Balikkan Phase" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Atenuasi" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filter" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filter" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Supresor Derau" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Supresor Derau" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Jumlah Band" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Keseimbangan" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Sidechain Kiri" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Sidechain Kanan" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Pisahkan Kanal" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Respons Datar" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Hitung Frekuensi" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Jumlah Band" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Impor Preset" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Besar Lembah" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kualitas" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Lebar" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Langit-langit" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Jumlah Band" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Terintegrasi" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +#, fuzzy +msgid "Description" +msgstr "Deteksi" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Hapus Berkas Preset Ini" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Low Shelf" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "High Shelf" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Bell" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Bypass Band" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonansi" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Band Rendah" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Pengurangan Kuatan" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Pass Rendah" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ekualiser" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Gate" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Rilis" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frekuensi" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Peningkat Sampling" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Luas" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Luas" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Lebar" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Lebar" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Lebar" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Biarkan" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Setengah x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Setengah x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Setengah x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Setengah x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Setengah x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Setengah x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Setengah x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Setengah x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Setengah x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Penuh x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Penuh x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Penuh x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Penuh x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Penuh x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Penuh x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Penuh x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Penuh x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Penuh x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Penuh x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC PreAmp" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Pra-Amplifikasi Sidechain" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Penautan Stereo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Sidechain" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Gain Otomatis" + +#: data/ui/limiter.ui:537 +#, fuzzy +msgid "Auto Leveling Attack" +msgstr "Gain Otomatis" + +#: data/ui/limiter.ui:573 +#, fuzzy +msgid "Auto Leveling Release" +msgstr "Gain Otomatis" + +#: data/ui/limiter.ui:608 +#, fuzzy +msgid "Auto Leveling Knee" +msgstr "Gain Otomatis" + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Kiri" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Kanan" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Sidechain Kiri" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Sidechain Kanan" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standar" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Datar" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Ukuran FFT" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Volume Keluaran" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Total Kanal" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Langit-langit" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Sidechain" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "BT Pink" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "MT Pink" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "BT Coklat" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "MT Coklat" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Mode Operasi" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klasik" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Modern" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Balikkan Phase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Daftar Band" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Band 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Band 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Band 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Band 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Band 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Band 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Band 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Band 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Mulai Band" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Akhir Band" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Mode Kompresi Band" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Bypass Band" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Opsi Sidechain Band" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Mode Stereo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filter Low-Cut" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Frekuensi Filter Low-Cut" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filter High-Cut" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Frekuensi Filter High-Cut" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "PreAmp" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Gain Input" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +#, fuzzy +msgid "Band Curve" +msgstr "Bentuk Kurva" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Pengurangan Kuatan" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Umum" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Gunakan Aturan Bawaan" + +#: data/ui/pipe_manager_box.ui:65 +#, fuzzy +msgid "Custom Input Device" +msgstr "Pembatas Masukan" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Gunakan Aturan Bawaan" + +#: data/ui/pipe_manager_box.ui:101 +#, fuzzy +msgid "Custom Output Device" +msgstr "Gain Input" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Penggemaan" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Atur Sampling" + +#: data/ui/pipe_manager_box.ui:149 +#, fuzzy +msgid "Minimum Quantum" +msgstr "Frekuensi" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Angkatan Maksimal" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Aturan Bawaan" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "Gain Input" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Preset Output" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Daftar Keluaran Preset Otomatis" + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "Pembatas Masukan" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +#, fuzzy +msgid "Input Presets" +msgstr "Preset Input" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Preset Input" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +#, fuzzy +msgid "Clients" +msgstr "Sen" + +#: data/ui/pipe_manager_box.ui:461 +#, fuzzy +msgid "Clients List" +msgstr "Sen" + +#: data/ui/pipe_manager_box.ui:475 +#, fuzzy +msgid "Test Signal" +msgstr "Uji Sinyal" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Status" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +#, fuzzy +msgid "Enabled" +msgstr "Hidupkan" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Total Kanal" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +#, fuzzy +msgid "Both Channels" +msgstr "Total Kanal" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Tabel Sinus" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Derau Putih" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Rentang Frekuensi" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Jendela" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filter" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Nada" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Seminada" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Referensi" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Referensi" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Hapus Berkas Preset Ini" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +#, fuzzy +msgid "Add Effect" +msgstr "Efek Input" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Daftar Plugin" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Umum" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Layanan" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +#, fuzzy +msgid "Shutdown on Window Closing" +msgstr "Shutdown pada Penutupan Jendela" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Proses Semua Output" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Proses Semua Input" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Gunakan Volume Kubik" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Gaya" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Gunakan Tema Gelap" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Sembunyikan Menu di Klik Luar" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Eksperimental" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Tutup jendela" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Rupa" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Batang" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Garis" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Titik" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Titik" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Tinggi" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Lebar Garis" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Spektrum Batangan" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Tampilkan batar bar" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Sudut Bulat" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Warna" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Garis dan Bar" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Label Sumbu" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Rentang Frekuensi" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimum" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maksimal" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Muat" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Simpan Setelan Saat Ini Ke Berkas Preset" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Simpan Setelan Saat Ini Ke Berkas Preset" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Hapus Berkas Preset Ini" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Nama Preset Input Baru" + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Buat Preset" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Impor Preset" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Cari Preset Input" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Daftar Preset Input" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Pembasahan Frekuensi Tinggi" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Ukuran Ruangan" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Kecil" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Sedang" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Besar" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Terowongan" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Besar/Halus" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Eksperimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difusi" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pra Tunda" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Waktu Decay" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Potong Bass" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Potong Treble" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Suasana" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Tembok Kosong" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Ruangan" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Aula Besar Kosong" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disko" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Aula Besar Terisi Penuh" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Impor Model" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Pelacak Vokal" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Model" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Model Standar" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Daftar Model RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Model Aktif" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Model RNNoise Standar" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Ringkasan" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Layar penuh/Pulihkan dari layar penuh" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Tutup jendela" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "Keluar EasyEffects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Derau Merah" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Pengatur Angkatan" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Penggemaan" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +#, fuzzy +msgid "Start" +msgstr "Mulai Band" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Supresor Derau" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Level" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Masukan Keseimbangan" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Kliping Lunak" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Tingkat Softclip" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matriks Stereo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "Kiri-Kanan > Kiri-Kanan (Stereo Standar)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "Kiri-Kanan > Tengah (Stereo ke Sisi Tengah)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "Tengah > Kiri-Kanan (Sisi Tengah ke Stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "Kiri-Kanan > Kiri-Kiri (Kanal Kiri Mono)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "Kiri-Kanan > Kanan-kanan (Kanal Kanan Mono)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "Kiri-Kanan > Kiri+Kanan (Kiri Mono + Kanan Mono)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "Kiri-Kanan > Kanan-Kiri (Pembalikan Setereo)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Mode Stereo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Volume Kanal Sisi" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Keseimbangan Sisi" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Volume Kanal Tengah" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama Kanal Tengah" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Keluaran Balance" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Penundaan Kiri/Kanan" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Penundaan Kiri Kanan" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Basis Stereo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Phase Stereo" + +#: src/app_info.cpp:65 +#, fuzzy +msgid "Running" +msgstr "berjalan" + +#: src/app_info.cpp:67 +#, fuzzy +msgid "Suspended" +msgstr "Ditangguhkan" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "membuat" + +#: src/app_info.cpp:73 +#, fuzzy +msgid "Error" +msgstr "error" + +#: src/app_info.cpp:75 +#, fuzzy +msgid "Unknown" +msgstr "tidak dikenal" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Total Kanal" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Tutup EasyEffects. Berguna Ketika Berjalan dalam Modus Layanan." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Muat Preset. Misalkan: easyeffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Atur Ulang EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Sembunyikan jendela." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Bypass global. 1 untuk mengaktifkan, 2 untuk menonaktifkan dan 3 untuk " +"mendapatkan status" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Tampilkan Preset Tersedia." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Output" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Masukan" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Muat Berkas Impuls" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Impor File Impuls" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Buka" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Respons Impuls" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Muat Impuls" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Hapus Impuls" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Muat Berkas Impuls" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "Tidak dapat Memuat Berkas Impuls" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Perekam" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Pemain" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Impor File Preset APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Preset APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Impor File Preset APO" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Preset Input" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Hapus Preset Pemuatan Otomatis" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Gain Input" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Gain Input" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Tambah" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Impor file Model" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Model RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Penguat Bass" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Kenyaringan Bass" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Konvolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Pengkristal Suara" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Penghilang Desis" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Penghilang Gema" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ekualiser" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Penguat Frekuensi Tinggi" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Gain Input" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Pembatas" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Pemaksimal Gain" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Kompresor Multiband" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Multiband Gate" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Penggemaan" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Pengurangan Noise" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Pengolah Stereo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filter Low-Cut" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filter High-Cut" + +#~ msgid "Uniform" +#~ msgstr "Uniform" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nama Preset Keluaran Baru" + +#~ msgid "Search Output Preset" +#~ msgstr "Cari Preset Keluaran" + +#~ msgid "Output Presets List" +#~ msgstr "Daftar Preset Keluaran" + +#~ msgid "infinity" +#~ msgstr "Tak Terbatas" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Rasio" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Band Rendah" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "High Pass" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Lowpass 12dB/oktaf" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Lowpass 24dB/oktaf" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Lowpass 36dB/oktaf" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Highpass 12dB/oktaf" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Highpass 24dB/oktaf" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Highpass 36dB/oktaf" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Bandpass 6dB/oktaf" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Bandpass 12dB/oktaf" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Bandpass 18dB/oktaf" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Bandreject 6dB/oktaf" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Bandpass 12dB/oktaf" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Bandpass 18dB/oktaf" + +#~ msgid "Inertia" +#~ msgstr "Kelembaman" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Besar Lembah" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Kelantangan" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "High Shelf" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kualitas" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format Resampling" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Kerenyahan" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Deteksi" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresi" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Kliping Lunak" + +#~ msgid "Cents" +#~ msgstr "Sen" + +#~ msgid "Octaves" +#~ msgstr "Oktav" + +#~ msgid "_Manual" +#~ msgstr "_Manual" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Buka Manual EasyEffects" + +#, fuzzy +#~ msgid "High Pass" +#~ msgstr "High Pass" + +#, fuzzy +#~ msgid "Low Pass" +#~ msgstr "Pass Rendah" + +#~ msgid "Cancel" +#~ msgstr "Batal" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Pra-Amplifikasi" + +#~ msgid "Frame Size" +#~ msgstr "Ukuran Bingkai" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Band Rendah" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Uniform" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Pra Tunda" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Pisahkan Kanal" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Tingkat Dry" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Tingkat Dry" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Tingkat Wet" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Tingkat Wet" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Tingkat Supresi" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efek Suara untuk Aplikasi PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Pengurangan Noise" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Preset" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Preset Keluaran: " + +#~ msgid "Input Presets: " +#~ msgstr "Preset Input: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Pisah" + +#~ msgid "Split 1/2" +#~ msgstr "Split 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frekuensi" + +#~ msgid "Split 2/3" +#~ msgstr "Split 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frekuensi" + +#~ msgid "Split 3/4" +#~ msgstr "Split 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frekuensi" + +#~ msgid "Sub Band" +#~ msgstr "Band Sub" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Penguatan" + +#~ msgid "Max Reduction" +#~ msgstr "Pengurangan" + +#~ msgid "Low Band" +#~ msgstr "Band Rendah" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Penguatan" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "Mid Band" +#~ msgstr "Band Tengah" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Penguatan" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "High Band" +#~ msgstr "Band Tinggi" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Penguatan" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "Wet Amount" +#~ msgstr "Besaran Wet" + +#~ msgid "Dry Amount" +#~ msgstr "Besaran Dry" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#, fuzzy +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects merupakan aplikasi pengubah efek suara. Berisi modul-modul " +#~ "seperti ekualiser, pembatas, kompresor, dan modul penggema. Dilengkapi " +#~ "juga dengan Penganalisis Spektrum untuk memantau efek yang diterapkan." + +#, fuzzy +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "EasyEffects bekerja dengan aplikasi berbasis PulseAudio. Aplikasi yang " +#~ "mendukung EasyEffects akan ditampilkan pada jendela utama aplikasi." + +#, fuzzy +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Selain mengolah suara yang keluar, EasyEffects dapat mengolah efek suara " +#~ "seperti pada mikrofon dan pengakat masukan lainnya. EasyEffects juga " +#~ "bekerja dengan baik ketika dipakai dalam percakapan suara." + +#, fuzzy +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Ketika EasyEffects dijalankan, preset terakhir yang dipakai akan termuat " +#~ "otomatis. Anda juga dapat menyimpan pengaturan yang telah dibuat ke dalam " +#~ "profil tersendiri." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Band 1" + +#~ msgid "Average" +#~ msgstr "Rata-Rata" + +#~ msgid "Failed" +#~ msgstr "Gagal" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Gunakan Aturan Bawaan" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Hapus Berkas Preset Ini" + +#~ msgid "Import Presets" +#~ msgstr "Muat Preset" + +#~ msgid "Start Service at Login" +#~ msgstr "Mulai Layanan Saat Startup" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Setel Ulang Volume Perangkat Kami saat Memulai" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Model Aktif" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Daftar Blokir" + +#~ msgid "Blocklist" +#~ msgstr "Daftar Blokir" + +#~ msgid "Speakers" +#~ msgstr "Speaker" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Plugin" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Hidupkan" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Hidupkan" + +#~ msgid "Format" +#~ msgstr "Format Resampling" + +#~ msgid "Latency" +#~ msgstr "Besar Latensi" + +#~ msgid "idle" +#~ msgstr "siaga" + +#~ msgid "Faster" +#~ msgstr "Lebih Cepat" + +#~ msgid "Preserve Formant" +#~ msgstr "Jaga Bentuk" + +#~ msgid "Cmoy" +#~ msgstr "C. Moy" + +#~ msgid "Jmeier" +#~ msgstr "J. Meier" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Gain Input" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Total Kanal" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Monitor Lantai" + +#~ msgid "Output Effects" +#~ msgstr "Efek Luaran" + +#~ msgid "Settings" +#~ msgstr "Setelan" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Setelan" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Durasi" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Uji Sinyal" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Uji Sinyal" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spektrum" + +#~ msgid "Spectrum Color" +#~ msgstr "Warna Spektrum" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Modus Agresif" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Tinggi" + +#~ msgid "Dry" +#~ msgstr "Dry" + +#~ msgid "S/C Level" +#~ msgstr "Level Sisi/Tengah" + +#~ msgid "Short Term" +#~ msgstr "Waktu Singkat" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Atur Volume dan hidupkan/matikan Efek" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Dilengkapi dengan Ekualiser dengan Preset Bawaan" + +#~ msgid "Input Limiter" +#~ msgstr "Pembatas Masukan" + +#~ msgid "Calibration" +#~ msgstr "Kalibrasi" + +#~ msgid "Limit" +#~ msgstr "Batas" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Penerap Efek Suara untuk Aplikasi Berbasis Pulseaudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Terapkan Efek Suara via PulseAudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrasikan Mikrofon" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Kotak" + +#~ msgid "Saw" +#~ msgstr "Gergaji" + +#~ msgid "Triangle" +#~ msgstr "Segitiga" + +#~ msgid "Pink Noise" +#~ msgstr "Derau Merah Muda" + +#~ msgid "Ticks" +#~ msgstr "Ketukan per Detik" + +#~ msgid "Gaussian Noise" +#~ msgstr "Derau Gaussia" + +#~ msgid "Blue Noise" +#~ msgstr "Derau Biru" + +#~ msgid "Violet Noise" +#~ msgstr "Derau Ungu" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Measure Noise" +#~ msgstr "Ukur Derau" + +#~ msgid "Subtract Noise" +#~ msgstr "Kurangi Derau" + +#~ msgid "Extended Filter" +#~ msgstr "Filter Diperluas" + +#~ msgid "Low" +#~ msgstr "Rendah" + +#~ msgid "Moderate" +#~ msgstr "Sedang" + +#~ msgid "High" +#~ msgstr "Tinggi" + +#~ msgid "Delay Agnostic" +#~ msgstr "Penundaan Agnosti" + +#~ msgid "Very High" +#~ msgstr "Sangat Tinggi" + +#~ msgid "Adaptive Digital" +#~ msgstr "Digital Adaptif" + +#~ msgid "Fixed Digital" +#~ msgstr "Digital Tetap" + +#~ msgid "Detection Likelihood" +#~ msgstr "Lacak Keberadaan Vokal" + +#~ msgid "Very Low" +#~ msgstr "Sangat Rendah" + +#~ msgid "Use Custom Color" +#~ msgstr "Gunakan Warna Kustom" + +#~ msgid "Use Gradient" +#~ msgstr "Terapkan Gradien warna" + +#~ msgid "Gradient Color" +#~ msgstr "Warna Gradien" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Muat Berkas Respons Impuls" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Pilih Berkas Repons Impuls" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Modus Agresif" + +#~ msgid "Before" +#~ msgstr "Sebelum" + +#~ msgid "After" +#~ msgstr "Sesudah" + +#, fuzzy +#~ msgid "Loudness Range" +#~ msgstr "Rentang Kelantangan" + +#~ msgid "Apply" +#~ msgstr "Terapkan" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Aturan Bawaan" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Durasi" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Frekuensi Terendah" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Deteksi" + +#~ msgid "Muted" +#~ msgstr "Dibungkam" + +#~ msgid "Distant Headphones" +#~ msgstr "Headphone Berjarak" + +#~ msgid "Priority Type" +#~ msgstr "Atur Prioritas" + +#~ msgid "Niceness" +#~ msgstr "Proritas Sempurna" + +#~ msgid "Priority" +#~ msgstr "Atur Prioritas" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frekuensi" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frekuensi" + +#~ msgid "About" +#~ msgstr "Tentang EasyEffects" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Modus Penyampling" + +#~ msgid "Buffer" +#~ msgstr "Ukuran Penyangga" + +#~ msgid "Block Size" +#~ msgstr "Ukuran Blok" + +#~ msgid "Resampler" +#~ msgstr "Modus Penyampling" + +#~ msgid "paused" +#~ msgstr "terjeda" + +#~ msgid "playing" +#~ msgstr "memutar" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Muat Preset" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "Exponent" +#~ msgstr "Eksponen" diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100644 index 0000000..c23cb63 --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,3744 @@ +# Italian translation file for EasyEffects +# Copyright (C) 2018 +# This file is distributed under the same license as the EasyEffects package. +# Matteo Iervasi , 2018. +# Gianluca Boiano , 2018. +# Albano Battistella , 2021. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-10-18 14:15+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Italian \n" +"Language: it_IT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.1\n" +"Translator: Albano Battistella \n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizzatore, Compressore e Altri Effetti Audio" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Effetti Audio per Applicazioni Pipewire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limiter;compressore;riverbero;equalizzatore;autovolume;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Profili\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Abilita/disabilita questa applicazione" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Abilita" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Lista App Escluse: Aggiungi/rimuovi questa applicazione" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Escludi" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Silenzia Applicazione" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Modifica il volume di questa applicazione" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Volume Applicazione" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Aiuto" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Reimposta Preferenze" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Preferenze" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Scorciatoie" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Info su Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Profili" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menu Profili" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Abilita/disabilita il bypass globale" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Bypass Globale" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menu Principale" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Finestra di Easy Effects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Lista Applicazioni" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Elenco Vuoto" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Nessuna Applicazione Audio Disponibile" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Reimposta Cronologia" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "Parametri" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Livello" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silenzio" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Cronologia Massima" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Riferimento" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentaneo" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Breve-Termine" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrato" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Media Geometrica (MBI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Media Geometrica (MB)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Media Geometrica (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Media Geometrica (BI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Loudness" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativo" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Gamma" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Guadagno Uscita" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Ingresso" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Guadagno in Ingresso del Plugin" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Uscita" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Guadagno in Uscita del Plugin" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Reimposta" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Dispositivo Audio" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nome" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profilo Dispositivo" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Profilo EasyEffects" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Rimuovi questo profilo di auto-caricamento" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Ascolta" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mix Armoniche" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3ª" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2ª" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Quantità" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Armoniche" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Soglia" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Limite Inferiore" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Valore Limite Inferiore" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Link" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Nome Applicazione" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Aggiungi alle Applicazioni Escluse" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Lista delle Applicazioni Escluse" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Mostra Applicazioni Escluse" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Mostra Interfaccia Nativa" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compressore" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modalità" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Riduttiva" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Espansiva" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Incrementale" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Modalità Compressione" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Soglia Incremento" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Quantità Incremento" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Attacco" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Tempo" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Soglia" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Tempo di Attacco" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Soglia di Attacco" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Rilascio" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Tempo di Rilascio" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Soglia di Rilascio" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Rapporto" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Curvatura" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Guadagno" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Livello Dry" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Livello Wet" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Sidechain" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "Modalità Divisione Stereo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Sorgente" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Medio" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Lato" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Sinistro" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Destro" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Max" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Sorgente Sidechain" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "Sinistro/Destro" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "Destro/Sinistro" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "Mid/Lato" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "Lato/Mid" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "Sorgente Divisione Stereo" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Picco" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Filtro Passa-Basso" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Media Mobile Semplice" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Modalità Sidechain" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "Ascolta Sidechain" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipo" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Feed-forward" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Feed-back" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Esterna" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Tipo Sidechain" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Dispositivo Ingresso" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "PreAmplificazione" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reattività" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Lookahead" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Filtri Sidechain" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Passa-Alto" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frequenza" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Off" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/ott" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/ott" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/ott" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Modalità Filtro Passa-Alto" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Frequenza Filtro Passa-Alto" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Passa-Basso" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Modalità Filtro Passa-Basso" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Guadagno" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Envelope" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "S" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Canale Sinistro" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "D" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Canale Destro" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsi" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Combina" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Ampiezza Stereo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spettro" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Scala Logaritmica" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Auto Guadagno" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Frequenza" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Campioni" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Durata" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Combina Risposte Impulso" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Primo Kernel" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Secondo Kernel" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Nome File Combinato" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Nome File Combinato" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importa Impulso" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Cerca" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Cerca File di Impulso" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Lista File di Impulso" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Predefinito" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Taglio" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Feed" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Bypass" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Silenzia" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Rilevamento" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Banda Larga" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Split" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 Split" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Frequenza 1 Split" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 Picco" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Frequenza 2 Picco" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 Guadagno" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Frequenza 1 Guadagno" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 Livello" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Frequenza 2 Livello" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 Picco Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Frequenza 2 Picco Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Lassità" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Rilevato" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Riduzione" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Delay" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inversione di Fase" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "Limite di Attenuazione" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "Soglia Minima di Elaborazione" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "Soglia Minima di Elaborazione ERB" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "Soglia Minima di Elaborazione DF" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "Valore Minimo del Buffer" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "Post Filtro Beta" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Lunghezza Filtro" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Soppressione Eco Residuale" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Soppressione Eco Vicino Alla Fine" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "App Escluse" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bande" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Bilanciamento" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Tono Sinistro" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Tono Destro" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Separa Canali" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Risposta Piatta" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calcola Frequenze" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Ordina Bande" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importa Profilo" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pendenza" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Isola" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Qualità" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Ampiezza" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Limite Superiore" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Valore Limite Superiore" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "Expander" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "Modalità Expander" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Interna" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Accesso" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Descrizione" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Rimuovi questo modello" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "Sotto-Soglia" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "Sopra-Soglia" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Campana" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "Passa-Banda" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Fessura" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Risonanza" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "Passa-Scalino" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "Respingi-Scalino" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "Passa-Tutto" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "Modalità di Equalizzazione" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Gate" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Zona" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Isteresi" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Mix" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Inizio Zona Attacco" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Inizio Zona Rilascio" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "Picco Effettivo" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sovracampionamento" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Dither" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Herm Thin" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Herm Wide" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Herm Tail" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Herm Duck" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exp Thin" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp Wide" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Exp Tail" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exp Duck" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Line Thin" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Line Wide" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Line Tail" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Line Duck" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Off" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Parziale x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Parziale x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Parziale x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Parziale x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Parziale x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Parziale x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Parziale x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Parziale x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Parziale x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Parziale x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Intero x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Intero x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Intero x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Intero x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Intero x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Intero x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Intero x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Intero x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Intero x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Intero x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC PreAmp" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "PreAmplificazione Sidechain" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Incremento" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Relazione Canali" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Sidechain Esterna" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Sorgente Sidechain Esterna" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Auto Regolazione" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Auto Regolazione Attacco" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Auto Regolazione Rilascio" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Auto Regolazione Curvatura" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Guadagno Sinistro" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Guadagno Destro" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Sidechain Sinistro" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Sidechain Destro" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standard" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Flat" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Dimensione FFT" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Volume Uscita" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Clipping" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Limite Superiore" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Incremento Sidechain" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "Rumore Rosa BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "Rumore Rosa MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "Rumore Marrone BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "Rumore Marrone MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "Mostra Interfaccia Nativa" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Modalità Operativa" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Classica" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderna" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "Fase Lineare" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Lista Bande" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Banda 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Banda 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Banda 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Banda 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Banda 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Banda 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Banda 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Banda 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Inizio Banda" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Fine Banda" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Banda Modalità Compressione" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Bypass Banda" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Opzioni Sidechain Banda" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "Divisione Stereo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "Taglia-Basso" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Frequenza Filtro Taglia-Basso" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "Taglia-Alto" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Frequenza Filtro Taglia-Alto" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "PreAmp" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Guadagno Banda" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Envelope Banda" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Curva Banda" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Riduzione Banda" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Generale" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Gestione Dispositivi" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"Si raccomanda di NON impostare il dispositivo \"Easy Effects Sink/Source\" " +"come Dispositivo Predefinito in applicazioni esterne (per esempio Gnome " +"Settings e Plasma System Settings)." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Usa Ingresso Predefinito" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Dispositivo Ingresso Personalizzato" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Usa Uscita Predefinita" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Dispositivo Uscita Personalizzato" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Informazioni Server" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Versione Header" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Versione Libreria" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Frequenza di Campionamento" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Quantum Minimo" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Quantum Massimo" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Quantum Predefinito" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Auto Caricamento Profili" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Dispositivi di Uscita" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Profili di Uscita" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Crea Associazione" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Aggiungi Profilo di Auto Caricamento in Uscita" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Profili di Auto Caricamento in Uscita" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Dispositivi di Ingresso" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Profili di Ingresso" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Aggiungi Profilo di Auto Caricamento in Ingresso" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Profili di Auto Caricamento in Ingresso" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Moduli" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Lista Moduli" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Client" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Lista Client" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Segnale di Test" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Stato" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Abilitato" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Proprietà" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canali" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Entrambi" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Entrambi i Canali" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Tipo Onda" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinusoidale" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Rumore Bianco" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "Rilevamento Veloce" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "Anti-aliasing" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "Lunghezza Sequenza" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "Finestra di Rilevazione" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "Lunghezza di Sovrapposizione" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Intonazione" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitoni" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "Differenza Tempo" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "Differenza Frequenza" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Rimuovi questo effetto" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Abilita/disabilita questo effetto" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Cambia la posizione di questo effetto" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Aggiungi Effetto" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Lista Moduli Utilizzati" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Nessun Effetto" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Flusso Audio Non Alterato" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Cerca Modulo" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Lista dei Moduli" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Generale" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Servizio" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Inizia come Servizio all'Avvio del Sistema" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Termina alla Chiusura della Finestra" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Processa Tutto i Flussi in Uscita" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Processa Tutti i Flussi in Ingresso" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Ignora i Flussi dai Monitor dei Dispositivi" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Usa Volume Cubico" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Tempo Inattività" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "Intervallo di Aggiornamento (Misuratori di Livello e Spettro)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "Frequenza Aggiornamento (Plugin LV2)" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Stile" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Usa Tema Scuro" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Chiudi Menu con Click Esterno" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "Funzionalità Sperimentali" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "Finestra Nativa dei Plugin" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" +"Permette di Visualizzare o Nascondere le Interfacce Native degli Effetti" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spettro" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Forma" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barre" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linee" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Punti" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Punti" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Altezza" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Spessore Linea" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Riempi" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Mostra Bordo" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Angoli Arrotondati" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "Scala Dinamica" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Colore" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Linee e Barre" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Etichette sull'Asse" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Gamma Frequenze" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minima" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Massima" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Carica" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "Rimuovi la configurazione attuale e carica questo profilo" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Salva la configurazione attuale in questo profilo" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Rimuovi questo profilo" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "Nome del Nuovo Profilo" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Crea un nuovo profilo" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Importa un profilo" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "Cerca Profilo" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "Lista Profili" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Smorza Alte Frequenze" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Dimensione Stanza" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Piccola" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Media" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/liscia" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Sperimentale" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Diffusione" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pre Ritardo" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Tempo Decay" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Taglio Bassi" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Taglio Alti" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiente" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Mura Vuote" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Stanza" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Sala Grande Vuota" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Discoteca" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Sala Grande Occupata" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importa Modello" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Rilevamento Voce" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modelli" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Modello Standard" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Lista Modelli RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Modello Non Caricato" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Modello Attivo" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Modello RNNoise Standard" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Sommario" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "Mostra Aiuto" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Attiva/Disattiva Schermo Intero" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Chiudi la Finestra" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Termina Easy Effects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Meno Rumore" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Auto Controllo Guadagno" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Meno Riverbero" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Probabilità Attività Voce" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Inizio" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Continuo" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Soppressione Rumore" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Livello" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Bilanciamento Ingresso" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Livello Softclip" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matrice Stereo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "SD > SD (Predefinito Stereo)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "SD > MS (Stereo a Medio-Lato)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > SD (Medio-Lato a Stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "SD > SS (Canale Sinistro Mono)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "SD > DD (Canale Destro Mono)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "SD > S+D (Mono Somma S+D)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "SD > DS (Inverti Canali Stereo)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Modalità Stereo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Livello Lato" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Bilanciamento Lato" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Livello Medio" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama Medio" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Bilanciamento in Uscita" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Delay S/D" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Ritardo Sinistro Destro" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base Stereo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fase Stereo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "In esecuzione" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Sospeso" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Inattivo" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "In creazione" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Errore" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Sconosciuto" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "Canali" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Chiudi Easy Effects. Utile in esecuzione come servizio." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Carica un profilo. Esempio: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Reimposta Easy Effects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Nascondi la Finestra." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Bypass globale. 1 per abilitare, 2 per disabilitare e 3 per ottenere lo stato" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Mostra profili disponibili." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Uscita" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_Ingresso" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "Il File È Irregolare" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "Il File di Risposta Impulsiva Può Essere Corrotto o Non Supportato" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Sono Supportati Soltanto File di Risposta Impulsiva in Formato Stereo" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "File di Risposta Impulsiva Non Importato" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importa File di Impulso" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Apri" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Risposta Impulso" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Carica Impulso" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Rimuovi Impulso" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Nessun File di Risposta Impulsiva Caricato" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Impossibile Caricare il File di Risposta Impulsiva" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Registratori" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Riproduttori" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Effetti" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importa File di Profilo APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Profili APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"Profilo APO Non Caricato. Il Formato Potrebbe Essere Non Supportato. Si " +"Prega di Controllarne il Contenuto." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "Importa File di Profilo GraphicEQ" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "Profili GraphicEQ" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"Profilo GraphicEQ Non Caricato. Il Formato Potrebbe Essere Non Supportato. " +"Si Prega di Controllarne il Contenuto." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Rimuovi Profilo di Auto Caricamento" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "Misuratore Livello Uscita" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Rimuovi" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Dispositivo Uscita" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Aggiungi" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "Salvare?" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "Eliminare?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Il Modello Selezionato Non È Stato Caricato. Il Formato Potrebbe Essere Non " +"Supportato. Il Modello Standard È Stato Ripristinato." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importa File Modello" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Modelli RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Enfasi Bassi" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Loudness Bassi" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Crystalizer" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "Rimozione Rumore Profondo" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Rimozione Eco" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Equalizzatore" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Exciter" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "Misuratore Livello" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limiter" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizer" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compressore Multibanda" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Gate Multibanda" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Riverbero" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Riduzione Rumore" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Miglioramento Voce" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Strumenti Stereo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} Non Disponibile" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" +"L'effetto {} richiede la libreria \"{}\" non installata sul sistema. " +"Considera l'uso del pacchetto Easy Effects Flatpak o installa l'applicazione " +"dal codice sorgente." + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" +"L'effetto {} è stato disabilitato quando Easy Effects è stato compilato. " +"Probabilmente la libreria necessaria, \"{}\", non era disponibile. Considera " +"l'uso del pacchetto Easy Effects Flatpak o installa l'applicazione dal " +"codice sorgente." + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-inf" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "Utilizzo {}" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro Taglia-Basso" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro Taglia-Alto" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nome Nuovo Profilo di Uscita" + +#~ msgid "Search Output Preset" +#~ msgstr "Cerca Profilo di Uscita" + +#~ msgid "Output Presets List" +#~ msgstr "Lista Profili di Uscita" + +#~ msgid "New Input Preset Name" +#~ msgstr "Nome Nuovo Profilo di Ingresso" + +#~ msgid "Search Input Preset" +#~ msgstr "Cerca Profilo di Ingresso" + +#~ msgid "Input Presets List" +#~ msgstr "Lista Profili di Ingresso" + +#~ msgid "infinity" +#~ msgstr "infinito" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Wet Ratio" +#~ msgstr "Rapporto Wet" + +#~ msgid "VAD Threshold" +#~ msgstr "Soglia VAD" + +#~ msgid "Low-pass" +#~ msgstr "Passa-Basso" + +#~ msgid "High-pass" +#~ msgstr "Passa-Alto" + +#~ msgid "Gating" +#~ msgstr "Gate" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Passa Basso" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Passa Basso" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Passa Basso" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Passa Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Passa Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Passa Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Passa Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Passa Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Passa Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Elimina Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Elimina Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Elimina Banda" + +#~ msgid "Inertia" +#~ msgstr "Inerzia" + +#~ msgid "Band Type" +#~ msgstr "Tipo Banda" + +#~ msgid "Band Mode" +#~ msgstr "Modalità Banda" + +#~ msgid "Band Slope" +#~ msgstr "Pendenza della Banda" + +#~ msgid "Loudness List" +#~ msgstr "Elenco Misure Loudness" + +#~ msgid "High Speed" +#~ msgstr "Alta Velocità" + +#~ msgid "High Quality" +#~ msgstr "Alta Qualità" + +#~ msgid "High Consistency" +#~ msgstr "Alta Consistenza" + +#~ msgid "Formant" +#~ msgstr "Formante" + +#~ msgid "Shifted" +#~ msgstr "Alterata" + +#~ msgid "Preserved" +#~ msgstr "Preservata" + +#~ msgid "Transients" +#~ msgstr "Transienti" + +#~ msgid "Crisp" +#~ msgstr "Netti" + +#~ msgid "Mixed" +#~ msgstr "Intermedi" + +#~ msgid "Smooth" +#~ msgstr "Tenui" + +#~ msgid "Detector" +#~ msgstr "Rilevazione" + +#~ msgid "Compound" +#~ msgstr "Composto" + +#~ msgid "Percussive" +#~ msgstr "Percussivo" + +#~ msgid "Soft" +#~ msgstr "Soft" + +#~ msgid "Phase" +#~ msgstr "Fase" + +#~ msgid "Laminar" +#~ msgstr "Laminare" + +#~ msgid "Independent" +#~ msgstr "Indipendente" + +#~ msgid "Cents" +#~ msgstr "Centesimi" + +#~ msgid "Octaves" +#~ msgstr "Ottave" + +#~ msgid "_Manual" +#~ msgstr "_Manuale" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Apri il Manuale di Easy Effects" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} Non Installato sul Sistema" + +#~ msgid "High Pass" +#~ msgstr "Passa Alto" + +#~ msgid "Low Pass" +#~ msgstr "Passa Basso" + +#~ msgid "Cancel" +#~ msgstr "Annulla" + +#~ msgid " PreAmplification" +#~ msgstr " PreAmplificazione" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Chiudi (Premi ESC)" + +#~ msgid "Frame Size" +#~ msgstr "Dimensione Frame" + +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "" +#~ "Abilita/disabilita il\n" +#~ " bypass globale" + +#~ msgid " Low-Pass" +#~ msgstr " Passa-Basso" + +#~ msgid " Uniform" +#~ msgstr " Uniforme" + +#~ msgid "Left Delay" +#~ msgstr "Ritardo Sinistro" + +#~ msgid "Right Delay" +#~ msgstr "Ritardo Destro" + +#~ msgid "Left Dry Level" +#~ msgstr "Livello Dry Sinistro" + +#~ msgid "Right Dry Level" +#~ msgstr "Livello Dry Destro" + +#~ msgid "Left Wet Level" +#~ msgstr "Livello Wet Sinistro" + +#~ msgid "Right Wet Level" +#~ msgstr "Livello Wet Destro" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Dimensione della Trasformata di Fourier Veloce" + +#~ msgid "Clipping Range" +#~ msgstr "Livello Clipping" + +#~ msgid "Suppression" +#~ msgstr "Soppressione" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Effetti Audio per Applicazioni PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Riduzione Rumore" + +#~ msgid "Load APO Preset" +#~ msgstr "Carica Profilo APO" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "" +#~ "Reimposta il Volume dei Dispositivi Virtuali di EasyEffects all'Avvio" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Split Mode" +#~ msgstr "Modalità Split" + +#~ msgid "Split 1/2" +#~ msgstr "Split 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Frequenza Split 1" + +#~ msgid "Split 2/3" +#~ msgstr "Split 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Frequenza Split 2" + +#~ msgid "Split 3/4" +#~ msgstr "Split 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Frequenza Split 3" + +#~ msgid "Sub Band" +#~ msgstr "Sottobanda" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Banda 1 Bypass" + +#~ msgid "Band 1 Solo" +#~ msgstr "Banda 1 Isola" + +#~ msgid "Band 1 Detection" +#~ msgstr "Banda 1 Rilevamento" + +#~ msgid "Band 1 Attack" +#~ msgstr "Banda 1 Attacco" + +#~ msgid "Band 1 Release" +#~ msgstr "Banda 1 Rilascio" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Banda 1 Soglia" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Banda 1 Rapporto" + +#~ msgid "Band 1 Knee" +#~ msgstr "Banda 1 Curvatura" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Banda 1 Guadagno" + +#~ msgid "Max Reduction" +#~ msgstr "Max Riduzione" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Banda 1 Massima Riduzione" + +#~ msgid "Low Band" +#~ msgstr "Banda Bassa" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Banda 2 Bypass" + +#~ msgid "Band 2 Solo" +#~ msgstr "Banda 2 Isola" + +#~ msgid "Band 2 Detection" +#~ msgstr "Banda 2 Rilevamento" + +#~ msgid "Band 2 Attack" +#~ msgstr "Banda 2 Attacco" + +#~ msgid "Band 2 Release" +#~ msgstr "Banda 2 Rilascio" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Banda 2 Soglia" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Banda 2 Rapporto" + +#~ msgid "Band 2 Knee" +#~ msgstr "Banda 2 Curvatura" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Banda 2 Guadagno" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Banda 2 Massima Riduzione" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Banda 3 Bypass" + +#~ msgid "Band 3 Solo" +#~ msgstr "Banda 3 Isola" + +#~ msgid "Band 3 Detection" +#~ msgstr "Banda 3 Rilevamento" + +#~ msgid "Band 3 Attack" +#~ msgstr "Banda 3 Attacco" + +#~ msgid "Band 3 Release" +#~ msgstr "Banda 3 Rilascio" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Banda 3 Soglia" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Banda 3 Rapporto" + +#~ msgid "Band 3 Knee" +#~ msgstr "Banda 3 Curvatura" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Banda 3 Guadagno" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Banda 3 Massima Riduzione" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Banda 4 Bypass" + +#~ msgid "Band 4 Solo" +#~ msgstr "Banda 4 Isola" + +#~ msgid "Band 4 Detection" +#~ msgstr "Banda 4 Rilevamento" + +#~ msgid "Band 4 Attack" +#~ msgstr "Banda 4 Attacco" + +#~ msgid "Band 4 Release" +#~ msgstr "Banda 4 Rilascio" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Banda 4 Soglia" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Banda 4 Rapporto" + +#~ msgid "Band 4 Knee" +#~ msgstr "Banda 4 Curvatura" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Banda 4 Guadagno" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Banda 4 Massima Riduzione" + +#~ msgid "Output Presets: " +#~ msgstr "Profili Uscita: " + +#~ msgid "Input Presets: " +#~ msgstr "Profili Ingresso: " + +#~ msgid "Wet Amount" +#~ msgstr "Quantità Dry" + +#~ msgid "Dry Amount" +#~ msgstr "Quantità Wet" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects è un'applicazione specifica per la manipolazione dei flussi " +#~ "audio. Tra i diversi moduli contenuti, include un equalizzatore, un " +#~ "limiter, un compressore e uno strumento per il riverbero. In aggiunta è " +#~ "anche disponibile un analizzatore dello spettro delle frequenze." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects è il successore di PulseEffects. EasyEffects supporta " +#~ "esclusivamente il server audio PipeWire. Gli utenti su PulseAudio possono " +#~ "continuare a usare PulseEffects in alternativa." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Eseguito in simultanea al server PipeWire, EasyEffects funzionerà con la " +#~ "quasi totalità, se non tutte, le applicazioni disponibili sul sistema. Le " +#~ "applicazioni supportate sono mostrate nella finestra principale e ognuna " +#~ "può essere abilitata individualmente." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Oltre alla manipolazione dei flussi in uscita, EasyEffects è in grado di " +#~ "applicare effetti anche a dispositivi in ingresso, per esempio un " +#~ "microfono. Una funzionalità utile sia durante le registrazioni che nelle " +#~ "conversazioni di gruppo." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "EasyEffects all'avvio presenta la configurazione utilizzata nella " +#~ "sessione precedente. Tuttavia è possibile salvare i parametri attuali in " +#~ "uno specifico profilo." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "" +#~ "La scheda principale che mostra il flusso in uscita di due applicazioni" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "Il modulo di Enfasi Bassi con i propri parametri" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "Il modulo Convolver con i propri parametri" + +#~ msgid "This release adds the following features:" +#~ msgstr "Questa release aggiunge le seguenti funzionalità:" + +#~ msgid "" +#~ "When effects are disable to an application we now set its target metadata " +#~ "to null. This will allow the media session" +#~ msgstr "" +#~ "Quando gli effetti sono disabilitati per un applicazione, adesso " +#~ "impostiamo il suo target metadata a null. Questo permetterà al media " +#~ "session" + +#~ msgid "manager" +#~ msgstr "manager" + +#~ msgid "" +#~ "A new configuration option was added. It allows EasyEffects to ignore " +#~ "streams whose purpose is to monitor sink" +#~ msgstr "" +#~ "Aggiunta una nuova configurazione. EasyEffects adesso può essere " +#~ "impostato per ignorare i flussi dei monitor" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr "" +#~ "sink. Questo potrà risolvere alcune anomalie che gli utenti avevano con " +#~ "OBS." + +#~ msgid "The code that shows the stream sample format has been improved" +#~ msgstr "Il codice che mostra il formato di campionamento è stato migliorato" + +#~ msgid "" +#~ "The rnnoise library is now optional. This should help package maintainers " +#~ "to build" +#~ msgstr "" +#~ "La libreria rnnoise è adesso opzionale. Questo può aiutare i gestori dei " +#~ "pacchetti" + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "su Debian. Consultare il ticket #1000 per maggiori informazioni." + +#~ msgid "" +#~ "Our logs now show the source code line where the messages are being " +#~ "printed" +#~ msgstr "" +#~ "I nostri log ora mostrano il numero di linea del codice sorgente dove il " +#~ "messaggio viene stampato" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Questa release risolve i seguenti bug:" + +#~ msgid "" +#~ "The \"enable effects\" checkbox in our window was not being updated when " +#~ "third party programs like pavucontrol" +#~ msgstr "" +#~ "Il checkbox di abilitazione degli effetti nella finestra non era " +#~ "aggiornato quando programmi esterni come pavucontrol" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "rimuovevano gli stream dai nostri dispositivi virtuali. Questo problema " +#~ "dovrebbe essere risolto." + +#~ msgid "" +#~ "Fixed a crash that could happen when the maximum autogain history was " +#~ "changed." +#~ msgstr "" +#~ "Corretto un bug che poteva capitare quando la cronologia dell'Auto " +#~ "Guadagno veniva modificata." + +#~ msgid "Avoid crashes when pw-mididump is running" +#~ msgstr "Evitato il crash quando pw-mididump è in esecuzione" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "L'interfaccia del plugin pitch è stata migliorata" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "" +#~ "La nostra icona dell'applicazione è ora compatibile con i desktop che " +#~ "utilizzano QT" + +#~ msgid "" +#~ "Our blocklist code will use the `application.id` tag if the stream sets it" +#~ msgstr "" +#~ "Il nostro codice blocklist utilizzerà il tag `application.id` se lo " +#~ "stream lo imposta" + +#~ msgid "" +#~ "In order to avoid problems with the mouse scroll the entries in the " +#~ "applications list shown in our `Players/Recorders`" +#~ msgstr "" +#~ "Per evitare problemi con lo scroll del mouse, le voci della lista delle " +#~ "applicazioni nelle schede `Riproduttori/Registratori`" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "la scheda non mostra più una scala del volume. Maggiori dettagli sul " +#~ "problema e la soluzione per esso possono essere trovati su #1211" + +#~ msgid "and #1427" +#~ msgstr "e #1427" + +#~ msgid "" +#~ "When no application is available for display in the `Players/Recorders` a " +#~ "message will be shown to the user" +#~ msgstr "" +#~ "Quando non sono presenti applicazioni nelle schede `Riproduttori/" +#~ "Registratori`, sarà visualizzato un messaggio" + +#~ msgid "Many translation updates" +#~ msgstr "Molti aggiornamenti di traduzione" + +#~ msgid "" +#~ "Fixed a bug where EasyEffects crashed when the number of points displayed " +#~ "in the spectrum was changed while" +#~ msgstr "" +#~ "Corretto un bug per il quale EasyEffects andava in crash quando il numero " +#~ "di punti mostrati nello spettro era cambiato mentre" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "" +#~ "la nostra pipeline era attiva e il widget dello spettro era visibile" + +#~ msgid "" +#~ "The pipeline latency value displayed in our window could be wrong in some " +#~ "situations. This was fixed." +#~ msgstr "" +#~ "Il valore di latenza della pipeline visualizzato nella nostra finestra " +#~ "poteva essere errato in alcune situazioni. Questo è stato risolto." + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Aggiunta una nuova opzione che permette di selezionare un periodo di " +#~ "inattività per la pipeline. Quando nessun client" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "o registrando dai nostri dispositivi i filtri verranno scollegati al " +#~ "raggiungimento del timeout. Questo è fatto per essere sicuro" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "non sprechiamo il silenzio di elaborazione della potenza della CPU." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "Il plugin di Auto Guadagno adesso permette di selezionare quale dei tre " +#~ "tipi di Loudness usare per calcolare" + +#~ msgid "mean." +#~ msgstr "la media geometrica." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "Il plugin di Auto Guadagno adesso permette l'impostazione della massima " +#~ "cronologia e non utilizza più l'istogramma `libebur128`." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Ciò eviterà i casi in cui la Loudness `Integrata` rimanga fissa " +#~ "costantemente sullo stesso valore." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "L'icona di EasyEffects è stata aggiornata in modo da essere visibile " +#~ "anche nei desktop QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Questa release corregge i seguenti bug:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "L'opzione della riga di comando che restituisce lo stato di bypass " +#~ "globale funziona di nuovo." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Questa release aggiunge le seguenti funzionalità:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Migliorata la gestione della latenza dinamica di PipeWire da parte del " +#~ "modulo di Crossfeed. Non si dovrebbero più verificare anomali cambi di " +#~ "volume." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Risolto un bug che non permetteva la corretta gestione dei microfoni mono " +#~ "da parte di EasyEffects" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Supporto per la prossima versione di PipeWire `0.3.44`" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Migliorata la gestione della latenza dinamica di PipeWire da parte del " +#~ "modulo di Auto Guadagno. Non si dovrebbero più verificare anomali cambi " +#~ "di volume." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Aggiunta un'opzione per reimpostare il volume del nostro dispositivo " +#~ "virtuale all'avvio di EasyEffects. Ciò dovrebbe essere d'aiuto nei casi " +#~ "in cui il nostro dispositivo venga mutato dal server per ragioni ignote." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Migliore supporto per la sospensione del computer." + +#~ msgid "Updated translations" +#~ msgstr "Traduzioni aggiornate" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Risolto un bug per cui il tentativo di creare un profilo di caricamento " +#~ "automatico senza preimpostazioni causava l'arresto anomalo " +#~ "dell'applicazione." + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "Risolto un bug in cui impostando a `zero` la `qualità` di una banda " +#~ "dell'Equalizzatore, l'intera applicazione andava in crash." + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita è usata per creare alcune parti della nostra interfaccia e la " +#~ "modifica dei temi chiaro/scuro." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "" +#~ "Il menu delle impostazioni è stato ridisegnato con gli oggetti di " +#~ "LibAdwaita." + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "L'importazione dei profili Equalizer APO è stata migliorata per applicare " +#~ "non solo i filtri a Campana, ma anche gli altri supportati" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "L'opzione `Reset Preferenze` nel menu adesso funziona anche in Flatpak." + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "Abbiamo una nuova opzione che permette di disabilitare il `autohide` dei " +#~ "nostri menu. Questo permette di aggirare alcuni bug dei menu Popover " +#~ "attualmente presenti in gtk4." + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "Migliorata l'analisi dell'importazione APO con profili che hanno la " +#~ "virgola come separatore delle migliaia." + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "La libreria fmt è una nuova dipendenza, almeno fin quando i compilatori c+" +#~ "+ non la implementeranno in predefinito. Ciò è previsto nei prossimi anni." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM e GLIBMM non sono più una dipendenza. Adesso usiamo gtk4 " +#~ "direttamente." + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "Adesso è possibile combinare più Impulsi nell'interfaccia del Convolver. " +#~ "Un nuovo file di Impulso viene generato e il suo nome è aggiunto nella " +#~ "lista." + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "Migliorato il disegno della `asse x` nei nostri grafici. Adesso il numero " +#~ "delle etichette si adatta in base alla larghezza della finestra." + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "La documentazione è stata aggiornata con le nuove funzionalità di " +#~ "EasyEffects. I vecchi riferimenti a PulseEffects sono stati rimossi. Il " +#~ "bottone per consultare la documentazione è stato aggiunto nel menu." + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "Inserendo un valore fuori scala nello spinbutton, adesso il parametro " +#~ "viene aggiornato al valore minimo/massimo, invece che resettarlo a quello " +#~ "precedente." + +#~ msgid "" +#~ "The application window now remembers the maximized state and restores it " +#~ "on the next opening event." +#~ msgstr "" +#~ "La finestra principale adesso ricorda lo stato di massimizzazione e lo " +#~ "ripristina alla nuova apertura." + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "La libreria `tbb` è una nuova dipendenza" + +#~ msgid "" +#~ "The Limiter and the Multiband Compressor plugins can now use an optional " +#~ "external sidechain." +#~ msgstr "" +#~ "Il Limiter e il Compressore Multibanda adesso possono usare una sidechain " +#~ "esterna." + +#~ msgid "" +#~ "The Autogain plugin now allows the user to select which Loudness is used " +#~ "as reference for the volume correction." +#~ msgstr "" +#~ "Il modulo di Auto Guadagno adesso permette all'utente di selezionare " +#~ "quale tipologia di Loudness usare come riferimento per la correzione del " +#~ "volume." + +#~ msgid "" +#~ "The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +#~ "Amplification\" parameter." +#~ msgstr "" +#~ "La funzionalità di importazione dei profili APO nell'Equalizzatore adesso " +#~ "analizza anche il parametro di \"Pre Amplificazione\"." + +#~ msgid "Optional Cubic Volume can be enabled in General Settings." +#~ msgstr "Il Volume Cubico può essere abilitato dalle impostazioni generali." + +#~ msgid "" +#~ "PipeWire monitor streams are now excluded and removed from the " +#~ "applications list." +#~ msgstr "" +#~ "I flussi monitor di PipeWire adesso dovrebbero essere esclusi e rimossi " +#~ "dalla lista delle applicazioni." + +#~ msgid "Hopefully crashes like the one reported at [1172]( are fixed." +#~ msgstr "Crash come quelli riportati in [1172]( sono stati corretti." + +#~ msgid "Prevented a case in which Spectrum was crashing." +#~ msgstr "Risolto un caso in cui lo Spettro andava in crash." + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "Pavucontrol non è più aggiunto alla lista delle applicazioni in ingresso " +#~ "su sistemi con localizzazione diversa da quella inglese." + +#~ msgid "" +#~ "Improved compatibility with WirePlumber. This is needed to run on systems " +#~ "that decided to use it instead of the" +#~ msgstr "" +#~ "Migliorata la compatibilità con WirePlumber. Questo è necessario per i " +#~ "sistemi che hanno deciso di utilizzarlo" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "al posto del session manager integrato in PipeWire. Maggiori informazioni " +#~ "in [1144](" + +#~ msgid "" +#~ "When trying to add an autoloading profile for a device already in the " +#~ "list its target preset will be updated. This way we can change the " +#~ "profile preset without having to remove and recreating it." +#~ msgstr "" +#~ "All'aggiunta di un profilo di autocaricamento per uno specifico " +#~ "dispositivo già presente in lista, ora il profilo viene aggiornato. In " +#~ "questo modo non c'è bisogno di rimuovere lo stesso dispositivo e " +#~ "riaggiungerlo per vederlo." + +#~ msgid "" +#~ "The preset autoloading support implementation was redesigned again. It " +#~ "should work on more hardware now. For more information see issue [1051](" +#~ msgstr "" +#~ "La funzionalità dell'autocaricamento dei profili è stata nuovamente " +#~ "riprogettata. Adesso dovrebbe funzionare su più tipologie di dispositivi. " +#~ "Per maggiori informazioni, consulta [1051](" + +#~ msgid "" +#~ "If the Limiter or the Maximizer are set in the last position of the " +#~ "plugin stack, new plugins are added at the second to last position in " +#~ "order to prevent hardware damage on eventually high output level." +#~ msgstr "" +#~ "Se il Limiter e il Maximizer sono posizionati alla fine della lista, i " +#~ "nuovi moduli sono aggiunti nella penultima posizione in modo da evitare " +#~ "eventuali danneggiamenti agli altoparlanti in caso di volume troppo alto." + +#~ msgid "" +#~ "Removing an application from the blocklist, its previous enabled state is " +#~ "restored." +#~ msgstr "" +#~ "Alla rimozione di un flusso dalle App Escluse, il precedente stato " +#~ "dovrebbe essere ripristinato." + +#~ msgid "" +#~ "Sometimes when removing imported models from the noise reduction plugin " +#~ "the current used model was not properly updated. This should be fixed now." +#~ msgstr "" +#~ "Talvolta alla rimozione dei modelli nel modulo di riduzione del rumore, " +#~ "il modello utilizzato non veniva aggiornato. Questo problema è stato " +#~ "risolto." + +#~ msgid "" +#~ "When editing presets files in an external editor, duplicated entries " +#~ "won't be shown in our presets menu." +#~ msgstr "" +#~ "Alla modifica dei profili in un editor esterno, adesso non saranno più " +#~ "mostrate voci multiple nella lista dei profili." + +#~ msgid "Now the blocklist is correctly set when switching presets." +#~ msgstr "" +#~ "Adesso i flussi nelle App Escluse vengono correttamente disabilitati allo " +#~ "switch dei profili." + +#~ msgid "" +#~ "Now the status of the global bypass button is correctly updated when " +#~ "changing plugin stack." +#~ msgstr "" +#~ "Adesso lo stato del Bypass globale dovrebbe essere correttamente " +#~ "aggiornato quando i moduli cambiano." + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Le icone non presenti sul sistema adesso non dovrebbero essere " +#~ "visualizzate nell'interfaccia delle applicazioni" + +#~ msgid "" +#~ "Some icons not showing in Plasma DE with Breeze icon theme should appear " +#~ "now." +#~ msgstr "" +#~ "Alcune icone non visualizzate in Plasma con il tema Breeze adesso " +#~ "dovrebbero essere visibili." + +#~ msgid "Updated Chinese translation." +#~ msgstr "Traduzione Cinese aggiornata." + +#~ msgid "Updated Italian translation." +#~ msgstr "Traduzione Italiana aggiornata." + +#~ msgid "Added support for the compressor parameter `Boost Amount`" +#~ msgstr "" +#~ "Aggiunto il supporto al parametro `Quantità Incremento` del Compressore" + +#~ msgid "" +#~ "The multiband compressor plugin now uses the stereo multiband compressor " +#~ "plugin from Linux Studio Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Il Compressore Multibanda adesso implemento lo stereo multiband " +#~ "compressor sviluppato da Linux Studio Plugins invece di quello di Calf " +#~ "Studio." + +#~ msgid "" +#~ "The limiter plugin now uses the stereo limiter plugin from Linux Studio " +#~ "Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Il Limiter adesso implementa lo stereo limiter sviluppato da Linux Studio " +#~ "Plugins invece di quello di Calf Studio." + +#~ msgid "" +#~ "LV2 filters now are spawned in PipeWire graph only when loaded the first " +#~ "time. Once loaded, they remain connected until EasyEffects shutdown." +#~ msgstr "" +#~ "I filtri LV2 adesso sono generati nel diagramma PipeWire soltanto quando " +#~ "sono caricati per la prima volta. Tuttavia, una volta caricati, rimangono " +#~ "connessi fin quando EasyEffects non viene terminato." + +#~ msgid "The echo canceller sampling rate is now properly set." +#~ msgstr "" +#~ "Il modulo di Riduzione Eco adesso imposta correttamente il campionamento." + +#~ msgid "" +#~ "The threshold parameter from the deesser plugin is now saved to the " +#~ "preset file." +#~ msgstr "" +#~ "Il parametro soglia del Deesser adesso è salvato correttamente nel " +#~ "profilo." + +#~ msgid "" +#~ "Improved band splitting for crystalizer with new default intensity values." +#~ msgstr "" +#~ "Migliorata la suddivisione delle bande nel Crystalizer con nuovi valori " +#~ "di default delle Intensità." + +#~ msgid "" +#~ "Depending on the input gain or output gain values the corresponding level " +#~ "bars could not be aligned." +#~ msgstr "" +#~ "In base al guadagno di input/output, le corrispondenti barre non erano " +#~ "allineate correttamente." + +#~ msgid "" +#~ "When adding more equalizer bands they are set to `Bell` instead of `Off`." +#~ msgstr "" +#~ "All'aggiunta di nuove bande nell'Equalizzatore, la modalità è impostata " +#~ "su `Campana` invece che `Off`." + +#~ msgid "" +#~ "Equalizer APO presets loading is now working properly on locales " +#~ "different than C." +#~ msgstr "" +#~ "L'importazione degli Equalizer APO adesso funziona correttamente su " +#~ "localizzazioni differenti da C." + +#~ msgid "Improved linking management between port filter nodes in PipeWire." +#~ msgstr "" +#~ "Migliorata la gestione delle connessioni tra le porte dei nodi in " +#~ "PipeWire." + +#~ msgid "" +#~ "The crystalizer plugin signal amplification was too high before. It " +#~ "should be within more reasonable levels now." +#~ msgstr "" +#~ "L'amplificazione del Crystalizer era troppo alta. Adesso dovrebbe essere " +#~ "impostata a livelli ragionevoli." + +#~ msgid "" +#~ "Improved the resampler used in the plugins that require one(like the " +#~ "rnnoise plugin)" +#~ msgstr "" +#~ "Migliorato il resampler usato nei moduli che lo richiedono (come RNNoise)" + +#~ msgid "Setting multiple autoloading presets should be fine now" +#~ msgstr "" +#~ "L'impostazione di profili di autocaricamento multipli adesso dovrebbe " +#~ "funzionare" + +#~ msgid "Transient windows are now properly set for some plugins dialogs" +#~ msgstr "" +#~ "La translazione dell'interfaccia per alcuni moduli è stata correttamente " +#~ "impostata" + +#~ msgid "" +#~ "The convolver impulse response menu was improved to workaround an issue " +#~ "where the impulse files was not loaded when only one was available in the " +#~ "menu" +#~ msgstr "" +#~ "Il menu dei file di Impulso del Convolver è stato migliorato aggirando un " +#~ "problema per cui i file non erano caricati quando solo uno era " +#~ "disponibile nel menu" + +#~ msgid "" +#~ "Fixed a bug that could make the pitch plugin to not be properly " +#~ "initialized" +#~ msgstr "" +#~ "Corretto un bug che non inizializzava correttamente il modulo di " +#~ "Intonazione" + +#~ msgid "" +#~ "The saturation warning should not displace its neighbor widgets anymore" +#~ msgstr "" +#~ "L'icona di allarma saturazione adesso non sposta più gli oggetti adiacenti" + +#~ msgid "Fixed the locale in a few widgets" +#~ msgstr "Aggiustati i locale in alcuni oggetti" + +#~ msgid "Fixed wrong alignment in a few widgets" +#~ msgstr "Corretti gli allineamenti in alcuni oggetti" + +#~ msgid "" +#~ "The Loudness plugin is being used again for the reasons described at This " +#~ "means that is an optional dependency again." +#~ msgstr "" +#~ "Il modulo di Loudness è stato reimplementato. Questo significa che è di " +#~ "nuovo una dipendenza opzionale." + +#~ msgid "" +#~ "Fixed a segmentation fault that happened when optional dependencies were " +#~ "not installed" +#~ msgstr "" +#~ "Risolto un errore di segmentazione che accadeva quando delle dipendenze " +#~ "opzionali non erano installate" + +#~ msgid "Improved equalizer interface." +#~ msgstr "Migliorata l'interfaccia dell'equalizzatore." + +#~ msgid "" +#~ "Now we use a sidechain LSP compressor that allows the user to select and " +#~ "external source as the sidechain input." +#~ msgstr "" +#~ "Adesso usiamo un Compressore Sidechain LSP che permette di selezionare " +#~ "una sorgente esterna come sidechain di ingresso." + +#~ msgid "We now support the LSP compressor `Boosting` mode." +#~ msgstr "Adesso supportiamo la modalità `Incremento` del Compressore LSP." + +#~ msgid "" +#~ "When `split-channels` is enabled in the equalizer the imported APO preset " +#~ "will be applied only to the channel being visualized in the window. This " +#~ "will allow to import different presets for each channel instead of just " +#~ "settings the same values to both." +#~ msgstr "" +#~ "Quando `separa canali` è abilitato nell'Equalizzatore, i profili APO " +#~ "importati saranno applicati soltanto al canale visualizzato. Questo " +#~ "permette di importare profili differenti per i diversi canali invece che " +#~ "gli stessi per entrambi." + +#~ msgid "" +#~ "Fixed some segmentation faults that could happen when creating a preset " +#~ "autoloading profile or removing presets" +#~ msgstr "" +#~ "Risolti alcuni errori di segmentazione quando si creavano o rimuovevano i " +#~ "profili di autocaricamento" + +#~ msgid "" +#~ "This is one of the biggest releases that I have ever made. The amount of " +#~ "changes is so big that it is hard to talk about everything here." +#~ msgstr "" +#~ "Questa è una delle più grandi release che io abbia mai fatto. Il numero " +#~ "dei cambiamenti è cosi elevato che è difficile descriverle tutte qui." + +#~ msgid "" +#~ "The following are just the most import ones. People interested on the " +#~ "journey that got us here can take" +#~ msgstr "" +#~ "Le seguenti sono soltanto le più importanti. Quelli maggiormente " +#~ "interessati" + +#~ msgid "a look at and" +#~ msgstr "possono dare un'occhiata e" + +#~ msgid "" +#~ "The application and its repository have been renamed from PulseEffects to " +#~ "`EasyEffects`" +#~ msgstr "L'applicazione è stata rinominata da PulseEffects a `EasyEffects`" + +#~ msgid "gtkmm3 was replaced by gtkmm4" +#~ msgstr "gtkmm3 è stato rimpiazzato da gtkmm4" + +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "Gstreamer è stato rimpiazzato dai filtri nativi PipeWire." + +#~ msgid "" +#~ "Many features were reimplemented from scratch. The preset autoloading is " +#~ "one example. Another remarkable change will be seen in the plugins " +#~ "selection menu. Now the user can show in the window only the plugins that " +#~ "he/she wants to use." +#~ msgstr "" +#~ "Molte funzionalità sono state riscritte da zero. L'autocaricamento dei " +#~ "preset ne è un esempio. Un'altra modifica importante è presente nel menu " +#~ "di selezione dei moduli. Adesso sono mostrati nella finestra soltanto i " +#~ "plugin aggiunti alla lista." + +#~ msgid "" +#~ "Boost is no longer a dependency. The price paid for that was a little " +#~ "change in our presets structures. With some patience it is possible to " +#~ "edit PulseEffects presets in a text editor and make them work in " +#~ "EasyEffects. Hopefully someone will come up with a script for this in the " +#~ "feature." +#~ msgstr "" +#~ "Boost non è più una dipendenza. Il prezzo da pagare per questa scelta è " +#~ "il cambiamento della struttura dei profili. Con un po' di pazienza è " +#~ "possibile modificare i profili di PulseEffects in un editor di testo per " +#~ "renderli compatibili con EasyEffects. Magari qualcuno realizzerà uno " +#~ "script per questa operazione." + +#~ msgid "" +#~ "New libraries are being used and some of the librarires that were " +#~ "optional before are now required" +#~ msgstr "" +#~ "Nuove librerie sono state aggiunte e altre che erano opzionali adesso " +#~ "sono necessarie" + +#~ msgid "Average" +#~ msgstr "Media" + +#~ msgid "Failed" +#~ msgstr "Errore" + +#~ msgid "Use Default" +#~ msgstr "Usa Predefinito" + +#~ msgid "Remove this plugin" +#~ msgstr "Rimuovi questo profilo" + +#~ msgid "Import Presets" +#~ msgstr "Importa Profili" + +#~ msgid "Start Service at Login" +#~ msgstr "Esegui Servizio all'Avvio" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Reimposta il Volume di EasyEffects all'Avvio" + +#~ msgid "Shutdown on Window Close" +#~ msgstr "Termina alla Chiusura della Finestra" + +#~ msgid "Process All Outputs" +#~ msgstr "Processa Tutto in Uscita" + +#~ msgid "Process All Inputs" +#~ msgstr "Processa Tutto in Ingresso" + +#~ msgid "Exclude Device Monitor Streams" +#~ msgstr "Escludi i flussi di monitoraggio del dispositivo" + +#~ msgid "Activate" +#~ msgstr "Abilita" + +#~ msgid "Add to Blocklist" +#~ msgstr "Aggiungi ad App Escluse" + +#~ msgid "Blocklist" +#~ msgstr "App Escluse" + +#~ msgid "Add Plugin" +#~ msgstr "Aggiungi Modulo" + +#~ msgid "Speakers" +#~ msgstr "Altoparlanti" + +#~ msgid "Microphone" +#~ msgstr "Microfono" + +#~ msgid "Plugins" +#~ msgstr "Moduli" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Attivato" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Attivato" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latenza" + +#~ msgid "idle" +#~ msgstr "inattivo" + +#~ msgid "Faster" +#~ msgstr "Più Veloce" + +#~ msgid "Preserve Formant" +#~ msgstr "Preserva Formante" + +#~ msgid "Crispness" +#~ msgstr "Chiarezza" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not" +#~ msgstr "" +#~ "Il filtro di guadagno automatico dovrebbe gestire meglio gli interruttori " +#~ "di latenza dinamica di PipeWire. I salti nel livello del volume non " +#~ "dovrebbe" + +#~ msgid "happen anymore in these situations." +#~ msgstr "succedere più in queste situazioni." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts." +#~ msgstr "" +#~ "Abbiamo aggiunto un'opzione che consente di ripristinare il volume e lo " +#~ "stato muto dei nostri dispositivi virtuali all'avvio di EasyEffects." + +#~ msgid "" +#~ "It should help with the cases were our devices are muted by the audio " +#~ "server for unknown reasons." +#~ msgstr "" +#~ "Dovrebbe aiutare con i casi in cui i nostri dispositivi sono silenziati " +#~ "dal server audio per ragioni sconosciute." + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..87e4a6b --- /dev/null +++ b/po/ja.po @@ -0,0 +1,3677 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-03-23 03:20+0000\n" +"Last-Translator: \"R.Suga\" <21r.suga@gmail.com>\n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.16.2-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "イコライザー、コンプレッサーなどのオーディオエフェクト" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "PipeWire アプリケーション用オーディオエフェクト" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "リミッター;コンプレッサー;リバーブ;イコライザー;オートボリューム;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "「プリセット」" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "このアプリケーションの有効化/無効化" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "有効" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "除外されたアプリリスト: このアプリケーションを追加/削除" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "除外" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "アプリケーションをミュート" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "このアプリケーションの音量を変更" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "アプリケーションの音量" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_設定をリセット" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_環境設定" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_ショートカット" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Easy Effects について" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "プリセット" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "プリセットメニュー" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "グローバルバイパスの有効化/無効化" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "グローバルバイパス" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "メインメニュー" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Easy Effects ウィンドウ" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "アプリケーションリスト" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "空のリスト" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "オーディオアプリケーションがありません" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "履歴をリセット" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "ターゲット" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "サイレンス" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "最大履歴" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "リファレンス" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "瞬間的" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "短期" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "統合" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "幾何平均 (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "幾何平均 (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "幾何平均 (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "幾何平均 (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "ラウドネス" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "相対的" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "範囲" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "出力ゲイン" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "入力" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "プラグイン入力ゲイン" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "出力" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "プラグイン出力ゲイン" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "リセット" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "デバイス" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "名前" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "プロファイル" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "プリセット" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "この自動読み込みプリセットを削除" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "聞く" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "ブレンドハーモニクス" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3rd" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2nd" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "量" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "ハーモニクス" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "範囲" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "フロア" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "フロア値" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "リンク" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "アプリケーション名" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "除外アプリケーションに追加" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "除外されたアプリケーションリスト" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "除外されたアプリケーションを表示" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "ウィンドウを閉じる" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "コンプレッサー" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "モード" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "下方向" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "上方向" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "ブースト" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "圧縮モード" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "ブーストしきい値" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "ブースト量" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "アタック" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "時間" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "しきい値" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "アタックタイム" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "アタックしきい値" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "リリース" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "リリース時間" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "リリースしきい値" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "比率" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "ニー" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "メイクアップ" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Dry レベル" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Wet レベル" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "サイドチェーン" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "ステレオモード" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "ソース" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "中央" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "サイド" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "左" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "右" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "最小" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "最大" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "サイドチェーンソース" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "ディレイ 左 右" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "右" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "サイド" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "サイド" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "ステレオモード" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "ピーク" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "ローパスフィルタ" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "単純移動平均" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "サイドチェーンモード" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "外部サイドチェーン" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "タイプ" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "フィードフォワード" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "フィードバック" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "外部" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "サイドチェーンタイプ" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "入力デバイス" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "プリアンプリーション" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "反応性" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "ルックアヘッド" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "サイドチェーンフィルター" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "ハイパス" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "周波数" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "オフ" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "ハイパスフィルターモード" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "ハイパスフィルター周波数" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "ローパス" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "ローパスフィルターモード" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "ゲイン" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "包装" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "カーブ" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "左チャンネル" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "右チャンネル" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "インパルス" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "コンバイン" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "ステレオ幅" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "スペクトラム" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "ログスケール" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "オートゲイン" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "レート" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "サンプル" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "長さ" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "インパルス応答をコンバイン" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "ファーストカーネル" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "セカンドカーネル" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "出力ファイル名" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "複合カーネル名" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "インパルスをインポート" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "検索" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "インパルスファイルを検索" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "インパルスファイル一覧" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "デフォルト" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "カットオフ" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "フィード" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "バイパス" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "ミュート" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "検出" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "ワイド" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "スプリット" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 スプリット" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "周波数 1 スプリット" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 ピーク" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "周波数 2 ピーク" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 ゲイン" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "周波数 1 ゲイン" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 レベル" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "周波数 2 レベル" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 ピーク Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "周波数 2 ピーク Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "ゆるみ" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "検出" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "減少" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "ディレイ" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "位相反転" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "フィルター長" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "フィルター長" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "残留エコー抑制" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "ニアエンドエコー抑制" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "除外されたアプリ" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "バンド" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "バランス" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "左ピッチ" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "右ピッチ" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "チャンネルの分割" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "フラットレスポンス" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "周波数の計算" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "バンドの並べ替え" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "プリセットをインポート" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "スロープ" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "ソロ" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "品質" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "幅" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "切り上げ" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "切り上げ値" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "バンドモード" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "内部" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "アクセス" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "説明" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "このモデルファイルを削除" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "ローシェルフ" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "ハイシェルフ" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "ベル" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "バンドバイパス" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "ノッチ" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "反響" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "ローパス" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "バンドリダクション" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "オールパス" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "イコライザー" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "ゲート" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "ゾーン" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "ヒステリシス" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "ミックス" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "アタックゾーンスタート" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "リリースゾーン開始" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "周波数 2 ピーク" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "オーバーサンプリング" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "ディザ" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Herm Thin" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Herm Wide" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Herm Tail" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Herm Duck" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exp Thin" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp Wide" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Exp Tail" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exp Duck" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Line Thin" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Line Wide" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Line Tail" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Line Duck" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "なし" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "ハーフ ×2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "ハーフ ×2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "ハーフ ×3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "ハーフ ×3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "ハーフ ×4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "ハーフ ×4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "ハーフ ×6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "ハーフ ×6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "ハーフ ×8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "ハーフ ×8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "フル x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "フル x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "フル ×3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "フル ×3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "フル ×4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "フル ×4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "フル ×6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "フル ×6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "フル ×8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "フル ×8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC プリアンプ" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "サイドチェーン PreAmplification" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "ブースト" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "ステレオリンク" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "外部サイドチェーン" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "外部サイドチェーンソース" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "オートレベリング" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "オートレベリングアタック" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "オートレベリングリリース" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "オートレベリングニー" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "左ゲイン" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "右ゲイン" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "左サイドチェーン" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "右サイドチェーン" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "標準" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "フラット" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "FFT サイズ" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "出力ボリューム" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "クリッピング" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "シーリング" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "サイドチェーンブースト" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "ピンク BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "ピンク MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "ブラウン BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "ブラウン MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "動作モード" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "クラシック" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "モダン" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "位相反転" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "バンドリスト" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "バンド 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "バンド 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "バンド 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "バンド 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "バンド 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "バンド 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "バンド 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "バンド 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "バンドスタート" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "バンドエンド" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "バンド圧縮モード" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "バンドバイパス" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "バンドサイドチェーンオプション" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "ステレオモード" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "フィルター" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "ローカットフィルター" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "ローカットフィルター周波数" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "ハイカットフィルター" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "ハイカットフィルター周波数" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "プリアンプ" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "バンドゲイン" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "バンドエンベロープ" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "バンドカーブ" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "バンドリダクション" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "一般" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "デバイス管理" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"外部アプリケーション (Gnome 設定や Plasma システム設定など) で Easy Effects " +"の Sink/Source をデフォルトデバイスとして設定しないことをお勧めします。" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "デフォルトの入力を使用" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "カスタム入力デバイス" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "デフォルトの出力を使用" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "カスタム出力デバイス" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "サーバー情報" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "ヘッダーバージョン" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "ライブラリバージョン" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "サンプリングレート" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "最小クォンタム" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "最大クォンタム" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "デフォルトクォンタム" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "プリセット自動読み込み" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "出力デバイス" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "出力プリセット" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "アソシエーションを作成" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "自動読み込み出力プリセットを追加" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "自動読み込み出力プリセットリスト" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "入力デバイス" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "入力プリセット" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "自動読み込み入力プリセットを追加" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "自動読み込み入力プリセットリスト" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "モジュール" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "モジュールリスト" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "クライアント" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "クライアントリスト" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "テスト信号" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "状態" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "有効" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "プロパティ" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "チャンネル" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "両方" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "両方チャンネル" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "波形" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "正弦波" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "ホワイトノイズ" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "周波数範囲" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "ウィンドウを閉じる" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "フィルター長" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "ピッチ" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "半音" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "リファレンス" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "リファレンス" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "このエフェクトを削除" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "このエフェクトの有効化/無効化" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "このエフェクトの位置を変更する" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "エフェクトの追加" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "使用プラグインリスト" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "エフェクトなし" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "オーディオストリームは変更されていません" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "プラグインを検索" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "プラグインリスト" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_一般" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "サービス" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "システム起動時にサービスを起動" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "ウィンドウを閉じるときにシャットダウン" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "オーディオ" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "すべての出力を処理" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "すべての入力を処理" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "デバイスのモニターからのストリームを無視" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "キュービックボリュームを使用" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "非アクティブタイムアウト" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "更新間隔(レベルメータ、スペクトラム)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "スタイル" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "ダークテーマを使用" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "外側クリックでメニュー非表示" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "実験的" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "ウィンドウを閉じる" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_スペクトラム" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "形状" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "バー" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "線" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "ドット" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "ポイント" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "高さ" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "線幅" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "塗りつぶし" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "バーの境界線を表示" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "角丸" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "色" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "線とバー" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "軸ラベル" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "周波数範囲" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "最小" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "最大" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "ロード" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "現在の設定をこのプリセットファイルに保存" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "現在の設定をこのプリセットファイルに保存" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "このプリセットファイルを削除" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "新規入力プリセット名" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "プリセットを作成" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "プリセットをインポート" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "入力プリセットを検索" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "入力プリセットリスト" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "高周波ダンピング" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "部屋のサイズ" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "小" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "中" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "大" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "トンネル" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "大/なめらか" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "実験的" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "拡散" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "プリディレイ" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "減衰時間" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "ベースカット" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "高音カット" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "環境" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "何もない壁" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "部屋" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "何もない大きなホール" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "ディスコ" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "占有面積の大きいホール" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "モデルのインポート" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "音声検出" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "モデル" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "標準モデル" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "RNNoise モデルリスト" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "モデルがロードされていません" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "アクティブモデル" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "標準 RNNoise モデル" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "概要" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "フルスクリーン/フルスクリーンから復元" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "ウィンドウを閉じる" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Easy Effects を終了" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "ノイズ除去" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "自動ゲイン制御" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "リバーブ除去" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "音声アクティビティの確率" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "スタート" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "続ける" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "ノイズ対策" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "レベル" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "入力バランス" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "ソフトクリップ" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "ソフトクリップレベル" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "ステレオマトリックス" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (ステレオデフォルト)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (ステレオからミッドサイド)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (ミッドサイドからステレオ)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (モノラル左チャンネル)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (モノラル右チャンネル)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (モノラル合計 L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (ステレオチャンネル反転)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "ステレオモード" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "サイドレベル" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "サイドバランス" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "中間レベル" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "中間パノラマ" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "出力バランス" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "ディレイ L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "ディレイ 左 右" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "ステレオベース" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "ステレオ位相" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "実行中" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "サスペンド" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "アイドル" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "作成中" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "エラー" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "不明" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "チャンネル" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" +"Easy Effects を終了します。サービスモードで動作しているときに便利です。" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "プリセットを読み込む。例: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Easy Effects をリセット。" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "ウィンドウを隠す。" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "グローバルバイパス。1 で有効、2 で無効、3 でステータス取得" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "利用可能なプリセットを表示します。" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_出力" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_入力" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "このファイルは正しくありません" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" +"インパルスファイルが破損しているか、サポートされていない可能性があります" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "ステレオインパルスファイルのみサポートされています" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "インパルスファイルがインポートされていません" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "インパルスファイルをインポート" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "開く" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "インパルスレスポンス" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "インパルスを読み込み" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "インパルスを削除" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "読み込まれたインパルスファイルはありません" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "インパルスファイルを読み込めません" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "レコーダー" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "プレイヤー" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "エフェクト" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "APO プリセットファイルをインポート" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO プリセット" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"APO プリセットが読み込まれていません。ファイル形式が間違っている可能性があり" +"ます。内容を確認してください。" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "GraphicEQ プリセットファイルのインポート" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "GraphicEQ プリセット" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"GraphicEQ プリセットが読み込まれていません。ファイル形式がサポートされていな" +"い可能性があります。内容を確認してください。" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "自動読み込みプリセットを削除" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "出力レベルメーター" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "削除" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "出力デバイス" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "追加" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"選択されたモデルが読み込まれていません。そのフォーマットはサポートされていな" +"い可能性があります。標準モデルに戻しました。" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "モデルファイルをインポート" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise モデル" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "ベースエンハンサー" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "低音ラウドネス" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "コンボルバー" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "クロスフィード" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "クリスタライザー" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "ディエッサー" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "エコーキャンセラー" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "イコライザー" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "エキサイター" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "出力レベルメーター" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "リミッター" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "マキシマイザー" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "マルチバンドコンプレッサー" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "マルチバンドゲート" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "リバーブ" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "ノイズリダクション" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "スピーチプロセッサー" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "ステレオツール" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} 利用不可" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-inf" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "使用中" + +#~ msgid "Low-Cut Filter" +#~ msgstr "ローカットフィルター" + +#~ msgid "High-Cut Filter" +#~ msgstr "ハイカットフィルター" + +#~ msgid "Uniform" +#~ msgstr "ユニフォーム" + +#~ msgid "New Output Preset Name" +#~ msgstr "新規出力プリセット名" + +#~ msgid "Search Output Preset" +#~ msgstr "出力プリセットを検索" + +#~ msgid "Output Presets List" +#~ msgstr "出力プリセットリスト" + +#~ msgid "infinity" +#~ msgstr "無限大" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "比率" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "しきい値" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "ローパス" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "ハイパス" + +#~ msgid "Gating" +#~ msgstr "ゲーティング" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct ローパス" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct ローパス" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct ローパス" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct ハイパス" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct ハイパス" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct ハイパス" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct バンドパス" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct バンドパス" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct バンドパス" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct バンドリジェクト" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct バンドリジェクト" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct バンドリジェクト" + +#~ msgid "Inertia" +#~ msgstr "慣性" + +#~ msgid "Band Type" +#~ msgstr "バンドタイプ" + +#~ msgid "Band Mode" +#~ msgstr "バンドモード" + +#~ msgid "Band Slope" +#~ msgstr "バンドスロープ" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "ラウドネス" + +#~ msgid "High Speed" +#~ msgstr "高速" + +#~ msgid "High Quality" +#~ msgstr "高品質" + +#~ msgid "High Consistency" +#~ msgstr "高い一貫性" + +#~ msgid "Formant" +#~ msgstr "フォルマント" + +#~ msgid "Shifted" +#~ msgstr "シフト" + +#~ msgid "Preserved" +#~ msgstr "保存済み" + +#~ msgid "Transients" +#~ msgstr "トランジェント" + +#~ msgid "Crisp" +#~ msgstr "鮮明" + +#~ msgid "Mixed" +#~ msgstr "ミックス" + +#~ msgid "Smooth" +#~ msgstr "スムース" + +#~ msgid "Detector" +#~ msgstr "ディテクター" + +#~ msgid "Compound" +#~ msgstr "化合物" + +#~ msgid "Percussive" +#~ msgstr "パーカッシブ" + +#~ msgid "Soft" +#~ msgstr "ソフト" + +#~ msgid "Phase" +#~ msgstr "フェーズ" + +#~ msgid "Laminar" +#~ msgstr "ラミナー" + +#~ msgid "Independent" +#~ msgstr "独立" + +#~ msgid "Cents" +#~ msgstr "セント" + +#~ msgid "Octaves" +#~ msgstr "オクターブ" + +#~ msgid "_Manual" +#~ msgstr "_マニュアル" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Easy Effects のマニュアルを開く" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} はシステムにインストールされていません" + +#~ msgid "High Pass" +#~ msgstr "ハイパス" + +#~ msgid "Low Pass" +#~ msgstr "ローパス" + +#~ msgid "Cancel" +#~ msgstr "キャンセル" + +#~ msgid " PreAmplification" +#~ msgstr " プリアンプリーション" + +#~ msgid " Feed-forward" +#~ msgstr " フィードフォワード" + +#~ msgid "Close (Press ESC)" +#~ msgstr "閉じる (Esc キーを押す)" + +#~ msgid "Frame Size" +#~ msgstr "フレームサイズ" + +#, fuzzy +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "グローバルバイパスの有効化/無効化" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "ローパス" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "ユニフォーム" + +#~ msgid "Left Delay" +#~ msgstr "左ディレイ" + +#~ msgid "Right Delay" +#~ msgstr "右ディレイ" + +#~ msgid "Left Dry Level" +#~ msgstr "左ドライレベル" + +#~ msgid "Right Dry Level" +#~ msgstr "右ドライレベル" + +#~ msgid "Left Wet Level" +#~ msgstr "左ウェットレベル" + +#~ msgid "Right Wet Level" +#~ msgstr "右ウェットレベル" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "高速フーリエ変換サイズ" + +#~ msgid "Clipping Range" +#~ msgstr "クリッピング範囲" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "PipeWire アプリケーション用オーディオエフェクト" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "ノイズリダクション" + +#~ msgid "Load APO Preset" +#~ msgstr "APO プリセットを読み込む" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "起動時に EasyEffects 仮想デバイスの音量をリセット" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "出力プリセット: " + +#~ msgid "Input Presets: " +#~ msgstr "入力プリセット: " + +#~ msgid "Split Mode" +#~ msgstr "スプリットモード" + +#~ msgid "Split 1/2" +#~ msgstr "スプリット 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "スプリット周波数 1" + +#~ msgid "Split 2/3" +#~ msgstr "スプリット 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "スプリット周波数 2" + +#~ msgid "Split 3/4" +#~ msgstr "スプリット 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "スプリット周波数 3" + +#~ msgid "Sub Band" +#~ msgstr "サブバンド" + +#~ msgid "Band 1 Bypass" +#~ msgstr "バンド 1 バイパス" + +#~ msgid "Band 1 Solo" +#~ msgstr "バンド 1 ソロ" + +#~ msgid "Band 1 Detection" +#~ msgstr "バンド 1 検出" + +#~ msgid "Band 1 Attack" +#~ msgstr "バンド 1 アタック" + +#~ msgid "Band 1 Release" +#~ msgstr "バンド 1 リリース" + +#~ msgid "Band 1 Threshold" +#~ msgstr "バンド 1 しきい値" + +#~ msgid "Band 1 Ratio" +#~ msgstr "バンド 1 比率" + +#~ msgid "Band 1 Knee" +#~ msgstr "バンド 1 ニー" + +#~ msgid "Band 1 Makeup" +#~ msgstr "バンド 1 メイクアップ" + +#~ msgid "Max Reduction" +#~ msgstr "最大リダクション" + +#~ msgid "Low Band" +#~ msgstr "ローバンド" + +#~ msgid "Band 2 Bypass" +#~ msgstr "バンド 2 バイパス" + +#~ msgid "Band 2 Solo" +#~ msgstr "バンド 2 ソロ" + +#~ msgid "Band 2 Detection" +#~ msgstr "バンド 2 検出" + +#~ msgid "Band 2 Attack" +#~ msgstr "バンド 2 アタック" + +#~ msgid "Band 2 Release" +#~ msgstr "バンド 2 リリース" + +#~ msgid "Band 2 Threshold" +#~ msgstr "バンド 2 しきい値" + +#~ msgid "Band 2 Ratio" +#~ msgstr "バンド 2 比率" + +#~ msgid "Band 2 Knee" +#~ msgstr "バンド 2 ニー" + +#~ msgid "Band 2 Makeup" +#~ msgstr "バンド 2 メイクアップ" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "バンド 2 最大リダクション" + +#~ msgid "Mid Band" +#~ msgstr "ミッドバンド" + +#~ msgid "Band 3 Bypass" +#~ msgstr "バンド 3 バイパス" + +#~ msgid "Band 3 Solo" +#~ msgstr "バンド 3 ソロ" + +#~ msgid "Band 3 Detection" +#~ msgstr "バンド 3 検出" + +#~ msgid "Band 3 Attack" +#~ msgstr "バンド 3 アタック" + +#~ msgid "Band 3 Release" +#~ msgstr "バンド 3 リリース" + +#~ msgid "Band 3 Threshold" +#~ msgstr "バンド 3 しきい値" + +#~ msgid "Band 3 Ratio" +#~ msgstr "バンド 3 比率" + +#~ msgid "Band 3 Knee" +#~ msgstr "バンド 3 ニー" + +#~ msgid "Band 3 Makeup" +#~ msgstr "バンド 3 メイクアップ" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "バンド 3 最大リダクション" + +#~ msgid "High Band" +#~ msgstr "ハイバンド" + +#~ msgid "Band 4 Bypass" +#~ msgstr "バンド 4 バイパス" + +#~ msgid "Band 4 Solo" +#~ msgstr "バンド 4 ソロ" + +#~ msgid "Band 4 Detection" +#~ msgstr "バンド 4 検出" + +#~ msgid "Band 4 Attack" +#~ msgstr "バンド 4 アタック" + +#~ msgid "Band 4 Release" +#~ msgstr "バンド 4 リリース" + +#~ msgid "Band 4 Threshold" +#~ msgstr "バンド 4 しきい値" + +#~ msgid "Band 4 Ratio" +#~ msgstr "バンド 4 比率" + +#~ msgid "Band 4 Knee" +#~ msgstr "バンド 4 ニー" + +#~ msgid "Band 4 Makeup" +#~ msgstr "バンド 4 メイクアップ" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "バンド 4 最大リダクション" + +#~ msgid "Wet Amount" +#~ msgstr "Wet 量" + +#~ msgid "Dry Amount" +#~ msgstr "Dry 量" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects は、高度なオーディオ操作ツールです。イコライザー、リミッター、" +#~ "コンプレッサー、リバーブツールなどが含まれていますが、これらはほんの一部で" +#~ "す。さらに、スペクトラムアナライザーもあります。" + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects は、PulseEffects の後継版です。EasyEffects は PipeWire のオー" +#~ "ディオサーバーのみ対応しています。PulseAudio をお使いの場合、代わりに " +#~ "PulseEffects をお使いください。" + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "EasyEffects はデフォルトの PipeWire サウンドサーバーを使用しているので、ほ" +#~ "とんどのアプリケーションで動作します。サポートされているすべてのアプリケー" +#~ "ションは、メインウィンドウに表示され、それぞれ個別に有効にすることができま" +#~ "す。" + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "EasyEffects は、音の出力を操作するだけでなく、マイクなどの入力デバイスにも" +#~ "エフェクトをかけることができます。例えば、音声録音の時に便利ですが、音声会" +#~ "話の時にも効果を発揮します。" + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "EasyEffects を起動すると、前回のセッションで使用した設定を適用します。ま" +#~ "た、現在のすべての設定をプロファイルとして保存することもできます。" + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "2 つのオーディオ出力アプリを表示するメインページ" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "オーディオコントロールを表示するベースエンハンサーページ" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "オーディオコントロールを表示するコンボルバーのページ" + +#~ msgid "This release adds the following features:" +#~ msgstr "このリリースでは、以下の機能が追加されています:" + +#~ msgid "" +#~ "When effects are disable to an application we now set its target metadata " +#~ "to null. This will allow the media session" +#~ msgstr "" +#~ "アプリケーションに対してエフェクトが無効になっている場合、ターゲットメタ" +#~ "データをnullに設定します。これにより、メディアセッションが可能になります" + +#~ msgid "manager" +#~ msgstr "マネージャー" + +#~ msgid "" +#~ "A new configuration option was added. It allows EasyEffects to ignore " +#~ "streams whose purpose is to monitor sink" +#~ msgstr "" +#~ "新しい設定オプションが追加されました。これは、EasyEffects が監視シンクデバ" +#~ "イスのストリームを無視することを可能にします。" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr "" +#~ "これにより、OBS を使用する際にユーザーが抱えていた問題のいくつかを解決する" +#~ "ことができます。" + +#~ msgid "The code that shows the stream sample format has been improved" +#~ msgstr "ストリームのサンプル形式を表示するコードが改善されました" + +#~ msgid "" +#~ "The rnnoise library is now optional. This should help package maintainers " +#~ "to build" +#~ msgstr "" +#~ "rnnoise ライブラリがオプションになりました。これはパッケージメンテナが" +#~ "Debianパッケージをビルドするのに役立ちます。" + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "詳しくは issue #1000 を参照してください。" + +#~ msgid "" +#~ "Our logs now show the source code line where the messages are being " +#~ "printed" +#~ msgstr "" +#~ "ログにメッセージが出力されるソースコードの行が表示されるようになりました" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "このリリースでは、以下のバグが修正されています:" + +#~ msgid "" +#~ "The \"enable effects\" checkbox in our window was not being updated when " +#~ "third party programs like pavucontrol" +#~ msgstr "" +#~ "pavucontrol などのサードパーティ製プログラムが動作しているとき、ウィンドウ" +#~ "の「エフェクトを有効にする」チェックボックスが更新されないことがありました" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "そのストリームを仮想デバイスから遠ざけました。これは今すぐ修正する必要があ" +#~ "ります。" + +#~ msgid "" +#~ "Fixed a crash that could happen when the maximum autogain history was " +#~ "changed." +#~ msgstr "" +#~ "オートゲインの最大履歴を変更すると、クラッシュすることがある問題を修正しま" +#~ "した。" + +#~ msgid "Avoid crashes when pw-mididump is running" +#~ msgstr "pw-mididump 実行時のクラッシュを回避" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "ピッチプラグインのインターフェースが改善されました" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "アプリケーションアイコンが QT を使用するデスクトップに対応しました" + +#~ msgid "" +#~ "Our blocklist code will use the `application.id` tag if the stream sets it" +#~ msgstr "" +#~ "ブロックリストのコードは、ストリームが `application.id` タグを設定した場" +#~ "合、それを使用します" + +#~ msgid "" +#~ "In order to avoid problems with the mouse scroll the entries in the " +#~ "applications list shown in our `Players/Recorders`" +#~ msgstr "" +#~ "マウスのスクロールの問題を回避するために、`プレーヤー/レコーダー` に表示さ" +#~ "れるアプリケーションリストのエントリを表示します" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "タブにボリュームスケールが表示されなくなりました。この問題の詳細と解決策に" +#~ "ついては、#1211 を参照してください" + +#~ msgid "and #1427" +#~ msgstr "and #1427" + +#~ msgid "" +#~ "When no application is available for display in the `Players/Recorders` a " +#~ "message will be shown to the user" +#~ msgstr "" +#~ "`プレーヤー/レコーダー` に表示できるアプリケーションがない場合、メッセージ" +#~ "が表示されます" + +#~ msgid "Many translation updates" +#~ msgstr "多くの翻訳の更新" + +#~ msgid "" +#~ "Fixed a bug where EasyEffects crashed when the number of points displayed " +#~ "in the spectrum was changed while" +#~ msgstr "" +#~ "EasyEffects が次の状態のときにスペクトラムに表示されるポイント数を変更した" +#~ "ときにクラッシュするバグを修正しました" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "" +#~ "パイプラインがアクティブで、かつスペクトラムウィジェットが表示されている間" + +#~ msgid "" +#~ "The pipeline latency value displayed in our window could be wrong in some " +#~ "situations. This was fixed." +#~ msgstr "" +#~ "ウィンドウに表示されるパイプラインの待機時間の値は、状況によっては間違って" +#~ "いる可能性があります。この問題は修正されました。" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "パイプラインの非アクティブ時のタイムアウトを選択できる設定が追加されまし" +#~ "た。クライアントが再生していないとき" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "の接続や録画は、タイムアウトに達するとフィルタリングが解除されます。これは" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "CPUのパワーを無駄にせず、無音で処理することができます。" + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "オートゲインプラグインでは、3つのラウドネスのうち、どのラウドネスを使用し" +#~ "て幾何学的な計算を行うかを選択できるようになりました" + +#~ msgid "mean." +#~ msgstr "。" + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "オートゲインプラグインに最大履歴を設定できるようになり、libebur128 ヒスト" +#~ "グラムモードは使用されなくなりました。" + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "これにより、Integrated ラウドネスが永遠に同じ値で止まってしまうようなケー" +#~ "スを避けることができます。" + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "EasyEffects のアイコンは、QT デスクトップで見えるように更新されました。" + +#~ msgid "This release fixes the following bug:" +#~ msgstr "このリリースでは、以下のバグが修正されています:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "グローバルバイパスの状態を返すコマンドラインオプションが再び動作するように" +#~ "なりました。" + +#~ msgid "This release adds the following feature:" +#~ msgstr "このリリースでは、以下の機能が追加されています:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "クロスフィードフィルターは、PipeWire の動的遅延スイッチにうまく対応するよ" +#~ "うになりました。これで、音量レベルのジャンプが起こらなくなるはずです。" + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "モノラルマイクが EasyEffects で正しく動作しない不具合を修正しました" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "次の PipeWire リリース `0.3.44` への対応" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "オートゲインフィルターは、PipeWire の動的遅延スイッチにうまく対応するよう" +#~ "になりました。これで、音量レベルのジャンプが起こらなくなるはずです。" + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "EasyEffects の起動時に、バーチャルデバイスのボリュームとミュートの状態をリ" +#~ "セットできるオプションを追加しました。これは、謎の理由でオーディオサーバー" +#~ "によってデバイスがミュートされている場合に役立ちます。" + +#~ msgid "Better support for computer suspending." +#~ msgstr "コンピュータのサスペンドのサポートが強化されました。" + +#~ msgid "Updated translations" +#~ msgstr "翻訳の更新" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "プリセットを持たない自動読み込みプロファイルを作成しようとすると、アプリ" +#~ "ケーションがクラッシュするというバグを修正しました。" + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "イコライザーバンドの「品質」を「0」に設定するとアプリケーションがクラッ" +#~ "シュするバグを修正しました。" + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita は、ウィンドウの一部を作成したり、ダークテーマとライトテーマを" +#~ "切り替えるために使用されます。" + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "設定メニューは、LibAdwaita ウィジェットを使用して再設計されました。" + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "イコライザー APO のプリセットインポート機能で、ベルフィルターだけでなく、" +#~ "対応する他のフィルターも適用できるよう改善しました" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "メニューの「すべての設定をリセット」機能が Flatpak でも動作するようにしま" +#~ "した。" + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "メニューの 「自動非表示」を無効にすることができる新しいオプションを用意し" +#~ "ました。これにより、現在 gtk4 で抱えているポップオーバーメニュー関連のバグ" +#~ "を回避できるかもしれません。" + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "中央の周波数帯でカンマを千の区切りとして保存された APO プリセットを読み込" +#~ "むための解析がより強力になりました。" + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "fmt ライブラリは、少なくとも c++ コンパイラがその機能を実装していない間は" +#~ "新しい依存関係にあります。これは今後数年のうちに実現すると思われます。" + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM と GLIBMM はもう依存関係にありません。現在は gtk4 を直接使用していま" +#~ "す。" + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "コンボルバーインターフェースでインパルスレスポンスを組み合わせることができ" +#~ "るようになりました。新しいインパルスファイルが生成され、インパルスリストに" +#~ "表示されます。" + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "プロットの「x 軸」の描画を改善しました。ウィンドウの幅に応じてラベルの数が" +#~ "動的に調整されるようになりました。" + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "ドキュメントが EasyEffects の新機能を反映して更新されました。PulseEffects " +#~ "に関する古い文献は削除されました。メニューセクションにドキュメントボタンが" +#~ "追加されました。" + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "スピンボタンに範囲外の値が入力されたときに、前の値にリセットされるのではな" +#~ "く、最低/最高の値に更新されるようになりました。" + +#~ msgid "" +#~ "The application window now remembers the maximized state and restores it " +#~ "on the next opening event." +#~ msgstr "" +#~ "アプリケーションウィンドウは最大化された状態を記憶し、次回の起動時に反映し" +#~ "ます。" + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "「tbb」ライブラリは新しい依存関係です" + +#~ msgid "" +#~ "The Limiter and the Multiband Compressor plugins can now use an optional " +#~ "external sidechain." +#~ msgstr "" +#~ "リミッターとマルチバンドコンプレッサーのプラグインで、オプションの外部サイ" +#~ "ドチェーンを使用できるようになりました。" + +#~ msgid "" +#~ "The Autogain plugin now allows the user to select which Loudness is used " +#~ "as reference for the volume correction." +#~ msgstr "" +#~ "オートゲインプラグインで、音量補正の基準となるラウドネスを選択できるように" +#~ "なりました。" + +#~ msgid "" +#~ "The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +#~ "Amplification\" parameter." +#~ msgstr "" +#~ "イコライザープラグインの APO プロファイルインポート機能で、\"Pre " +#~ "Amplification\" パラメータを解析するようになりました。" + +#~ msgid "Optional Cubic Volume can be enabled in General Settings." +#~ msgstr "" +#~ "オプションのキュービックボリュームは一般設定で有効にすることができます。" + +#~ msgid "" +#~ "PipeWire monitor streams are now excluded and removed from the " +#~ "applications list." +#~ msgstr "" +#~ "PipeWire のモニターストリームがアプリケーションリストから除外され、削除さ" +#~ "れるようになりました。" + +#~ msgid "Hopefully crashes like the one reported at [1172]( are fixed." +#~ msgstr "" +#~ "うまくいけば [1172]( で報告されたもののようなクラッシュが修正されていま" +#~ "す。" + +#~ msgid "Prevented a case in which Spectrum was crashing." +#~ msgstr "スペクトラムがクラッシュするのを防ぎました。" + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "英語以外の言語を使用しているシステムでは、Pavucontrol は入力アプリケーショ" +#~ "ンリストに追加されません。" + +#~ msgid "" +#~ "Improved compatibility with WirePlumber. This is needed to run on systems " +#~ "that decided to use it instead of the" +#~ msgstr "" +#~ "WirePlumber との互換性を改善しました。これは次のものの代わりにシステムで動" +#~ "作するために必要です" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "内蔵の PipeWire セッションマネージャーです。詳細は issue [1144]( で確認で" +#~ "きます" + +#~ msgid "" +#~ "When trying to add an autoloading profile for a device already in the " +#~ "list its target preset will be updated. This way we can change the " +#~ "profile preset without having to remove and recreating it." +#~ msgstr "" +#~ "すでにリストにあるデバイスに自動読み込みプロファイルを追加しようとすると、" +#~ "そのターゲットプリセットが更新されます。これにより、プロファイルを削除して" +#~ "再度作成せずにプロファイルのプリセットを変更することができます。" + +#~ msgid "" +#~ "The preset autoloading support implementation was redesigned again. It " +#~ "should work on more hardware now. For more information see issue [1051](" +#~ msgstr "" +#~ "プリセットの自動読み込みサポートの実装を再設計しました。これにより、多くの" +#~ "ハードウェアで動作するようになりました。詳しくは issue [1051]( を確認して" +#~ "ください" + +#~ msgid "" +#~ "If the Limiter or the Maximizer are set in the last position of the " +#~ "plugin stack, new plugins are added at the second to last position in " +#~ "order to prevent hardware damage on eventually high output level." +#~ msgstr "" +#~ "プラグインスタックの最後にリミッターやマキシマイザーが設定されている場合、" +#~ "高い出力レベルでハードウェアが損傷するのを防ぐために、新しいプラグインは最" +#~ "後から2番目の位置に追加されます。" + +#~ msgid "" +#~ "Removing an application from the blocklist, its previous enabled state is " +#~ "restored." +#~ msgstr "" +#~ "ブロックリストからアプリケーションを削除すると、有効な状態に戻ります。" + +#~ msgid "" +#~ "Sometimes when removing imported models from the noise reduction plugin " +#~ "the current used model was not properly updated. This should be fixed now." +#~ msgstr "" +#~ "ノイズ除去プラグインからインポートしたモデルを削除すると、現在使用している" +#~ "モデルが正しく更新されないことがありました。これは現在修正されているはずで" +#~ "す。" + +#~ msgid "" +#~ "When editing presets files in an external editor, duplicated entries " +#~ "won't be shown in our presets menu." +#~ msgstr "" +#~ "外部エディタでプリセットファイルを編集すると、重複したエントリーがプリセッ" +#~ "トメニューに表示されなくなります。" + +#~ msgid "Now the blocklist is correctly set when switching presets." +#~ msgstr "" +#~ "プリセットを切り替えたときに、ブロックリストが正しく設定されるようになりま" +#~ "した。" + +#~ msgid "" +#~ "Now the status of the global bypass button is correctly updated when " +#~ "changing plugin stack." +#~ msgstr "" +#~ "プラグインのスタックを変更したときに、グローバルバイパスボタンの状態が正し" +#~ "く更新されるようになりました。" + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "システム上のアイコンが見つからない場合は、アプリケーション情報インター" +#~ "フェース内に表示されません" + +#~ msgid "" +#~ "Some icons not showing in Plasma DE with Breeze icon theme should appear " +#~ "now." +#~ msgstr "" +#~ "Breeze アイコンテーマを使用した Plasma DE で表示されなかった一部のアイコン" +#~ "が表示されるようになりました。" + +#~ msgid "Updated Chinese translation." +#~ msgstr "中国語の翻訳を更新しました。" + +#~ msgid "Updated Italian translation." +#~ msgstr "イタリア語の翻訳を更新しました。" + +#~ msgid "Added support for the compressor parameter `Boost Amount`" +#~ msgstr "コンプレッサーのパラメーター「Boost Amount」に対応しました" + +#~ msgid "" +#~ "The multiband compressor plugin now uses the stereo multiband compressor " +#~ "plugin from Linux Studio Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "マルチバンドコンプレッサープラグインは、Calf Studio のものから Linux " +#~ "Studio Plugins のステレオマルチバンドコンプレッサープラグインを使用するよ" +#~ "うになりました。" + +#~ msgid "" +#~ "The limiter plugin now uses the stereo limiter plugin from Linux Studio " +#~ "Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "リミッタープラグインは、Calf Studio のものから Linux Studio Plugins のステ" +#~ "レオリミッタープラグインを使用するようになりました。" + +#~ msgid "" +#~ "LV2 filters now are spawned in PipeWire graph only when loaded the first " +#~ "time. Once loaded, they remain connected until EasyEffects shutdown." +#~ msgstr "" +#~ "LV2 フィルターは、最初に読み込まれたときのみ PipeWire グラフに生成されるよ" +#~ "うになりました。一度読み込まれると、EasyEffects がシャットダウンするまで接" +#~ "続されたままになります。" + +#~ msgid "The echo canceller sampling rate is now properly set." +#~ msgstr "" +#~ "エコーキャンセラーのサンプリングレートが正しく設定されるようになりました。" + +#~ msgid "" +#~ "The threshold parameter from the deesser plugin is now saved to the " +#~ "preset file." +#~ msgstr "" +#~ "ディエッサープラグインのしきい値パラメーターがプリセットファイルに保存され" +#~ "るようになりました。" + +#~ msgid "" +#~ "Improved band splitting for crystalizer with new default intensity values." +#~ msgstr "" +#~ "クリスタライザーのバンドスプリットを改善し、新しいデフォルトの強度値を追加" +#~ "しました。" + +#~ msgid "" +#~ "Depending on the input gain or output gain values the corresponding level " +#~ "bars could not be aligned." +#~ msgstr "" +#~ "入力ゲインや出力ゲインの値によっては、対応するレベルバーが揃わないことがあ" +#~ "りました。" + +#~ msgid "" +#~ "When adding more equalizer bands they are set to `Bell` instead of `Off`." +#~ msgstr "" +#~ "イコライザーバンドを追加すると、「オフ」ではなく「ベル」に設定されます。" + +#~ msgid "" +#~ "Equalizer APO presets loading is now working properly on locales " +#~ "different than C." +#~ msgstr "" +#~ "イコライザー APO のプリセットの読み込みが、C 以外のロケールで正しく動作す" +#~ "るようになりました。" + +#~ msgid "Improved linking management between port filter nodes in PipeWire." +#~ msgstr "PipeWire のポートフィルターノード間のリンク管理を改善しました。" + +#~ msgid "" +#~ "The crystalizer plugin signal amplification was too high before. It " +#~ "should be within more reasonable levels now." +#~ msgstr "" +#~ "以前は、クリスタライザープラグインの信号増幅が高すぎました。今は、より合理" +#~ "的なレベルになっているはずです。" + +#~ msgid "" +#~ "Improved the resampler used in the plugins that require one(like the " +#~ "rnnoise plugin)" +#~ msgstr "" +#~ "リサンプラーを必要とするプラグイン (rnnoise プラグインなど) で使用されるリ" +#~ "ザンプラーの改善" + +#~ msgid "Setting multiple autoloading presets should be fine now" +#~ msgstr "" +#~ "複数の自動読み込みプリセットを設定しても正常に動作するようになりました" + +#~ msgid "Transient windows are now properly set for some plugins dialogs" +#~ msgstr "" +#~ "一部のプラグインのダイアログで、一時的なウィンドウが適切に設定されるように" +#~ "なりました" + +#~ msgid "" +#~ "The convolver impulse response menu was improved to workaround an issue " +#~ "where the impulse files was not loaded when only one was available in the " +#~ "menu" +#~ msgstr "" +#~ "コンボルバーのインパルス応答メニューで、インパルスファイルが1つしかない場" +#~ "合に読み込まれないという問題を改善しました" + +#~ msgid "" +#~ "Fixed a bug that could make the pitch plugin to not be properly " +#~ "initialized" +#~ msgstr "ピッチプラグインが正しく初期化されないことがあるバグを修正しました" + +#~ msgid "" +#~ "The saturation warning should not displace its neighbor widgets anymore" +#~ msgstr "" +#~ "サチュレーション警告は、もう隣のウィジェットの位置を変えることはありません" + +#~ msgid "Fixed the locale in a few widgets" +#~ msgstr "いくつかのウィジェットのロケールを修正" + +#~ msgid "Fixed wrong alignment in a few widgets" +#~ msgstr "いくつかのウィジェットで誤った配置になっていたのを修正" + +#~ msgid "" +#~ "The Loudness plugin is being used again for the reasons described at This " +#~ "means that is an optional dependency again." +#~ msgstr "" +#~ "ラウドネスプラグインは、ここで説明されている理由のために再び使用されていま" +#~ "す。そのため、オプションの依存関係になりました。" + +#~ msgid "" +#~ "Fixed a segmentation fault that happened when optional dependencies were " +#~ "not installed" +#~ msgstr "" +#~ "オプションの依存パッケージがインストールされていない場合に発生するセグメン" +#~ "テーションフォールトを修正しました" + +#~ msgid "Improved equalizer interface." +#~ msgstr "イコライザーのインターフェースを改善しました。" + +#~ msgid "" +#~ "Now we use a sidechain LSP compressor that allows the user to select and " +#~ "external source as the sidechain input." +#~ msgstr "" +#~ "現在は、サイドチェーン入力として外部ソースを選択できるサイドチェーン LSP " +#~ "コンプレッサーを使用しています。" + +#~ msgid "We now support the LSP compressor `Boosting` mode." +#~ msgstr "LSP コンプレッサーの「ブースト」モードに対応しました。" + +#~ msgid "" +#~ "When `split-channels` is enabled in the equalizer the imported APO preset " +#~ "will be applied only to the channel being visualized in the window. This " +#~ "will allow to import different presets for each channel instead of just " +#~ "settings the same values to both." +#~ msgstr "" +#~ "イコライザーで「スプリットチャンネル」が有効になっている場合、インポートさ" +#~ "れた APO プリセットは、ウィンドウに表示されているチャンネルのみ適用されま" +#~ "す。これにより、両方に同じ値を設定するのではなく、チャンネルごとに異なるプ" +#~ "リセットをインポートすることができます。" + +#~ msgid "" +#~ "Fixed some segmentation faults that could happen when creating a preset " +#~ "autoloading profile or removing presets" +#~ msgstr "" +#~ "プリセットの自動読み込みプロファイル作成時やプリセットの削除時に発生するセ" +#~ "グメンテーションフォールトを修正" + +#~ msgid "" +#~ "This is one of the biggest releases that I have ever made. The amount of " +#~ "changes is so big that it is hard to talk about everything here." +#~ msgstr "" +#~ "今回のリリースは、これまでのリリースの中でも最も大きなもののひとつです。変" +#~ "更点が多すぎて、ここですべてを話すことはできません。" + +#~ msgid "" +#~ "The following are just the most import ones. People interested on the " +#~ "journey that got us here can take" +#~ msgstr "" +#~ "以下は、最も重要なものだけです。ここに至るまでの道のりに興味のある方は" + +#~ msgid "a look at and" +#~ msgstr "を見て、" + +#~ msgid "" +#~ "The application and its repository have been renamed from PulseEffects to " +#~ "`EasyEffects`" +#~ msgstr "" +#~ "アプリケーションとそのリポジトリの名称が PulseEffects から EasyEffects に" +#~ "変更されました" + +#~ msgid "gtkmm3 was replaced by gtkmm4" +#~ msgstr "gtkmm3 は gtkmm4 に置き換えられました" + +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "" +#~ "Gstreamer は、ネイティブの PipeWire フィルターに置き換えられました。" + +#~ msgid "" +#~ "Many features were reimplemented from scratch. The preset autoloading is " +#~ "one example. Another remarkable change will be seen in the plugins " +#~ "selection menu. Now the user can show in the window only the plugins that " +#~ "he/she wants to use." +#~ msgstr "" +#~ "多くの機能がゼロから再実装されました。プリセットの自動読み込みはその一例で" +#~ "す。また、プラグイン選択メニューも大きく変化しました。ユーザーは、使用した" +#~ "いプラグインだけをウィンドウに表示できるようになりました。" + +#~ msgid "" +#~ "Boost is no longer a dependency. The price paid for that was a little " +#~ "change in our presets structures. With some patience it is possible to " +#~ "edit PulseEffects presets in a text editor and make them work in " +#~ "EasyEffects. Hopefully someone will come up with a script for this in the " +#~ "feature." +#~ msgstr "" +#~ "Boost は依存関係でなくなりました。そのため、プリセットの構造に少し変更があ" +#~ "りました。根気があれば、PulseEffects のプリセットをテキストエディタで編集" +#~ "して、EasyEffects で動作させることができます。誰かがこの機能のためのスクリ" +#~ "プトを開発してくれることを期待しています。" + +#~ msgid "" +#~ "New libraries are being used and some of the librarires that were " +#~ "optional before are now required" +#~ msgstr "" +#~ "新しいライブラリーが使われるようになり、以前はオプションであったライブラ" +#~ "リーの一部が必須になりました" + +#~ msgid "Average" +#~ msgstr "平均" + +#~ msgid "Failed" +#~ msgstr "失敗" + +#~ msgid "Use Default" +#~ msgstr "デフォルトを使用" + +#~ msgid "Remove this plugin" +#~ msgstr "このプラグインを削除" + +#~ msgid "Import Presets" +#~ msgstr "プリセットをインポート" + +#~ msgid "Start Service at Login" +#~ msgstr "ログイン時にサービスを開始" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "起動時にデバイスの音量をリセット" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "アクティブモデル" + +#~ msgid "Add to Blocklist" +#~ msgstr "ブロックリストに追加" + +#~ msgid "Blocklist" +#~ msgstr "ブロックリスト" + +#~ msgid "Add Plugin" +#~ msgstr "プラグインを追加" + +#~ msgid "Speakers" +#~ msgstr "スピーカー" + +#~ msgid "Microphone" +#~ msgstr "マイク" + +#~ msgid "Plugins" +#~ msgstr "プラグイン" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "有効" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "有効" + +#~ msgid "Format" +#~ msgstr "フォーマット" + +#~ msgid "Latency" +#~ msgstr "レイテンシー" + +#~ msgid "idle" +#~ msgstr "アイドル" + +#~ msgid "Faster" +#~ msgstr "より速く" + +#~ msgid "Preserve Formant" +#~ msgstr "フォルマントを保持" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" diff --git a/po/ka.po b/po/ka.po new file mode 100644 index 0000000..4e2ce2c --- /dev/null +++ b/po/ka.po @@ -0,0 +1,2487 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-02-22 18:30+0000\n" +"Last-Translator: Temuri Doghonadze \n" +"Language-Team: Georgian \n" +"Language: ka\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.16-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "ჩართვა" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "გამორიცხვა" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_მორგება" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "პრესეტები" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "ძირითადი მენიუს" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "სამიზნე წერტილი" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "სიჩუმე" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "მითითება" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "ფარდობითი" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "დიაპაზონი" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "გამოტანის გაძლიერება" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "შეყვანა" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "გამოტანა" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "დაბრუნება" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "მოწყობილობა" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "სახელი" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "პროფილი" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "შაბლონი" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "მოსმენა" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "მესამე" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "მეორე" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "რაოდენობა" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "ჰარმონიები" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "ფარგლები" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "იატაკი" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "უმცირესი მნიშვნელობა" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "ბმული" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "აპლიკაციის სახელი" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "კომპრესორი" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "რეჟიმი" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "ქვევით" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "ზემოთ" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "გაძლიერება" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "შეტევა" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "დრო" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "ზღვარი" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "შეტევის დრო" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "გამოცემა" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "გათავისუფლების დრო" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "პროპორციები" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "მუხლი" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "სტერეო რეჟიმი" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "წყარო" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "შუა" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "გვერდითი" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "მარცხენა" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "მარჯვენა" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "მინ" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "მაქს" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "მარჯვენა" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "მარჯვენა" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "გვერდითი" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "გვერდითი" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "სტერეო რეჟიმი" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "პიკი" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "დაბალსიხშირული ფილტრი" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "ტიპი" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "გარე" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "შეყვანის მოწყობილობა" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "სიხშირე" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "გამორთ" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "გაძლიერება" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "კონვერტი" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "მრუდი" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "მხ" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "მარცხენა არხი" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "მჯ" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "მარჯვენა არხი" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "კომბინირება" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "სპექტრი" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "სიხშირე" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "სემპლები" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "ხანგრძლოვობა" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "ლენტა" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "დადუმება" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "ფართო" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "გაყოფა" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "გამოვლინდა" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "დაყოვნება" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "გუნდები" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "ბალანსი" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "არხების გაყოფა" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "პრესეტის შემოტანა" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "დახრა" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "სოლო" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "ხარისხი" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "სიგანე" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "ჭერი" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "შიდა" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "წვდომა" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "აღწერა" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "ზარი" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "გუნდები" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "ამოკვეთა" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "რეზონანსი" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "ეკვალაიზერი" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "გეითი" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "ზონა" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "მიქსი" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "პიკი" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "დიზერი" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "გაძლიერება" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "სტანდარტული" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "ბრტყელი" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "გამოტანის ხმა" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "კლინინგი" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "კლასიკური" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "თანამედროვე" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "სტერეო რეჟიმი" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "ფილტრი" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "მაღალი ხარისხი" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "ძირითადი" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "მოწყობილობის მართვა" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "ინფორმაცია სერვერის შესახებ" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "სემპლინგისსიჩქარე" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "გამოტანის მოწყობილობები" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "შემომტანი მოწყობილობები" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "მოდულები" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "კლიენტი" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "მდგომარეობა" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "ჩართულია" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "არხები" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "ორივე" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "ორივე არხი" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "ტალღოვანი" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "თეთრი ხმაური" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Pitch" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "მითითება" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "მითითება" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "ეფექტის დამატება" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_საერთო" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "სერვისი" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "აუდიო" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "სტილი" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "ექსპერიმენტალური" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "ფორმა" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "მართკუთხედები" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "ხაზები" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "წერტილები" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "წერტილები" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "ხაზის სიგანე" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "ღერძის ჭდეები" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "მინიმუმი" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "მაქსიმუმი" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "ჩატვირთვა" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "შაბლონი" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "პრესეტები" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "პატარა" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "საშუალო" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "დიდი" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "გვირაბი" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "ექსპერიმენტალური" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "დიფუზია" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Bass-ის მოჭრა" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "მაღალი სიხშირეების მოჭრა" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "ოთახი" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "დისკო" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "მოდელები" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "მიმოხილვა" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "ხმაურის მოცილება" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "ხმის მომატების ავტომატური კონტროლი" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "გაგრძელება" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "დონე" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "სტერეო რეჟიმი" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "გაშვებულია" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "გაჩერებულია" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "უმოქმედო" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "შექმნა" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "შეცდომა" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "უცნობი" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "არხები" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "გახსნა" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "სალამურები" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "მოთამაშეები" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "ეფექტები" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "წაშლა" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "გამოტანის მოწყობილობები" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "დამატება" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "ეკვალაიზერი" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "დონე" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "შემზღუდველი" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "ხმაურის შემცირება" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "გამოყენება" + +#~ msgid "Uniform" +#~ msgstr "ერთგვაროვანი" + +#~ msgid "infinity" +#~ msgstr "უსასრულობა" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "პროპორციები" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "ზღვარი" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "დაბალსიხშირული ფილტრი" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "მაღალსიხშირული ფილტრი" + +#~ msgid "Mixed" +#~ msgstr "შერეული" + +#~ msgid "Smooth" +#~ msgstr "რბილი" + +#~ msgid "Detector" +#~ msgstr "დეტექტორი" + +#~ msgid "Soft" +#~ msgstr "რბილი" + +#~ msgid "Phase" +#~ msgstr "ფაზა" + +#~ msgid "Independent" +#~ msgstr "დამოუკიდებელი" + +#~ msgid "Octaves" +#~ msgstr "ოქტავები" + +#~ msgid "_Manual" +#~ msgstr "_ხელით" + +#~ msgid "Low Pass" +#~ msgstr "დაბალსიხშირული ფილტრი" + +#~ msgid "Cancel" +#~ msgstr "გაუქმება" diff --git a/po/km.po b/po/km.po new file mode 100644 index 0000000..78fee8b --- /dev/null +++ b/po/km.po @@ -0,0 +1,2406 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-08-17 04:16+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Khmer (Central) \n" +"Language: km\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.14-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..4799dc2 --- /dev/null +++ b/po/ko.po @@ -0,0 +1,2830 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-08-17 04:16+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Korean \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.14-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "이퀄라이저, 컴프레서 및 기타 오디오 효과" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "PipeWire 응용프로그램을 위한 오디오 효과" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" +"limiter;compressor;reverberation;equalizer;autovolume;리미터;컴프레서;리버브;" +"이퀄라이저;자동음량조절;반향;잔향;자동음량;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"프리셋\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "이 응용프로그램 활성화/비활성화" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "활성화" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "제외된 앱 목록: 이 응용프로그램 추가/제거하기" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "제외하기" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "응용 프로그램 음소거" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "이 응용프로그램의 음량 변경하기" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "응용 프로그램 음량" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "설정 초기화(_R)" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "환경설정(_P)" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "단축키(_S)" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "프리셋" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "프리셋 메뉴" + +#: data/ui/application_window.ui:62 +#, fuzzy +msgid "Enable/disable the global bypass" +msgstr "이 응용프로그램 활성화/비활성화" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "전역 Bypass" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "기본 메뉴" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects 윈도우" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "응용 프로그램 목록" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "빈 목록" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "사용 가능한 오디오 응용프로그램 없음" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "내역 초기화" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "대상" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "최대 내역" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "참조" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "순간" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "단기" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "통합" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "기하 평균 (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "기하 평균 (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "기하 평균 (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "기하 평균 (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "소리의 세기" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "상대적" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "범위" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "아웃풋 게인" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "인풋" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "플러그인 인풋 게인" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "아웃풋" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "플러그인 아웃풋 게인" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "리셋" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "장치" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "이름" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "프로필" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "프리셋" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "이 자동 불러오기 프리셋 제거하기" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "듣기" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "고조파 섞기" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "세번째" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "두번째" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "수량" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "고조파" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "스코프" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "플로어" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "플로어 값" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "링크" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "응용프로그램 이름" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "제외된 응용프로그램에 추가하기" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "제외된 프로그램 목록" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "제외된 프로그램 보기" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "컴프레서" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "모드" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "아래방향" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "윗방향" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "증폭" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "압축 모드" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "부스트 한계값" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "부스트 양" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "어택" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "타임" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "한계값" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "어택 타임" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "어택 한계값" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "릴리스" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "릴리스 타임" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "릴리스 한계값" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "비율" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +#, fuzzy +msgid "Knee" +msgstr "Knee" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +#, fuzzy +msgid "Makeup" +msgstr "Makeup" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "드라이 레벨" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "웨트레벨" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "사이드체인" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "제거" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "소스" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "중간" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "측면" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "왼쪽" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "오른쪽" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "사이드체인 소스" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "오른쪽" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "오른쪽" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "측면" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "측면" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "제거" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "피크" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Low-Pass Filter Mode" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "사이드체인 모드" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "사이드체인" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "유형" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "피드 포워드" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "피드백" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "외부" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "사이드체인 유형" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "입력 장치" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "PreAmplification" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +#, fuzzy +msgid "Reactivity" +msgstr "Reactivity" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "룩 어헤드" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "사이드체인 필터" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "고대역" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "진동수" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "끄기" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "고대역 필터 모드" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "고대역 필터 진동수" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "저대역" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "저대역 필터 모드" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "게인" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "엔벌로프" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "곡선" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "좌측 채널" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "우측 채널" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulses" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "결합하기" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "스테레오 너비" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +#, fuzzy +msgid "Spectrum" +msgstr "스펙트럼" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "로그 스케일" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "오토게인" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "속도" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "샘플" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "재생시간" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Impulse 반응 결합하기" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "첫 번째 커널" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "두 번째 커널" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "출력 파일 이름" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "결합된 커널 이름" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Impulse 가져오기" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "검색하기" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Impulse 파일 검색하기" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Impulse 파일 목록" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "기본값" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "컷오프" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "피드" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "바이패스" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +#, fuzzy +msgid "Mute" +msgstr "음소거" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "탐지" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "와이드" + +#: data/ui/deesser.ui:78 +#, fuzzy +msgid "Split" +msgstr "Split" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "F1 Split" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frequency 1 Split" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "F2 Peak" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frequency 2 Peak" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "F1 Gain" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frequency 1 Gain" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "F2 Level" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frequency 2 Level" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "F2 Peak Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frequency 2 Peak Q" + +#: data/ui/deesser.ui:272 +#, fuzzy +msgid "Laxity" +msgstr "Laxity" + +#: data/ui/deesser.ui:586 +#, fuzzy +msgid "Detected" +msgstr "Detected" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Reduction" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filter Length" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filter Length" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "오른쪽" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "프리셋 가져오기" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "External" + +#: data/ui/factory_clients_listview.ui:72 +#, fuzzy +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +#, fuzzy +msgid "Access" +msgstr "액세스" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "고대역" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "바이패스" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "저대역" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Reduction" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "저대역" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "릴리스 타임" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frequency 2 Peak" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +#, fuzzy +msgid "Band 1" +msgstr "바이패스" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +#, fuzzy +msgid "Band 2" +msgstr "바이패스" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +#, fuzzy +msgid "Band 3" +msgstr "바이패스" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +#, fuzzy +msgid "Band 4" +msgstr "바이패스" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "컴프레서" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "바이패스" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "제거" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "바이패스" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Reduction" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "프리셋 자동 로딩" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "출력 게인" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "출력 프리셋" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "자동 로딩 출력 프리셋 추가하기" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "출력 자동 로딩 프리셋 목록" + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "장치" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "입력 프리셋" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "자동 로딩 입력 프리셋 추가하기" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "입력 자동 로딩 프리셋 목록" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +#, fuzzy +msgid "State" +msgstr "상태" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +#, fuzzy +msgid "Channels" +msgstr "채널" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +#, fuzzy +msgid "Both Channels" +msgstr "채널" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filter Length" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "참조" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "참조" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +#, fuzzy +msgid "Used Plugins List" +msgstr "사용된 플러그인 목록" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "불러오기" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "이 프리셋 파일에 현재 설정 저장하기" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "이 프리셋 파일에 현재 설정 저장하기" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "이 프리셋 파일 제거하기" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "새 입력 프리셋 이름" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "새 프리셋 만들기" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "프리셋 가져오기" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "입력 프리셋 검색하기" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "입력 프리셋 목록" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "탐지" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "모델을 불러오지 않았습니다" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "EasyEffects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "재생시간" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "F2 Level" + +#: data/ui/stereo_tools.ui:79 +#, fuzzy +msgid "Input Balance" +msgstr "출력 게인" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +#, fuzzy +msgid "Stereo Mode" +msgstr "제거" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "출력 게인" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +#, fuzzy +msgid "Running" +msgstr "실행 중" + +#: src/app_info.cpp:67 +#, fuzzy +msgid "Suspended" +msgstr "일시 중단됨" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "만드는 중" + +#: src/app_info.cpp:73 +#, fuzzy +msgid "Error" +msgstr "에러" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "채널" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "프리셋을 불러옵니다. 예시: easyeffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "EasyEffects" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "사용 가능한 프리셋을 표시합니다." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "아웃풋" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "인풋" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Impulse 파일을 가져오지 않았습니다" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Impulse 파일 가져오기" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "열기" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Impulse 불러오기" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Impulse 제거하기" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "불러온 Impulse 파일 없음" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Impulse 파일을 불러오지 못했습니다" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "재생기" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "효과음" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "APO 프리셋 파일 가져오기" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO 프리셋" + +#: src/equalizer_ui.cpp:412 +#, fuzzy +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"APO 프리셋을 불러오지 못했습니다. 파일 형식이 잘못되었을 수 있습니다. 내용을 " +"확인하십시오." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "GraphicEQ 프리셋 파일 가져오기" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "GraphicEQ 프리셋" + +#: src/equalizer_ui.cpp:610 +#, fuzzy +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"GraphicEQ 프리셋을 불러오지 못했습니다. 파일 형식이 잘못되었을 수 있습니다. " +"내용을 확인하십시오." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "자동 로딩 프리셋 제거하기" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "출력 게인" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "제거" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "출력 게인" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"선택한 모델을 불러오지 못했습니다. 형식이 지원되지 않을 수 있습니다. 표준 모" +"델로 돌아갔습니다." + +#: src/rnnoise_ui.cpp:138 +#, fuzzy +msgid "Import Model File" +msgstr "APO 프리셋 파일 임포트" + +#: src/rnnoise_ui.cpp:151 +#, fuzzy +msgid "RNNoise Models" +msgstr "제거" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "음량" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "출력 게인" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "사용 중" + +#~ msgid "Uniform" +#~ msgstr "균일" + +#~ msgid "New Output Preset Name" +#~ msgstr "새 출력 프리셋 이름" + +#~ msgid "Search Output Preset" +#~ msgstr "출력 프리셋 검색하기" + +#~ msgid "Output Presets List" +#~ msgstr "출력 프리셋 목록" + +#~ msgid "infinity" +#~ msgstr "무한대" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "비율" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "한계값" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "저대역" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "고대역" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "소리의 세기" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "포멧" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "프리셋" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detection" + +#~ msgid "_Manual" +#~ msgstr "수동(_M)" + +#~ msgid "Cancel" +#~ msgstr "취소하기" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "PreAmplification" + +#, fuzzy +#~ msgid "Frame Size" +#~ msgstr "Frame Size" + +#, fuzzy +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "전역 바이패스 활성화/비활성화" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "저대역" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "균일" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "좌측 채널" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "우측 채널" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "타겟" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "타겟" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "타겟" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "타겟" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "PipeWire 음향 효과 애플리케이션" + +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects 정보(_A)" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects 윈도우" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "바이패스" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects는 고급 오디오 처리 도구 입니다. 이퀄라이저, 리미터, 컴프레서, " +#~ "리버브 툴 등이 포함되며, 이외에도 여러가지 플러그인이 있습니다. 예를 들자" +#~ "면 스펙트럼 분석기도 내장되어 있습니다." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects는 PulseEffects의 후속 프로젝트 입니다. EasyEffects는 PipeWire " +#~ "만을 지원 합니다. PulseAudio를 사용하는 경우 PulseEffects를 사용하십시오." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "EasyEffects는 기본 PipeWire 사운드 서버를 사용하므로 대부분의 응용 프로그" +#~ "램에서 작동합니다. 지원되는 모든 응용 프로그램은 메인 화면에 표시되며 각" +#~ "각 개별적으로 활성화할 수 있습니다." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "EasyEffects는 음향 출력을 처리할 뿐만 아니라 마이크 등의 입력 장치에도 음" +#~ "향효과를 걸 수 있습니다. 예를 들어 오디오 녹음 할 때 유용하며 음성 대화 시" +#~ "에도 효과를 발휘합니다." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "EasyEffects를 시작하면 마지막 세션에서 사용된 설정이 적용됩니다. 현재 설정" +#~ "을 모두 프로파일로 저장할 수도 있습니다." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "두 개의 오디오 출력 프로그램을 보여주는 메인 페이지" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "오디오 컨트롤을 보여주는 bass enhancer 페이지" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "오디오 컨트롤을 보여주는 convolver 페이지" + +#~ msgid "This release adds the following features:" +#~ msgstr "이 릴리스에는 다음 기능이 추가되었습니다:" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "피치 플러그인의 인터페이스가 개선되었습니다" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "이제 응용 프로그램 아이콘이 QT를 사용하는 데스크톱과 호환됩니다." + +#~ msgid "" +#~ "Our blocklist code will use the `application.id` tag if the stream sets it" +#~ msgstr "" +#~ "스트림이 설정하는 경우 차단 목록 코드는 `application.id` 태그를 사용합니" +#~ "다." + +#~ msgid "" +#~ "In order to avoid problems with the mouse scroll the entries in the " +#~ "applications list shown in our `Players/Recorders`" +#~ msgstr "" +#~ "마우스 스크롤 문제를 방지하려면 `재생/녹음`에 표시된 애플리케이션 목록의 " +#~ "항목을 스크롤하십시오" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "탭에 더 이상 볼륨 스케일이 표시되지 않습니다. 문제 및 해결 방법에 대한 자" +#~ "세한 내용은 #1211에서 확인할 수 있습니다." + +#~ msgid "and #1427" +#~ msgstr "그리고 #1427" + +#~ msgid "This release fixes the following bug:" +#~ msgstr "이 릴리스는 다음 버그를 수정합니다:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "이 릴리스에는 다음 기능이 추가되었습니다:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "크로스 피드 필터는 PipeWire의 동적 레이턴시 스위치에 잘 대응합니다. 이제 " +#~ "볼륨 레벨 점프가 발생하지 않습니다." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "모노 마이크가 EasyEffects에서 제대로 작동하지 않던 버그를 수정했습니다" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "PipeWire 다음 릴리스 `0.3.44`를 지원" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "차단 목록에 추가" + +#, fuzzy +#~ msgid "Add Plugin" +#~ msgstr "플러그인 추가" + +#, fuzzy +#~ msgid "Format" +#~ msgstr "포멧" + +#, fuzzy +#~ msgid "Latency" +#~ msgstr "레이턴시" + +#, fuzzy +#~ msgid "idle" +#~ msgstr "유휴 상태" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 0000000..3c5557d --- /dev/null +++ b/po/meson.build @@ -0,0 +1,5 @@ +i18n_mod.gettext(meson.project_name(), + preset: 'glib' +) + +subdir('news') diff --git a/po/nb_NO.po b/po/nb_NO.po new file mode 100644 index 0000000..199b275 --- /dev/null +++ b/po/nb_NO.po @@ -0,0 +1,2734 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-08-17 04:16+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb_NO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Tonekontroll, kompressor og andre lydeffekter" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Lydeffekter for PipeWire-programmer" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "«Forhåndsinnstillinger»" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Skru på/av dette programmet" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Påskrudd" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Forstum program" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Programlydstyrke" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Hjelp" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Tilbakestill innstillinger" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Innstillinger" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Snarveier" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "_Om EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +#, fuzzy +msgid "Presets" +msgstr "Profiler" + +#: data/ui/application_window.ui:55 +#, fuzzy +msgid "Presets Menu" +msgstr "Profilmeny" + +#: data/ui/application_window.ui:62 +#, fuzzy +msgid "Enable/disable the global bypass" +msgstr "Skru på/av dette programmet" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Hovedmeny" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects-vindu" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Programliste" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Tom liste" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Programnavn" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Tilbakestill historikk" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Mål" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Maksimum" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referanse" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrert" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativ" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Inngang" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Utgang" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Tilbakestill" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Enhet" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Navn" + +#: data/ui/autoload_row.ui:64 +#, fuzzy +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Forhåndsinnstilling" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Fjern denne modellfilen" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Lytt" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "Tredje" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "Andre" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Mengde" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Overtoner" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Omfang" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Gulv" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Gulvverdi" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Lenke" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Programnavn" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Vis svartelistede programmer" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Svartelistede programmer" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Vis svartelistede programmer" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Lukk vinduet" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompressor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modus" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Nedover" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Oppover" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Kompresjonsmodus" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Tid" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Terskel" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Forhold" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereomodus" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Kilde" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Venstre" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Høyre" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Maksimum" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Høyre" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Høyre" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Stereomodus" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Lavpassfilter-modus" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Type" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +#, fuzzy +msgid "Feed-back" +msgstr "Respons" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Ekstern" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Inndataenhet" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Høypass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frekvens" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Av" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/okt" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/okt" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/okt" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Høypassfilter-modus" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Høypassfilter-frekvens" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Lavpass" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Lavpassfilter-modus" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Forsterkning" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "V" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Venstre kanal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "H" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Høyre kanal" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulser" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Kombiner" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Stereobredde" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Log-skala" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Takt" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Varighet" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Første kjerne" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Andre kjerne" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Utdata-filnavn" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Kombinert kjernenavn" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Søk" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Forvalg" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Oppdagelse" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Bred" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Reduksjon" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inverter fase" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filterlengde" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Filterlengde" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Reduksjon" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Reduksjon" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bånd" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balanse" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Høyre" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Beregn frekvenser" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Bånd" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kvalitet" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Bredde" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Ekstern" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Tilgang" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Beskrivelse" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Fjern denne modellfilen" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Høypass" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Bånd" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonans" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Lavpass" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Maks. reduksjon" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Lavpass" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Oversampling" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ingen" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Utgangslydstyrke" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klassisk" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderne" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Inverter fase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Bånd 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Bånd 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Bånd 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Bånd 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Bånd 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Bånd 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Bånd 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Bånd 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Bånd-start" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Bånd-slutt" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereomodus" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Kvalitet" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Maks. reduksjon" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Generelt" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Bruk forvalgt inngang" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Egendefinert inngangsenhet" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Bruk forvalgt utgang" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Egendefinert utgangsenhet" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Tjenerinfo" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Biblioteksversjon" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Utgangsenheter" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Utgangsforhåndsinnstillinger" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Opprett tilknytning" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Inngangsenheter" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Inngangsforhåndsinnstillinger" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Moduler" + +#: data/ui/pipe_manager_box.ui:429 +#, fuzzy +msgid "Modules List" +msgstr "Modulliste" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Klienter" + +#: data/ui/pipe_manager_box.ui:461 +#, fuzzy +msgid "Clients List" +msgstr "Klientliste" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Testsignal" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Tilstand" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Påskrudd" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Egenskaper" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanaler" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Begge" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Begge kanaler" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Bølgeform" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinusbølge" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Hvit støy" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Lukk vinduet" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filterlengde" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Referanse" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Referanse" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Fjern denne modellfilen" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Generelt" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Tjeneste" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Lyd" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Stil" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Ifør mørk drakt" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Eksperimentelt" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Lukk vinduet" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Form" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Bjelker" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linjer" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Høyde" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Linjebredde" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Farge" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maksimum" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Nytt inngangforhåndsinnstillingsnavn" + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Opprett forhåndsinnstilling" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Importer forhåndsinnstillinger" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Forhåndsinnstilling" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Inngangforhåndsinnstillingsliste" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Høyfrekvensdemping" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Romstørrelse" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Lite" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Middels" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Stort" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Eksperimentelt" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Tor tom hall" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Diskotek" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importer modell" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Oppdagelse" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modeller" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Aktiv modell" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Oversikt" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Lukk vinduet" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "Avslutt EasyEffects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Tjenerinfo" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +#, fuzzy +msgid "Start" +msgstr "Bånd-start" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Reduksjon" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Stereomodus" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +#, fuzzy +msgid "Error" +msgstr "feil" + +#: src/app_info.cpp:75 +#, fuzzy +msgid "Unknown" +msgstr "ukjent" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Kanaler" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Avslutt EasyEffects" + +#: src/application.cpp:559 +#, fuzzy +msgid "Hide the Window." +msgstr "Skjul vinduet." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Vis tilgjengelige forhåndsinnstillinger." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Utgang" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Inngang" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Åpne" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Opptakere" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Avspillere" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Importer forhåndsinnstillinger" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Inngangsforhåndsinnstillinger" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Utgangsenhet" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Fjern" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Utgangsenhet" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +#, fuzzy +msgid "Import Model File" +msgstr "Importer modellfil" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +#, fuzzy +msgid "Bass Enhancer" +msgstr "Balanse" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +#, fuzzy +msgid "Convolver" +msgstr "Convolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +#, fuzzy +msgid "Echo Canceller" +msgstr "Avbryt" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Utgangsenhet" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +#, fuzzy +msgid "Maximizer" +msgstr "Maksimum" + +#: src/tags_plugin_name.cpp:51 +#, fuzzy +msgid "Multiband Compressor" +msgstr "Kompressor" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +#, fuzzy +msgid "Reverberation" +msgstr "Tjenerinfo" + +#: src/tags_plugin_name.cpp:55 +#, fuzzy +msgid "Noise Reduction" +msgstr "Reduksjon" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +#, fuzzy +msgid "Stereo Tools" +msgstr "Stereomodus" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Bruker" + +#~ msgid "Uniform" +#~ msgstr "Ensartet" + +#~ msgid "infinity" +#~ msgstr "uendelig" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Forhold" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Terskel" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Lavpass" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Høypass" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/okt lavpass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/okt lavpass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/okt lavpass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/okt høypass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/okt høypass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/okt høypass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/okt båndpass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/okt båndpass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/okt båndpass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct båndsperre" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct båndsperre" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct båndsperre" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Modulliste" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Oppdagelse" + +#~ msgid "Octaves" +#~ msgstr "Oktaver" + +#, fuzzy +#~ msgid "_Manual" +#~ msgstr "_Manuell" + +#~ msgid "Cancel" +#~ msgstr "Avbryt" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Forstum program" + +#~ msgid "Frame Size" +#~ msgstr "Rammestørrelse" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Lavpass" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Ensartet" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Venstre kanal" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Høyre kanal" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Reduksjon" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects er et avansert lydmanipuleringsverktøy. Det har tonekontroll, " +#~ "lydbegrenser, kompressor og etterklangsverktøy, for å nevne noe. En " +#~ "innebygd spektrumsanalysator komplementerer disse." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects er etterfølgeren til PulseEffects. EasyEffects støtter også " +#~ "Pipewire sin lydtjener. PulseAudio-brukere bør bruke PulseEffects " +#~ "istedenfor." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Når EasyEffects startes, vil den huske alle innstillingene du gjorde i " +#~ "forrige økt. Det er også mulig å lagre innstillingene i ulike profiler." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "Hovedsiden som viser to programmer der det spilles av lyd" + +#, fuzzy +#~ msgid "The convolver page showing audio controls" +#~ msgstr "Convolver-siden viser lydkontroller" + +#~ msgid "This release adds the following features:" +#~ msgstr "Denne utgaven bringer følgende funksjoner:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bånd 1" + +#, fuzzy +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Dette er en ny innstilling som lar brukeren velge tidsavbrudd for " +#~ "inaktivitet. Når ingen klient spiller" + +#, fuzzy +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "til eller tar opp fra enhetene vil filterne avlenkes etter at " +#~ "tidsavbruddsperioden er nådd. Dette gjøres for å ikke" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "kaste bort prosessorkraft på å behandle stillhet." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Denne utgaven fikser følgende feil:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Denne utgaven fikser følgende funksjon:" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Støtte for neste PipeWire-utgave `0.3.44`" + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "`tbb`-biblioteket er en ny avhengighet" + +#~ msgid "Updated Chinese translation." +#~ msgstr "Oppdatert kinesisk oversettelse." + +#~ msgid "Updated Italian translation." +#~ msgstr "Oppdatert italiensk oversettelse." + +#~ msgid "gtkmm3 was replaced by gtkmm4" +#~ msgstr "gtkmm3 erstattes av gtkmm4" + +#, fuzzy +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "GStreamer erstattet av systemspesifikke PipeWire-filtre." + +#~ msgid "Average" +#~ msgstr "Gjennomsnitt" + +#~ msgid "Use Default" +#~ msgstr "Bruk forvalg" + +#~ msgid "Remove this plugin" +#~ msgstr "Fjern dette programtillegget" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktiv modell" + +#~ msgid "Add to Blocklist" +#~ msgstr "Legg til på svarteliste" + +#~ msgid "Blocklist" +#~ msgstr "Svarteliste" + +#~ msgid "Add Plugin" +#~ msgstr "Legg til programtillegg" + +#~ msgid "Speakers" +#~ msgstr "Høyttalere" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Programtillegg" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Påskrudd" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Påskrudd" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Forsinkelse" + +#~ msgid "Faster" +#~ msgstr "Raskere" diff --git a/po/news/LINGUAS b/po/news/LINGUAS new file mode 100644 index 0000000..a8c50ba --- /dev/null +++ b/po/news/LINGUAS @@ -0,0 +1,27 @@ +cs +de +fr_FR +gl +hr +id_ID +it_IT +nl +pl +pt_BR +ru +sk +sv +da +nb_NO +es_MX +es_CO +tr +zh_CN +ro +es_VE +ja +ko +es +km +af +th \ No newline at end of file diff --git a/po/news/POTFILES.in b/po/news/POTFILES.in new file mode 100644 index 0000000..3f56702 --- /dev/null +++ b/po/news/POTFILES.in @@ -0,0 +1 @@ +data/com.github.wwmm.easyeffects.metainfo.xml.in \ No newline at end of file diff --git a/po/news/af.po b/po/news/af.po new file mode 100644 index 0000000..0d9827c --- /dev/null +++ b/po/news/af.po @@ -0,0 +1,1097 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Afrikaans \n" +"Language: af\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Oudio-effekte vir PipeWire toepassing" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects is 'n gevorederde oudio manipilasie toepassing. Dit sluit in 'n " +"gelykmaker, beperker, kompressor en nagalminstrument, net om 'n paar te " +"noem. Om die te komplementeer is daar ook 'n spektrum ontleder." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects is die opvolger van PulseEffects. EasyEffects ondersteun slegs " +"PipeWire se klankbediener. PulseAudio-gebruikers moet eerder PulseEffects " +"gebruik." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Omdat EasyEffects die verstek PipeWire-klankbediener gebruik, sal dit met " +"die meeste, indien nie alle toepassings wat jy gebruik nie, werk. Alle " +"ondersteunde toepassings word in die hoofskerm aangebied, waar elkeen " +"individueel geaktiveer kan word." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/cs.po b/po/news/cs.po new file mode 100644 index 0000000..cd6e465 --- /dev/null +++ b/po/news/cs.po @@ -0,0 +1,3207 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Pavel Fric , 2017, 2018, 2019. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-17 02:58+0000\n" +"Last-Translator: Fjuro \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Zvukové efekty pro programy využívající PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects je pokročilým nástrojem pro zacházení se zvukem. Obsahuje mimo " +"jiné nástroj ekvalizéru, omezovače (limiter), kompresoru a dozvuku. Na " +"doplnění je také vestavěn analyzátor spektra." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects je nástupce aplikace PulseEffects. EasyEffects podporuje pouze " +"audio server PipeWire. Uživatelé PulseAudio by měli použít aplikaci " +"PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Protože EasyEffects používá výchozí zvukový server PipeWire, bude pracovat s " +"většinou, pokud už ne se všemi vámi používanými programy. Všechny " +"podporované programy jsou ukázány v hlavním okně, v němž je možné kterýkoli " +"z nich ručně povolit." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Vedle práce se zvukovým výstupem dokáže EasyEffects efekty použít i na " +"vstupní zařízení, jako je mikrofon. To je užitečné mimo jiné při nahrávání " +"zvuku, avšak lze dobře uplatnit i během hlasových hovorů." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Když je EasyEffects spuštěn, zapamatuje si nastavení používané při posledním " +"sezení. Je možné i uložit všechna aktuální nastavení jako profil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Hlavní stránka zobrazující dvě aplikace přehrávající zvuk" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Stránka zesílení basů zobrazující nastavení zvuku" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +#, fuzzy +msgid "The convolver page showing audio controls" +msgstr "Stránka konvoleru (convoler) zobrazující nastavení zvuku" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Funkce:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Opravy chyb:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Ostatní poznámky:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Vylepšené překlady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Vylepšené překlady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +#, fuzzy +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "Kód pro automatické načtení profilu u USB zařízení byl vylepšen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Vylepšené překlady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Opravena chyba, kdy EasyEffects mohlo spadnout při současném zavírání okna a " +"aplikování efektů." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "Do profilu lze uložit stav bypassu. Důvod je popsaný v problému 1039" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "Kód pro automatické načtení profilu u USB zařízení byl vylepšen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +#, fuzzy +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"Uživateli je zobrazen dialog, pokud se nezdaří načíst profil, nebo pokud " +"soubor profilu/impulse se nepovedlo importovat." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"EasyEffect již nespadne pokud uživatelské nastavení jazyka není správně " +"nastaveno." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"V ikoně bylo implementováno řešení, které si poradí s nedostatečnou podporou " +"SVG v knihovně QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Pásma" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ekvalizér, kompresor a jiné zvukové efekty" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "" +#~ "omezovač (limiter);kompresor;dozvuk;ekvalizér;automatická hlasitost;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Přednastavení\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Povolit" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "_Preferences" +#~ msgstr "Referenční Signál" + +#, fuzzy +#~ msgid "_Shortcuts" +#~ msgstr "Jednorázové" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Přednastavení" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Přednastavení" + +#~ msgid "Global Bypass" +#~ msgstr "Přepustení" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Prázdné zdi" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Programy" + +#~ msgid "Target" +#~ msgstr "Cíl" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Největší zesílení" + +#, fuzzy +#~ msgid "Reference" +#~ msgstr "Referenční Signál" + +#~ msgid "Momentary" +#~ msgstr "Chvilkové" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Jednorázové" + +#~ msgid "Integrated" +#~ msgstr "Sjednocené" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Použít přechod" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Použít přechod" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Použít přechod" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Použít přechod" + +#, fuzzy +#~ msgid "Reset History" +#~ msgstr "Vymazat Historii" + +#~ msgid "Relative" +#~ msgstr "Relativní" + +#~ msgid "Range" +#~ msgstr "Rozsah" + +#~ msgid "Loudness" +#~ msgstr "Hlasitost" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Vstupní zesílení" + +#~ msgid "Input" +#~ msgstr "Vstup" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Vstupní zesílení" + +#~ msgid "Output" +#~ msgstr "Výstup" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Vstupní zesílení" + +#~ msgid "Reset" +#~ msgstr "Vrátit na výchozí" + +#, fuzzy +#~ msgid "Device" +#~ msgstr "Omezovač vstupu" + +#~ msgid "Name" +#~ msgstr "Název" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Přednastavení" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Odstranit tento soubor s přednastavením" + +#~ msgid "Listen" +#~ msgstr "Poslouchat" + +#~ msgid "Blend Harmonics" +#~ msgstr "Míchat harmonické kmity" + +#~ msgid "3rd" +#~ msgstr "3." + +#~ msgid "2nd" +#~ msgstr "2." + +#~ msgid "Amount" +#~ msgstr "Množství" + +#~ msgid "Harmonics" +#~ msgstr "Harmonické kmity" + +#~ msgid "Scope" +#~ msgstr "Rozsah" + +#~ msgid "Floor" +#~ msgstr "Spodní mez" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Spodní mez" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Zobrazit Aplikace z Blocklistu na Hlavní Kartě" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Zobrazit Aplikace z Blocklistu na Hlavní Kartě" + +#~ msgid "Compressor" +#~ msgstr "Kompresor" + +#~ msgid "Mode" +#~ msgstr "Režim" + +#~ msgid "Downward" +#~ msgstr "Dolů" + +#~ msgid "Upward" +#~ msgstr "Nahoru" + +#~ msgid "Compression Mode" +#~ msgstr "Kompresní režim" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Množství" + +#~ msgid "Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Ve skutečném čase" + +#~ msgid "Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Práh" + +#~ msgid "Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Relativní Práh Uvolnění" + +#~ msgid "Ratio" +#~ msgstr "Poměr" + +#~ msgid "Knee" +#~ msgstr "Přechod" + +#~ msgid "Makeup" +#~ msgstr "Pozvednutí" + +#~ msgid "Sidechain" +#~ msgstr "Postranní řetězec" + +#~ msgid "Peak" +#~ msgstr "Vrchol" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Dolní pásmo" + +#~ msgid "Uniform" +#~ msgstr "Rovnoměrný" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Postranní řetězec" + +#~ msgid "Source" +#~ msgstr "Zdroj" + +#~ msgid "Middle" +#~ msgstr "Střední" + +#~ msgid "Side" +#~ msgstr "Postranní" + +#~ msgid "Left" +#~ msgstr "Levý" + +#~ msgid "Right" +#~ msgstr "Pravý" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Postranní řetězec" + +#~ msgid "Type" +#~ msgstr "Typ" + +#~ msgid "Feed-forward" +#~ msgstr "Kanál-vpřed" + +#~ msgid "Feed-back" +#~ msgstr "Kanál-zpět" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Postranní řetězec" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Omezovač vstupu" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Předzesílení" + +#~ msgid "Reactivity" +#~ msgstr "Reaktivita" + +#~ msgid "Lookahead" +#~ msgstr "Výhled" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Postranní řetězec" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Horní pásmo" + +#~ msgid "Frequency" +#~ msgstr "Kmitočet" + +#~ msgid "Off" +#~ msgstr "Vypnuto" + +#, fuzzy +#~ msgid "12 dB/oct" +#~ msgstr "Nízká pásmová propust 12 dB/okt" + +#, fuzzy +#~ msgid "24 dB/oct" +#~ msgstr "Nízká pásmová propust 24 dB/okt" + +#, fuzzy +#~ msgid "36 dB/oct" +#~ msgstr "Nízká pásmová propust 36 dB/okt" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Vysokopásmový filtr" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Tlumení vysokého kmitočtu" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Vysokopásmový filtr" + +#~ msgid "Gain" +#~ msgstr "Zesílení" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Sklon" + +#~ msgid "Curve" +#~ msgstr "Křivka" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Kanály" + +#~ msgid "R" +#~ msgstr "P" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Rozdělit kanály" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Odpověď impulsu" + +#~ msgid "Stereo Width" +#~ msgstr "Šířka sterea" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Log Scale" +#~ msgstr "Měřítko" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Automatické zesílení" + +#~ msgid "Rate" +#~ msgstr "Kmitočet" + +#~ msgid "Samples" +#~ msgstr "Vzorky" + +#~ msgid "Duration" +#~ msgstr "Doba trvání" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Odpověď impulsu" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Výstup" + +#~ msgid "Import Impulse" +#~ msgstr "Zavést impuls" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Zavést soubor s impulsem" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Zavést soubor s impulsem" + +#~ msgid "Default" +#~ msgstr "Výchozí" + +#~ msgid "Cutoff" +#~ msgstr "Useknutí" + +#~ msgid "Feed" +#~ msgstr "Kanál" + +#~ msgid "Bypass" +#~ msgstr "Překlenutí" + +#~ msgid "Mute" +#~ msgstr "Ztlumit" + +#~ msgid "Detection" +#~ msgstr "Zjištění" + +#~ msgid "Wide" +#~ msgstr "Rozšířit" + +#~ msgid "Split" +#~ msgstr "Rozdělit" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Rozdělit" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Kmitočet" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Vrchol" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Kmitočet" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Zesílení" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Kmitočet" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Úroveň" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Kmitočet" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Vrchol Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Kmitočet" + +#~ msgid "Laxity" +#~ msgstr "Nedbalost" + +#~ msgid "Detected" +#~ msgstr "Zjištěno" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Snížení" + +#~ msgid "Frame Size" +#~ msgstr "Rozměry rámečku" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filtr" + +#~ msgid "Bands" +#~ msgstr "Pásma" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "Split Channels" +#~ msgstr "Rozdělit kanály" + +#~ msgid "Flat Response" +#~ msgstr "Uhladit" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Vypočítat Kmitočty" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "APO Přednastavení" + +#~ msgid "Bell" +#~ msgstr "Zvonek" + +#~ msgid "High Pass" +#~ msgstr "Horní pásmo" + +#~ msgid "High Shelf" +#~ msgstr "Horní práh" + +#~ msgid "Low Pass" +#~ msgstr "Dolní pásmo" + +#~ msgid "Low Shelf" +#~ msgstr "Dolní práh" + +#~ msgid "Notch" +#~ msgstr "Vroubek" + +#~ msgid "Resonance" +#~ msgstr "Rezonance" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Dolní pásmo" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Pásma" + +#~ msgid "Slope" +#~ msgstr "Sklon" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Sklon" + +#~ msgid "Width" +#~ msgstr "Šířka" + +#~ msgid "Quality" +#~ msgstr "Jakost" + +#~ msgid "Solo" +#~ msgstr "Sólo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Strop" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Zjištění" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Odstranit tento soubor s přednastavením" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Nízká pásmová propust 12 dB/okt" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Nízká pásmová propust 24 dB/okt" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Nízká pásmová propust 36 dB/okt" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Vysoká pásmová propust 12 dB/okt" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Vysoká pásmová propust 24 dB/okt" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Vysoká pásmová propust 36 dB/okt" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Pásmová propustnost 6 dB/okt" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Pásmová propustnost 12 dB/okt" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Pásmová propustnost 18 dB/okt" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Vyloučení pásma 6 dB/okt" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Vyloučení pásma 12 dB/okt" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Vyloučení pásma 18 dB/okt" + +#~ msgid "Inertia" +#~ msgstr "Setrvačnost" + +#~ msgid "Gate" +#~ msgstr "Brána" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Sjednocené" + +#~ msgid "Gating" +#~ msgstr "Hradlo" + +#~ msgid "Oversampling" +#~ msgstr "Převzorkování" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Rozšířit" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Rozšířit" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Šířka čáry" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Šířka čáry" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Šířka čáry" + +#~ msgid "None" +#~ msgstr "Žádný" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Předzesílení" + +#~ msgid "Stereo Link" +#~ msgstr "Spojení sterea" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Postranní řetězec" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Automatické Úrovně" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Automatické Úrovně" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Automatické Úrovně" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Automatické Úrovně" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Levý" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Pravý" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Postranní řetězec" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Postranní řetězec" + +#~ msgid "Standard" +#~ msgstr "Standardní" + +#~ msgid "Flat" +#~ msgstr "Rovný" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Rozměry rámečku" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Výstup" + +#~ msgid "Ceiling" +#~ msgstr "Strop" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Zavést impuls" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Režim" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Postranní řetězec" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Kompresní režim" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Postranní řetězec" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Nízkopropustný Mód Filtru" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Nízkopropustný Mód Filtru" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Vysokopásmový filtr" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Vysokopásmový filtr" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Vstupní zesílení" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Křivka" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Rozdělit" + +#~ msgid "Split 1/2" +#~ msgstr "Rozdělit 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Kmitočet" + +#~ msgid "Split 2/3" +#~ msgstr "Rozdělit 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Kmitočet" + +#~ msgid "Split 3/4" +#~ msgstr "Rozdělit 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Kmitočet" + +#~ msgid "Sub Band" +#~ msgstr "Spodní pásmo" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Zmenšení zesílení" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Pozvednutí" + +#~ msgid "Max Reduction" +#~ msgstr "Snížení" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Zmenšení zesílení" + +#~ msgid "Low Band" +#~ msgstr "Nízké pásmo" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Zmenšení zesílení" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Pozvednutí" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Zmenšení zesílení" + +#~ msgid "Mid Band" +#~ msgstr "Střední pásmo" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Zmenšení zesílení" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Pozvednutí" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Zmenšení zesílení" + +#~ msgid "High Band" +#~ msgstr "Vysoké pásmo" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Překlenutí" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Zmenšení zesílení" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Náběh" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Uvolnění" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Práh" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Pozvednutí" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Zmenšení zesílení" + +#~ msgid "General" +#~ msgstr "Obecné" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Použít Výchozí" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Omezovač vstupu" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Použít Výchozí" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Vstupní zesílení" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Dozvuk" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Verze" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Verze" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Vzorkování" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Minimální Kmitočet" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Největší zesílení" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Výchozí zeslabení" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Vstupní zesílení" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Výstupní přednastavení:" + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Výstupní přednastavení:" + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Omezovač vstupu" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Vstupní přednastavení:" + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Vstupní přednastavení:" + +#~ msgid "Modules" +#~ msgstr "Moduly" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Moduly" + +#~ msgid "Clients" +#~ msgstr "Klienti" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Klienti" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Zkušební signály" + +#~ msgid "State" +#~ msgstr "Stav" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Povolit" + +#~ msgid "Channels" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Sinusová tabulka" + +#~ msgid "White Noise" +#~ msgstr "Bílý šum" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Horní práh" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Jakost" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formát" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Přednastavení" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Křehkost" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Zjištění" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Komprese" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Centy" + +#~ msgid "Semitones" +#~ msgstr "Půltóny" + +#~ msgid "Octaves" +#~ msgstr "Oktávy" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Odstranit tento soubor s přednastavením" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Vstupní efekty" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "Obecné" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Omezovač vstupu" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Zpracovat všechny výstupy" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Zpracovat všechny vstupy" + +#~ msgid "Use Dark Theme" +#~ msgstr "Použít tmavý vzhled" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Spektrum" + +#~ msgid "Bars" +#~ msgstr "Pruhy" + +#~ msgid "Lines" +#~ msgstr "Čáry" + +#~ msgid "Points" +#~ msgstr "Body" + +#~ msgid "Height" +#~ msgstr "Výška" + +#~ msgid "Line Width" +#~ msgstr "Šířka čáry" + +#~ msgid "Fill" +#~ msgstr "Výplň" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Kmitočet" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Nejvýše" + +#~ msgid "Maximum" +#~ msgstr "Nejvýše" + +#~ msgid "Load" +#~ msgstr "Načíst" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Uložit nynější nastavení do tohoto souboru s přednastavením" + +#~ msgid "Remove this preset file" +#~ msgstr "Odstranit tento soubor s přednastavením" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Výstupní přednastavení:" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Vytvořit přednastavení" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Zavést přednastavení" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Výstupní přednastavení:" + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Výstupní přednastavení:" + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Vstupní přednastavení:" + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Vstupní přednastavení:" + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Vstupní přednastavení:" + +#~ msgid "High Frequency Damping" +#~ msgstr "Tlumení vysokého kmitočtu" + +#~ msgid "Room Size" +#~ msgstr "Velikost prostoru" + +#~ msgid "Small" +#~ msgstr "Malý" + +#~ msgid "Medium" +#~ msgstr "Střední" + +#~ msgid "Large" +#~ msgstr "Velký" + +#~ msgid "Tunnel" +#~ msgstr "Chodba" + +#~ msgid "Large/smooth" +#~ msgstr "Velký/plynulý" + +#~ msgid "Experimental" +#~ msgstr "Pokusný" + +#~ msgid "Diffusion" +#~ msgstr "Rozptylování" + +#~ msgid "Pre Delay" +#~ msgstr "Předzpoždění" + +#~ msgid "Decay Time" +#~ msgstr "Čas dozvuku" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Množství" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Úroveň cíle" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Množství" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Úroveň" + +#~ msgid "Bass Cut" +#~ msgstr "Ořezání hloubek" + +#~ msgid "Treble Cut" +#~ msgstr "Ořezání výšek" + +#~ msgid "Ambience" +#~ msgstr "Okolní prostředí" + +#~ msgid "Empty Walls" +#~ msgstr "Prázdné zdi" + +#~ msgid "Room" +#~ msgstr "Pokoj" + +#~ msgid "Large Empty Hall" +#~ msgstr "Velký prázdný sál" + +#~ msgid "Disco" +#~ msgstr "Disko" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Velký obsazený sál" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Zavést impuls" + +#, fuzzy +#~ msgid "Models" +#~ msgstr "Režim" + +#, fuzzy +#~ msgid "Standard Model" +#~ msgstr "Standardní" + +#, fuzzy +#~ msgid "Active Model" +#~ msgstr "Agresivní režim" + +#, fuzzy +#~ msgid "Overview" +#~ msgstr "Omezovač vstupu" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Vynulovat EasyEffects." + +#, fuzzy +#~ msgid "Close the Window" +#~ msgstr "Skrýt Okno" + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Vyvážení" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Vyvážení" + +#~ msgid "Softclip" +#~ msgstr "Softclip" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Softclip" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matrice sterea" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LP > LP (výchozí stereo)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LP > SS (stereo ke střední straně)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "SS > LP (střední strana ke stereu)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LP > LL (mono levý kanál)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LP > PP (mono pravý kanál)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LP > L+P (mono součet L+P)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (stereo obrácení kanálů)" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Základ sterea" + +#~ msgid "Invert Phase" +#~ msgstr "Obrátit fázi" + +#~ msgid "Side Level" +#~ msgstr "Postranní úroveň" + +#~ msgid "Side Balance" +#~ msgstr "Postranní vyvážení" + +#~ msgid "Middle Level" +#~ msgstr "Prostřední úroveň" + +#~ msgid "Middle Panorama" +#~ msgstr "Prostřední panorama" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Vstupní zesílení" + +#~ msgid "Delay L/R" +#~ msgstr "Zpoždění L/P" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Zpoždění L/P" + +#~ msgid "Stereo Base" +#~ msgstr "Základ sterea" + +#~ msgid "Stereo Phase" +#~ msgstr "Fáze sterea" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "Hradlo" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Kanály" + +#~ msgid "Output Presets: " +#~ msgstr "Výstupní přednastavení:" + +#~ msgid "Input Presets: " +#~ msgstr "Vstupní přednastavení:" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Zvukové efekty pro programy využívající PulseAudio" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Ukončit EasyEffects. Užitečné, když běži ve služebním režimu." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Nahrát přednastavení. Příklad: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Vynulovat EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Skrýt Okno" + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Globální propuštění. 1 pro zapnutí, 2 pro vypnutí, 3 pro získání stavu" + +#~ msgid "Show available presets." +#~ msgstr "Ukázat dostupná přednastavení." + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Zavést soubor s impulsem" + +#~ msgid "Import Impulse File" +#~ msgstr "Zavést soubor s impulsem" + +#~ msgid "Open" +#~ msgstr "Otevřít" + +#~ msgid "Cancel" +#~ msgstr "Zrušit" + +#~ msgid "Impulse Response" +#~ msgstr "Odpověď impulsu" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Odpověď impulsu" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Zavést impuls" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Zavést soubor s impulsem" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Nepodařilo se nahrát soubor s impulsem" + +#, fuzzy +#~ msgid "Recorders" +#~ msgstr "Okraj" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "nekonečno" + +#, fuzzy +#~ msgid "Import APO Preset File" +#~ msgstr "Zavést APO přednastavení" + +#, fuzzy +#~ msgid "APO Presets" +#~ msgstr "APO Přednastavení" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Odstranit tento soubor s přednastavením" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Vstupní zesílení" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Zavést přednastavení" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "Zavést soubor s impulsem" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Agresivní režim" + +#~ msgid "Bass Enhancer" +#~ msgstr "Zlepšovač hloubek" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Hlasitost" + +#~ msgid "Convolver" +#~ msgstr "Svinovač" + +#~ msgid "Crossfeed" +#~ msgstr "Prolínání kanálů" + +#~ msgid "Crystalizer" +#~ msgstr "Krystalizátor" + +#~ msgid "Deesser" +#~ msgstr "Odstraňovač sykotu" + +#~ msgid "Delay" +#~ msgstr "Zpoždění" + +#~ msgid "Echo Canceller" +#~ msgstr "Potlačovač echa" + +#~ msgid "Equalizer" +#~ msgstr "Ekvalizér" + +#~ msgid "Exciter" +#~ msgstr "Zvukový budič" + +#~ msgid "Filter" +#~ msgstr "Filtr" + +#~ msgid "Limiter" +#~ msgstr "Omezovač" + +#~ msgid "Maximizer" +#~ msgstr "Zvětšovač" + +#~ msgid "Multiband Compressor" +#~ msgstr "Vícepásmový kompresor" + +#~ msgid "Multiband Gate" +#~ msgstr "Vícepásmová brána" + +#~ msgid "Pitch" +#~ msgstr "Výška tónu" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Dozvuk" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Zmenšení zesílení" + +#~ msgid "Stereo Tools" +#~ msgstr "Nástroje sterea" + +#~ msgid "Average" +#~ msgstr "Průměr" + +#~ msgid "Failed" +#~ msgstr "Nepodařilo se" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Použít Výchozí" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Odstranit tento soubor s přednastavením" + +#~ msgid "Import Presets" +#~ msgstr "Zavést přednastavení" + +#~ msgid "Start Service at Login" +#~ msgstr "Spustit službu při přihlášení" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Agresivní režim" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Černá listina" + +#~ msgid "Blocklist" +#~ msgstr "Černá listina" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibrace mikrofonu" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Povolit" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Povolit" + +#~ msgid "Format" +#~ msgstr "Formát" + +#~ msgid "Latency" +#~ msgstr "Prodleva" + +#~ msgid "Faster" +#~ msgstr "Rychleji" + +#~ msgid "Preserve Formant" +#~ msgstr "Zachovat složku rozhodující o barvě zvuku" + +#~ msgid "Cmoy" +#~ msgstr "Sluchátkový zesilovač (CMoy)" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Vstupní zesílení" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Spodní mez" + +#~ msgid "Output Effects" +#~ msgstr "Výstupní efekty" + +#~ msgid "Settings" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Doba trvání" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Zkušební signály" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Zkušební signály" + +#~ msgid "Show Spectrum" +#~ msgstr "Ukázat spektrum" + +#~ msgid "Border" +#~ msgstr "Okraj" + +#~ msgid "Spectrum Type" +#~ msgstr "Typ spektra" + +#~ msgid "Spectrum Color" +#~ msgstr "Barva spektra" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Agresivní režim" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Zmenšení zesílení" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Váhy" + +#~ msgid "Dry" +#~ msgstr "Zkušební" + +#~ msgid "S/C Level" +#~ msgstr "Úroveň S/C" + +#~ msgid "Short Term" +#~ msgstr "Jednorázové" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Dolní pásmo" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Nastavit hlasitost a zapnout/vypnout efekty" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Zahrnuje ekvalizér s vestavěnými přednastaveními" + +#~ msgid "Input Limiter" +#~ msgstr "Omezovač vstupu" + +#~ msgid "Calibration" +#~ msgstr "Kalibrace" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "Automatické Vyhlazení" + +#~ msgid "Limit" +#~ msgstr "Omezení" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Tlumení" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Zvukové efekty pro programy využívající PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Zvukové efekty pro programy PulseAudio" + +#~ msgid "Help" +#~ msgstr "Nápověda" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrace mikrofonu" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automaticky použít toto přednastavení, když je nyní používané zařízení " +#~ "zapojeno v systému" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Verze" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Čtverec" + +#~ msgid "Saw" +#~ msgstr "Pila" + +#~ msgid "Triangle" +#~ msgstr "Trojúhelník" + +#~ msgid "Silence" +#~ msgstr "Ticho" + +#~ msgid "Pink Noise" +#~ msgstr "Růžový šum" + +#~ msgid "Ticks" +#~ msgstr "Tiknutí" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussovský šum" + +#~ msgid "Red Noise" +#~ msgstr "Červený šum" + +#~ msgid "Blue Noise" +#~ msgstr "Modrý šum" + +#~ msgid "Violet Noise" +#~ msgstr "Fialový šum" + +#~ msgid "Volume" +#~ msgstr "Hlasitost" + +#~ msgid "Window" +#~ msgstr "Okno" + +#~ msgid "Measure Noise" +#~ msgstr "Změřit šum" + +#~ msgid "Subtract Noise" +#~ msgstr "Odečíst šum" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Provided by" +#~ msgstr "Poskytuje" + +#~ msgid "Extended Filter" +#~ msgstr "Rozšířený filtr" + +#~ msgid "Low" +#~ msgstr "Nízký" + +#~ msgid "Moderate" +#~ msgstr "Střední" + +#~ msgid "High" +#~ msgstr "Vysoký" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Úroveň potlačení" + +#~ msgid "Delay Agnostic" +#~ msgstr "Zpozdit absolutní" + +#~ msgid "Very High" +#~ msgstr "Velmi vysoký" + +#~ msgid "Noise Suppressor" +#~ msgstr "Potlačovač šumu" + +#~ msgid "Adaptive Digital" +#~ msgstr "Přizpůsobivý digitální" + +#~ msgid "Fixed Digital" +#~ msgstr "Pevný digitální" + +#~ msgid "Gain Controller" +#~ msgstr "Ovladač zesílení" + +#~ msgid "Detection Likelihood" +#~ msgstr "Pravděpodobnost zjištění" + +#~ msgid "Very Low" +#~ msgstr "Velmi nízká" + +#~ msgid "Voice Detector" +#~ msgstr "Zjišťovatel hlasu" + +#~ msgid "Use Custom Color" +#~ msgstr "Použít vlastní barvu" + +#~ msgid "Use Gradient" +#~ msgstr "Použít přechod" + +#~ msgid "Gradient Color" +#~ msgstr "Barva přechodu" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Zavést soubor s odpovědí impulsu" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Vybrat soubor s odpovědí impulsu" + +#~ msgid "Aggressive Mode" +#~ msgstr "Agresivní režim" + +#~ msgid "Before" +#~ msgstr "Před" + +#~ msgid "After" +#~ msgstr "Po" + +#~ msgid "Loudness Range" +#~ msgstr "Rozsah hlasitosti" + +#~ msgid "Loudness Compensator" +#~ msgstr "Kompenzace Hlasitosti" + +#~ msgid "Apply" +#~ msgstr "Použít" + +#~ msgid "Based on" +#~ msgstr "Na základě" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Výchozí rychlost vzorkování" + +#~ msgid "Default Source" +#~ msgstr "Výchozí zdroj" + +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgid "File" +#~ msgstr "Soubor" + +#~ msgid "Configuration" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Based on a" +#~ msgstr "Na základě" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Spočítat kmitočty" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Nastavení" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "APO Přednastavení" + +#~ msgid "Auto Gain" +#~ msgstr "Automatické zesílení" + +#~ msgid "Detect Silence" +#~ msgstr "Zjištění Ticha" + +#~ msgid "Muted" +#~ msgstr "Ztlumeno" + +#~ msgid "Distant Headphones" +#~ msgstr "Vzdálená sluchátka" + +#~ msgid "Priority Type" +#~ msgstr "Typ přednosti" + +#~ msgid "Niceness" +#~ msgstr "Přívětivost" + +#~ msgid "Priority" +#~ msgstr "Přednost" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Minimální Kmitočet" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Maximální Kmitočet" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "Znovu připojit mikrofon pro použití změn provedených v Blocklistu" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "Restartovat přehrávač pro použití změn provedených v Blocklistu" + +#~ msgid "About" +#~ msgstr "O programu" + +#~ msgid "Protocol" +#~ msgstr "Protokol" + +#~ msgid "Default Sample Format" +#~ msgstr "Výchozí formát vzorku" + +#~ msgid "Channel Mapping" +#~ msgstr "Přiřazení kanálu" + +#~ msgid "Resamplers" +#~ msgstr "Převzorkovače" + +#~ msgid "Buffer" +#~ msgstr "Vyrovnávací paměť" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Ekvalizér - výstup" + +#~ msgid "Block Size" +#~ msgstr "Velikost Bloku" + +#~ msgid "Resampler" +#~ msgstr "Převzorkovač" + +#~ msgid "paused" +#~ msgstr "Pozastaveno" + +#~ msgid "playing" +#~ msgstr "Přehrává se" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "Import APO Presets" +#~ msgstr "Zavést APO Přednastavení" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Zmenšení zesílení" + +#~ msgid "Exponent" +#~ msgstr "Exponent" diff --git a/po/news/da.po b/po/news/da.po new file mode 100644 index 0000000..5aad807 --- /dev/null +++ b/po/news/da.po @@ -0,0 +1,2902 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Lyd Effekter for PipeWire Applikationer" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects er en advanceret lydmanipuleringsværktøj. Det inkluderer en " +"equalizer, begrænser, kompressor og et efterklangsværktøj, for blot at nævne " +"nogle få. For at supplere til dette er der også en indbygget " +"spektrumanalysator." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects er efterfølgeren til PulseEffects. EasyEffects understøtter kun " +"PipeWires lydserver. PulseAudio brugere bør i stedet bruge PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Da EasyEffects bruger PipeWires standard lydserver, vil den virke med de " +"fleste, hvis ikke alle, progammer du bruger." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Ud over manipulering af lydudgange, er EasyEffects i stand til at anvende " +"effekter på en input-enhed, f.eks. en mikrofon. Dette er f.eks. nyttigt i " +"lydoptagelse, men det virker også godt under samtaler." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Når EasyEffects startes, husker den automatisk den konfiguration, der blev " +"brugt i sidste session. Det er også muligt at gemme alle nuværende " +"indstillinger som profiler." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Hovedsiden viser to lydoutput apps" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Basforstærkersiden, der viser lydkontroller" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "Convolver-siden, der viser lydkontrolelementer" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Forindstil Autolæsning" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +#, fuzzy +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"Autogain-pluginet giver nu brugeren mulighed for at vælge, hvilken af de tre " +"lydstyrker der bruges til at beregne den geometriske" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +#, fuzzy +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"Autogain-pluginet tillader nu at indstille den maksimale historik og bruger " +"ikke længere `libebur128` histogramtilstand." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"EasyEffects-ikonet er blevet opdateret på en måde, der burde gøre det " +"synligt i QT-skriveborde." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#~ msgid "This release adds the following features:" +#~ msgstr "Denne udgivelse tilføjer følgende funktioner:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bånd 1" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Der er en ny indstilling, der giver brugeren mulighed for at vælge en " +#~ "inaktivitetstimeout for pipelinen. Når ingen klient spiller" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "til eller optagelse fra vores enheder vil filtrene blive fjernet, når " +#~ "timeout er nået. Dette gøres for at sikre" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "vi spilder ikke CPU-kraft på at processerer tavshed." + +#~ msgid "mean." +#~ msgstr "middel." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Dette bør undgå de tilfælde, hvor den 'Integrerede' lydstyrke bliver " +#~ "hængende for evigt i den samme værdi." + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Equalizer, Kompressor og Andre Lydeffekter" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "begrænser;kompressor;efterklang;equalizer;autovolume;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Forindstillinger\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Aktiveret" + +#~ msgid "Mute Application" +#~ msgstr "Stum applikation" + +#~ msgid "Application Volume" +#~ msgstr "Applikationvolume" + +#~ msgid "_Preferences" +#~ msgstr "_Præferencer" + +#~ msgid "_Manual" +#~ msgstr "_Manuel" + +#~ msgid "_Reset Settings" +#~ msgstr "_Nulstil Indstillinger" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Om EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Forindstillinger" + +#~ msgid "Presets Menu" +#~ msgstr "Forindstillinger Menu" + +#~ msgid "Global Bypass" +#~ msgstr "Global Omgåelse" + +#~ msgid "Primary Menu" +#~ msgstr "Primær Menu" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects-vindue" + +#~ msgid "Applications List" +#~ msgstr "Applikationsliste" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Tomme Vægge" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Applikationvolume" + +#~ msgid "Target" +#~ msgstr "Mål" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Maksimum" + +#~ msgid "Reference" +#~ msgstr "Hanvisning" + +#~ msgid "Momentary" +#~ msgstr "Øjeblikkelig" + +#~ msgid "Short-Term" +#~ msgstr "Kortfristet" + +#~ msgid "Integrated" +#~ msgstr "Integreret" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Geometrisk Gennemsnit" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Geometrisk Gennemsnit" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Geometrisk Gennemsnit" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Geometrisk Gennemsnit" + +#~ msgid "Reset History" +#~ msgstr "Nustil historie" + +#~ msgid "Relative" +#~ msgstr "Relativ" + +#~ msgid "Range" +#~ msgstr "Rækkevidde" + +#~ msgid "Loudness" +#~ msgstr "Hørestyrke" + +#~ msgid "Output Gain" +#~ msgstr "Udgangsforstærkning" + +#~ msgid "Input" +#~ msgstr "Indgang" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Plugin-Indgangsforstærkning" + +#~ msgid "Output" +#~ msgstr "Udgang" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Plugin-Udgangsforstærkning" + +#~ msgid "Reset" +#~ msgstr "Nustil" + +#~ msgid "Using" +#~ msgstr "Bruger" + +#~ msgid "Device" +#~ msgstr "Enhed" + +#~ msgid "Name" +#~ msgstr "Navn" + +#~ msgid "Profile" +#~ msgstr "Profil" + +#~ msgid "Preset" +#~ msgstr "Forindstilling" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Fjern Autoindlæst Forudindstilling" + +#~ msgid "Listen" +#~ msgstr "Lyt" + +#~ msgid "Blend Harmonics" +#~ msgstr "Bland Harmonik" + +#~ msgid "3rd" +#~ msgstr "Tredje" + +#~ msgid "2nd" +#~ msgstr "Anden" + +#~ msgid "Amount" +#~ msgstr "Mængde" + +#~ msgid "Harmonics" +#~ msgstr "Harmonik" + +#~ msgid "Scope" +#~ msgstr "Omfang" + +#~ msgid "Floor" +#~ msgstr "Gulv" + +#~ msgid "Floor Value" +#~ msgstr "Gulvværdi" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Applikationvolume" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Liste over Blokerede Applikationer" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Liste over Blokerede Applikationer" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Liste over Blokerede Applikationer" + +#~ msgid "Compressor" +#~ msgstr "Kompressor" + +#~ msgid "Mode" +#~ msgstr "Tilstand" + +#~ msgid "Downward" +#~ msgstr "Nedadrettet" + +#~ msgid "Upward" +#~ msgstr "Opadrettet" + +#~ msgid "Boosting" +#~ msgstr "Øge" + +#~ msgid "Compression Mode" +#~ msgstr "Kompressortilstand" + +#~ msgid "Boost Threshold" +#~ msgstr "Øg Grænseværdi" + +#~ msgid "Boost Amount" +#~ msgstr "Øgningsbeløb" + +#~ msgid "Attack" +#~ msgstr "Angreb" + +#~ msgid "Time" +#~ msgstr "Tid" + +#~ msgid "Threshold" +#~ msgstr "Grænseværdi" + +#~ msgid "Attack Time" +#~ msgstr "Angrebstid" + +#~ msgid "Attack Threshold" +#~ msgstr "Angreb Grænseværdi" + +#~ msgid "Release" +#~ msgstr "Frigør" + +#~ msgid "Release Time" +#~ msgstr "Frigøringstid" + +#~ msgid "Release Threshold" +#~ msgstr "Grænseværdi af Frigivelse" + +#~ msgid "Ratio" +#~ msgstr "Forhold" + +#~ msgid "Knee" +#~ msgstr "Knæ" + +#~ msgid "Makeup" +#~ msgstr "Makeup" + +#~ msgid "Sidechain" +#~ msgstr "Sidekæde" + +#~ msgid "Peak" +#~ msgstr "Top" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Lavpas" + +#~ msgid "Uniform" +#~ msgstr "Ensartet" + +#~ msgid "Sidechain Mode" +#~ msgstr "Sidekæde-tilstand" + +#~ msgid "Source" +#~ msgstr "Kilde" + +#~ msgid "Middle" +#~ msgstr "Midte" + +#~ msgid "Side" +#~ msgstr "Side" + +#~ msgid "Left" +#~ msgstr "Venstre" + +#~ msgid "Right" +#~ msgstr "Højre" + +#~ msgid "Sidechain Source" +#~ msgstr "Sidekæde Kilde" + +#~ msgid "Type" +#~ msgstr "Type" + +#~ msgid "Feed-forward" +#~ msgstr "Fremadrettet" + +#~ msgid "Feed-back" +#~ msgstr "Tilbagemelding" + +#~ msgid "External" +#~ msgstr "Ekstern" + +#~ msgid "Sidechain Type" +#~ msgstr "Sidekæde Type" + +#~ msgid "Input Device" +#~ msgstr "Input-enhed" + +#~ msgid "PreAmplification" +#~ msgstr "Forforstærkning" + +#~ msgid "Reactivity" +#~ msgstr "Reaktivitet" + +#~ msgid "Lookahead" +#~ msgstr "Fremadskuen" + +#~ msgid "Sidechain Filters" +#~ msgstr "Sidekæde Filter" + +#~ msgid "High-Pass" +#~ msgstr "Højpas" + +#~ msgid "Frequency" +#~ msgstr "Frekvens" + +#~ msgid "Off" +#~ msgstr "Slukket" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Højpasfiltertilstand" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Højpasfilterfrekvens" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Lavpasfiltertilstand" + +#~ msgid "Gain" +#~ msgstr "Gain" + +#~ msgid "Envelope" +#~ msgstr "Konvolut" + +#~ msgid "Curve" +#~ msgstr "Kurve" + +#~ msgid "L" +#~ msgstr "L" + +#~ msgid "Left Channel" +#~ msgstr "Venstre Kanal" + +#~ msgid "R" +#~ msgstr "R" + +#~ msgid "Right Channel" +#~ msgstr "Højre Kanal" + +#~ msgid "Impulses" +#~ msgstr "Impulser" + +#~ msgid "Combine" +#~ msgstr "Kombiner" + +#~ msgid "Stereo Width" +#~ msgstr "Stereo-bredde" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#~ msgid "Rate" +#~ msgstr "Rate" + +#~ msgid "Samples" +#~ msgstr "Prøver" + +#~ msgid "Duration" +#~ msgstr "Varighed" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "Kombiner Impulsresponser" + +#~ msgid "First Kernel" +#~ msgstr "Første Kerne" + +#~ msgid "Second Kernel" +#~ msgstr "Anden Kerne" + +#~ msgid "Output File Name" +#~ msgstr "Udgang Filnavn" + +#~ msgid "Combined Kernel Name" +#~ msgstr "Kombineret Kernenavn" + +#~ msgid "Import Impulse" +#~ msgstr "Import Impulser" + +#~ msgid "Search" +#~ msgstr "Søg" + +#~ msgid "Search Impulse File" +#~ msgstr "Søg Impulsfiler" + +#~ msgid "Impulse Files List" +#~ msgstr "Impulsfiler liste" + +#~ msgid "Default" +#~ msgstr "Standard" + +#~ msgid "Cutoff" +#~ msgstr "Afskæring" + +#~ msgid "Feed" +#~ msgstr "Foder" + +#~ msgid "Bypass" +#~ msgstr "Omgåelse" + +#~ msgid "Mute" +#~ msgstr "Stum" + +#~ msgid "Detection" +#~ msgstr "Opsporing" + +#~ msgid "Wide" +#~ msgstr "Bred" + +#~ msgid "Split" +#~ msgstr "Opdeling" + +#~ msgid "F1 Split" +#~ msgstr "F1 Opdeling" + +#~ msgid "Frequency 1 Split" +#~ msgstr "Frekvens 1 Opdeling" + +#~ msgid "F2 Peak" +#~ msgstr "F2 Top" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frekvens 2 Top" + +#~ msgid "F1 Gain" +#~ msgstr "F1 Gain" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frekvens 1 Gain" + +#~ msgid "F2 Level" +#~ msgstr "F2 Niveau" + +#~ msgid "Frequency 2 Level" +#~ msgstr "Frekvens 2 Niveau" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2 Top Q" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frekvens 2 Top Q" + +#~ msgid "Laxity" +#~ msgstr "Lakshed" + +#~ msgid "Detected" +#~ msgstr "Detektet" + +#~ msgid "Reduction" +#~ msgstr "Reduktion" + +#~ msgid "Frame Size" +#~ msgstr "Rammestørrelse" + +#~ msgid "Filter Length" +#~ msgstr "Filterlængde" + +#~ msgid "Bands" +#~ msgstr "Bånd" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Opdel kanaler" + +#~ msgid "Flat Response" +#~ msgstr "Flad Respons" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Beregn Frekvenser" + +#~ msgid "Load APO Preset" +#~ msgstr "Indlæs APO-Forindstilling" + +#~ msgid "Bell" +#~ msgstr "Klokke" + +#~ msgid "High Pass" +#~ msgstr "Højpas" + +#~ msgid "High Shelf" +#~ msgstr "Høj Hylde" + +#~ msgid "Low Pass" +#~ msgstr "Lavpas" + +#~ msgid "Low Shelf" +#~ msgstr "Lav Hylde" + +#~ msgid "Notch" +#~ msgstr "Indhak" + +#~ msgid "Resonance" +#~ msgstr "Resonans" + +#~ msgid "All Pass" +#~ msgstr "Alle Pas" + +#~ msgid "Band Type" +#~ msgstr "Båndtype" + +#~ msgid "Band Mode" +#~ msgstr "Båndtilstand" + +#~ msgid "Slope" +#~ msgstr "Hældning" + +#~ msgid "Band Slope" +#~ msgstr "Båndhældning" + +#~ msgid "Width" +#~ msgstr "Bredde" + +#~ msgid "Quality" +#~ msgstr "Kvalitet" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#~ msgid "Ceil" +#~ msgstr "Ceil" + +#~ msgid "Ceil Value" +#~ msgstr "Ceil Værdi" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Adgang" + +#~ msgid "Description" +#~ msgstr "Beskrivelse" + +#~ msgid "Remove this model file" +#~ msgstr "Fjern denne modelfil" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Lavpas" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Lavpas" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Lavpas" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Højpas" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Højpas" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Højpas" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Båndpas" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Båndpas" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Båndpas" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Båndafvise" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Båndafvise" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Båndafvise" + +#~ msgid "Inertia" +#~ msgstr "Inerti" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Frigøringstid" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Ekstern" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "Oversampling" +#~ msgstr "Oversampling" + +#~ msgid "Dither" +#~ msgstr "Tøve" + +#~ msgid "Herm Thin" +#~ msgstr "Herm Tynd" + +#~ msgid "Herm Wide" +#~ msgstr "Herm Bred" + +#~ msgid "Herm Tail" +#~ msgstr "Herm Hale" + +#~ msgid "Herm Duck" +#~ msgstr "Herm Duck" + +#~ msgid "Exp Thin" +#~ msgstr "Exp Tynd" + +#~ msgid "Exp Wide" +#~ msgstr "Exp Bred" + +#~ msgid "Exp Tail" +#~ msgstr "Exp Hale" + +#~ msgid "Exp Duck" +#~ msgstr "Exp Duck" + +#~ msgid "Line Thin" +#~ msgstr "Linje Tynd" + +#~ msgid "Line Wide" +#~ msgstr "Linje Bred" + +#~ msgid "Line Tail" +#~ msgstr "Linje Hale" + +#~ msgid "Line Duck" +#~ msgstr "Linje Duck" + +#~ msgid "None" +#~ msgstr "Ingen" + +#~ msgid "Half x2(2L)" +#~ msgstr "Halv x2(2L)" + +#~ msgid "Half x2(3L)" +#~ msgstr "Halv x2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "Halv x3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "Halv x3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "Halv x4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "Halv x4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "Halv x6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "Halv x6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "Halv x8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "Halv x8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "Fuld x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "Fuld x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "Fuld x3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "Fuld x3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "Fuld x4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "Fuld x4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "Fuld x6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "Fuld x6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "Fuld x8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "Fuld x8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "SC PræAmp" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Sidekæde Forforstærkning" + +#~ msgid "Boost" +#~ msgstr "Boost" + +#~ msgid "Stereo Link" +#~ msgstr "Stereoforbindelse" + +#~ msgid "External Sidechain" +#~ msgstr "Ekstern Sidekæde" + +#~ msgid "External Sidechain Source" +#~ msgstr "Ekstern Sidekæde Kilde" + +#~ msgid "Auto Leveling" +#~ msgstr "Auto-Nivellering" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "Auto-Nivelleringsangreb" + +#~ msgid "Auto Leveling Release" +#~ msgstr "Auto-Nivelleringsudløse" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "Auto-Nivellering Knæ" + +#~ msgid "Gain Left" +#~ msgstr "Gain Venstre" + +#~ msgid "Gain Right" +#~ msgstr "Gain Højre" + +#~ msgid "Sidechain Left" +#~ msgstr "Sidekæde Venstre" + +#~ msgid "Sidechain Right" +#~ msgstr "Sidekæde Højre" + +#~ msgid "Standard" +#~ msgstr "Standard" + +#~ msgid "Flat" +#~ msgstr "Flad" + +#~ msgid "FFT Size" +#~ msgstr "FFT Størrelse" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Fast Fourier Transform Størrelse" + +#~ msgid "Output Volume" +#~ msgstr "Udgang Volume" + +#~ msgid "Ceiling" +#~ msgstr "Loft" + +#~ msgid "Operating Mode" +#~ msgstr "Driftstilstand" + +#~ msgid "Classic" +#~ msgstr "Klassik" + +#~ msgid "Modern" +#~ msgstr "Moderne" + +#~ msgid "Sidechain Boost" +#~ msgstr "Sidekæde Boost" + +#~ msgid "Pink BT" +#~ msgstr "Pink BT" + +#~ msgid "Pink MT" +#~ msgstr "Pinkt MT" + +#~ msgid "Brown BT" +#~ msgstr "Brun BT" + +#~ msgid "Brown MT" +#~ msgstr "Brun MT" + +#~ msgid "Bands List" +#~ msgstr "Båndsliste" + +#~ msgid "Band 1" +#~ msgstr "Bånd 1" + +#~ msgid "Band 2" +#~ msgstr "Bånd 2" + +#~ msgid "Band 3" +#~ msgstr "Bånd 3" + +#~ msgid "Band 4" +#~ msgstr "Bånd 4" + +#~ msgid "Band 5" +#~ msgstr "Bånd 5" + +#~ msgid "Band 6" +#~ msgstr "Bånd 6" + +#~ msgid "Band 7" +#~ msgstr "Bånd 7" + +#~ msgid "Band 8" +#~ msgstr "Bånd 8" + +#~ msgid "Band Start" +#~ msgstr "Bånd start" + +#~ msgid "Band End" +#~ msgstr "Bånd Slut" + +#~ msgid "Band Compression Mode" +#~ msgstr "Bånd Kompressionstilstand" + +#~ msgid "Band Bypass" +#~ msgstr "Bånd Omgåelse" + +#~ msgid "Band Sidechain Options" +#~ msgstr "Bånd Sidekæde Valgmuligheder" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Lavskåret Filter" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Lavskåret Filter Frekvens" + +#~ msgid "High-Cut Filter" +#~ msgstr "Højskåret Filter" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Højskåret Filter Frekvens" + +#~ msgid "PreAmp" +#~ msgstr "PræAmp" + +#~ msgid "Band Gain" +#~ msgstr "Bånd Gain" + +#~ msgid "Band Envelope" +#~ msgstr "Bånd Konvolut" + +#~ msgid "Band Curve" +#~ msgstr "Bånd Kurve" + +#~ msgid "Split Mode" +#~ msgstr "Opdelt Tilstand" + +#~ msgid "Split 1/2" +#~ msgstr "Opdel 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Opdelt Frekvens 1" + +#~ msgid "Split 2/3" +#~ msgstr "Opdel 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Opdel Frekvens 2" + +#~ msgid "Split 3/4" +#~ msgstr "Opdelt 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Opdel Frekvens 3" + +#~ msgid "Sub Band" +#~ msgstr "Underbånd" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Bånd 1 Omgåelse" + +#~ msgid "Band 1 Solo" +#~ msgstr "Bånd 1 Solo" + +#~ msgid "Band 1 Detection" +#~ msgstr "Bånd 1 Opsporing" + +#~ msgid "Band 1 Attack" +#~ msgstr "Bånd 1 Angreb" + +#~ msgid "Band 1 Release" +#~ msgstr "Bånd 1 Frigivelse" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Bånd 1 Grænseværdi" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Bånd 1 Forhold" + +#~ msgid "Band 1 Knee" +#~ msgstr "Bånd 1 Knæ" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Bånd 1 Makeup" + +#~ msgid "Max Reduction" +#~ msgstr "Max Reduktion" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Bånd 1 Max Reduktion" + +#~ msgid "Low Band" +#~ msgstr "Lavbånd" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Bånd 2 Omgåelse" + +#~ msgid "Band 2 Solo" +#~ msgstr "Bånd 2 Solo" + +#~ msgid "Band 2 Detection" +#~ msgstr "Bånd 2 Opsporing" + +#~ msgid "Band 2 Attack" +#~ msgstr "Bånd 2 Angreb" + +#~ msgid "Band 2 Release" +#~ msgstr "Bånd 2 Frigivelse" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Bånd 2 Grænseværdi" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Bånd 2 Forhold" + +#~ msgid "Band 2 Knee" +#~ msgstr "Bånd 2 Knæ" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Bånd 2 Makeup" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Bånd 2 Max Reduktion" + +#~ msgid "Mid Band" +#~ msgstr "Mellembånd" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Bånd 3 Omgåelse" + +#~ msgid "Band 3 Solo" +#~ msgstr "Bånd 3 Solo" + +#~ msgid "Band 3 Detection" +#~ msgstr "Bånd 3 Opsporing" + +#~ msgid "Band 3 Attack" +#~ msgstr "Bånd 3 Angreb" + +#~ msgid "Band 3 Release" +#~ msgstr "Bånd 3 Frigivelse" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Bånd 3 Grænseværdi" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Bånd 3 Forhold" + +#~ msgid "Band 3 Knee" +#~ msgstr "Bånd 3 Knæ" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Bånd 3 Makeup" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Bånd 3 Max Reduktion" + +#~ msgid "High Band" +#~ msgstr "Højbånd" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Bånd 4 Omgåelse" + +#~ msgid "Band 4 Solo" +#~ msgstr "Bånd 4 Solo" + +#~ msgid "Band 4 Detection" +#~ msgstr "Bånd 4 Opsporing" + +#~ msgid "Band 4 Attack" +#~ msgstr "Bånd 4 Angreb" + +#~ msgid "Band 4 Release" +#~ msgstr "Bånd 4 Frigivelse" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Bånd 4 Grænseværdi" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Bånd 4 Forhold" + +#~ msgid "Band 4 Knee" +#~ msgstr "Bånd 4 Knæ" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Bånd 4 Makeup" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Bånd 4 Max Reduktion" + +#~ msgid "General" +#~ msgstr "Generelt" + +#~ msgid "Use Default Input" +#~ msgstr "Brug Standard Input" + +#~ msgid "Custom Input Device" +#~ msgstr "Brugerdefineret Input-Enhed" + +#~ msgid "Use Default Output" +#~ msgstr "Brug Standard Udgang" + +#~ msgid "Custom Output Device" +#~ msgstr "Brugerdefineret Udgangs-Enhed" + +#~ msgid "Server Information" +#~ msgstr "Serveroplysninger" + +#~ msgid "Header Version" +#~ msgstr "Overskriftsversion" + +#~ msgid "Library Version" +#~ msgstr "Bibloteksversion" + +#~ msgid "Sampling Rate" +#~ msgstr "Prøvetagningsfrekvens" + +#~ msgid "Minimum Quantum" +#~ msgstr "Minimumsantal" + +#~ msgid "Maximum Quantum" +#~ msgstr "Maksimumantal" + +#~ msgid "Default Quantum" +#~ msgstr "Standard Antal" + +#~ msgid "Output Devices" +#~ msgstr "Udgangsenheder" + +#~ msgid "Output Presets" +#~ msgstr "Udgangsforindstillinger" + +#~ msgid "Create Association" +#~ msgstr "Skab Associering" + +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "Tilføj Autolæsning Udgangsforindstilling" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Udgangsautolæsingsforindstillinger Liste" + +#~ msgid "Input Devices" +#~ msgstr "Indgangsenheder" + +#~ msgid "Input Presets" +#~ msgstr "Indgangsforindstillinger" + +#~ msgid "Add Autoloading Input Preset" +#~ msgstr "Tilføj Autolæsning Indgangsforindstilling" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Indgangsautolæsingsforindstillinger Liste" + +#~ msgid "Modules" +#~ msgstr "Moduler" + +#~ msgid "Modules List" +#~ msgstr "Liste over moduler" + +#~ msgid "Clients" +#~ msgstr "Klienter" + +#~ msgid "Clients List" +#~ msgstr "Liste over klienter" + +#~ msgid "Test Signal" +#~ msgstr "Test-Signal" + +#~ msgid "State" +#~ msgstr "Tilstand" + +#~ msgid "Enabled" +#~ msgstr "Aktiveret" + +#~ msgid "Channels" +#~ msgstr "Kanaler" + +#~ msgid "Both" +#~ msgstr "Begge" + +#~ msgid "Both Channels" +#~ msgstr "Begge Kanaler" + +#~ msgid "Waveform" +#~ msgstr "Bølgeform" + +#~ msgid "Sine Wave" +#~ msgstr "Sinusbølge" + +#~ msgid "White Noise" +#~ msgstr "Hvid Støj" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Høj Hylde" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvalitet" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formater" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Forindstilling" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Sprødhed" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Opsporing" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Cent" + +#~ msgid "Semitones" +#~ msgstr "Semitoner" + +#~ msgid "Octaves" +#~ msgstr "Oktaver" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Fjern denne modelfil" + +#~ msgid "Used Plugins List" +#~ msgstr "Liste over Anvendte Plugins" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "Easyeffects" + +#~ msgid "Search Plugin" +#~ msgstr "Søgeplugin" + +#~ msgid "Plugins List" +#~ msgstr "Plugins-liste" + +#~ msgid "_General" +#~ msgstr "_Generelt" + +#~ msgid "Service" +#~ msgstr "Tjeneste" + +#, fuzzy +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Luk helt ved vinduelukning" + +#~ msgid "Audio" +#~ msgstr "Lyd" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Behandle Alle Udgange" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Behandle Alle Indgange" + +#~ msgid "Use Cubic Volume" +#~ msgstr "Brug Kubisk Volumen" + +#~ msgid "Style" +#~ msgstr "Stil" + +#~ msgid "Use Dark Theme" +#~ msgstr "Brug Mørk-tilstand" + +#~ msgid "_Spectrum" +#~ msgstr "_Spektrum" + +#~ msgid "Shape" +#~ msgstr "Form" + +#~ msgid "Bars" +#~ msgstr "Bjælke" + +#~ msgid "Lines" +#~ msgstr "Linjer" + +#~ msgid "Points" +#~ msgstr "Point" + +#~ msgid "Height" +#~ msgstr "Højde" + +#~ msgid "Line Width" +#~ msgstr "Linje Bredde" + +#~ msgid "Fill" +#~ msgstr "Fil" + +#~ msgid "Show Bars Border" +#~ msgstr "Vis Bjælkerammer" + +#~ msgid "Color" +#~ msgstr "Farve" + +#~ msgid "Lines and Bars" +#~ msgstr "Linjer og Bjælker" + +#~ msgid "Axis Labels" +#~ msgstr "Etiketter på akserne" + +#~ msgid "Frequency Range" +#~ msgstr "Frekvens Rækkevidde" + +#~ msgid "Minimum" +#~ msgstr "Minimum" + +#~ msgid "Maximum" +#~ msgstr "Maksimum" + +#~ msgid "Load" +#~ msgstr "Indlæs" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Gem nuværende indstillinger til denne forindstillingsfil" + +#~ msgid "Remove this preset file" +#~ msgstr "Fjern denne forindstillingsfil" + +#~ msgid "New Output Preset Name" +#~ msgstr "Ny Udgangsforindstillingsnavn" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Opret Forindstilling" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Import Forudindstilling" + +#~ msgid "Search Output Preset" +#~ msgstr "Søg Udgangeforindstillinger" + +#~ msgid "Output Presets List" +#~ msgstr "Liste af Udgangeforindstillinger" + +#~ msgid "New Input Preset Name" +#~ msgstr "Ny Indgangsforindstillingsnavn" + +#~ msgid "Search Input Preset" +#~ msgstr "Søg Indgangsforindstillinger" + +#~ msgid "Input Presets List" +#~ msgstr "Liste Af Indgangsforindstillinger" + +#~ msgid "High Frequency Damping" +#~ msgstr "Højfrekvensdæmpning" + +#~ msgid "Room Size" +#~ msgstr "Størrelse af Værelse" + +#~ msgid "Small" +#~ msgstr "Lille" + +#~ msgid "Medium" +#~ msgstr "Mellem" + +#~ msgid "Large" +#~ msgstr "Stor" + +#~ msgid "Tunnel" +#~ msgstr "Tunnel" + +#~ msgid "Large/smooth" +#~ msgstr "Stor/Glat" + +#~ msgid "Experimental" +#~ msgstr "Eksperimentelt" + +#~ msgid "Diffusion" +#~ msgstr "Diffusion" + +#~ msgid "Pre Delay" +#~ msgstr "Pre Forsinkelse" + +#~ msgid "Decay Time" +#~ msgstr "Nedbrydningstime" + +#~ msgid "Wet Amount" +#~ msgstr "Vådmængde" + +#~ msgid "Wet Level" +#~ msgstr "Vådniveau" + +#~ msgid "Dry Amount" +#~ msgstr "Tørmængde" + +#~ msgid "Dry Level" +#~ msgstr "TørNiveau" + +#~ msgid "Bass Cut" +#~ msgstr "Bas Snit" + +#~ msgid "Treble Cut" +#~ msgstr "Diskant Snit" + +#~ msgid "Ambience" +#~ msgstr "Stemning" + +#~ msgid "Empty Walls" +#~ msgstr "Tomme Vægge" + +#~ msgid "Room" +#~ msgstr "Værelse" + +#~ msgid "Large Empty Hall" +#~ msgstr "Stor Tom Hal" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Large Optaget Hal" + +#~ msgid "Import Model" +#~ msgstr "Import Model" + +#~ msgid "Models" +#~ msgstr "Modeller" + +#~ msgid "Standard Model" +#~ msgstr "Standard Model" + +#~ msgid "RNNoise Models List" +#~ msgstr "Liste over RNNoise-Modeller" + +#~ msgid "Active Model" +#~ msgstr "Aktive Modeller" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Standard RNNoise-Model" + +#, fuzzy +#~ msgid "Overview" +#~ msgstr "Tjeneste" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Nustli EasyEffects." + +#, fuzzy +#~ msgid "Close the Window" +#~ msgstr "Skjul Vinduet." + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "_Om EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#~ msgid "Input Balance" +#~ msgstr "Indgangsbalance" + +#~ msgid "Softclip" +#~ msgstr "Softclip" + +#~ msgid "Softclip Level" +#~ msgstr "Softclip-niveau" + +#~ msgid "Stereo Matrix" +#~ msgstr "Stereo-matrix" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Stereo-Standard)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Stereo til Midtside)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Midtside til Stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (Mono Venstre Kanal)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Mono Højre Kanal)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Mono sum L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Stereo Vend Kanaler)" + +#~ msgid "Stereo Mode" +#~ msgstr "Stereotilstand" + +#~ msgid "Invert Phase" +#~ msgstr "Inverter Fase" + +#~ msgid "Side Level" +#~ msgstr "Side Niveau" + +#~ msgid "Side Balance" +#~ msgstr "Side Balance" + +#~ msgid "Middle Level" +#~ msgstr "Mellem-Niveau" + +#~ msgid "Middle Panorama" +#~ msgstr "Mellem-Panorama" + +#~ msgid "Output Balance" +#~ msgstr "Udgangsbalance" + +#~ msgid "Delay L/R" +#~ msgstr "Forsinkelse L/R" + +#~ msgid "Delay Left Right" +#~ msgstr "Forsinkelse Venstre Højre" + +#~ msgid "Stereo Base" +#~ msgstr "Stereo-Base" + +#~ msgid "Stereo Phase" +#~ msgstr "Stereo-Fase" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "Gating" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Kanaler" + +#~ msgid "Output Presets: " +#~ msgstr "Udgangsforindstillinger:" + +#~ msgid "Input Presets: " +#~ msgstr "Indgangsforindstillinger:" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Lydeffekter for PipeWire applikationer" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Afslut EasyEffects. Nyttigt når man kører i servicetilstand." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Indlæs en forindstilling. Eksempelvis: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Nustli EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Skjul Vinduet." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Global Omgåelse. 1 for at aktivere, 2 for at deaktivere og 3 for at få " +#~ "status" + +#~ msgid "Show available presets." +#~ msgstr "Vis tilgængelige forindstillinger." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Impulsfiler liste" + +#~ msgid "Import Impulse File" +#~ msgstr "Import Impulsfil" + +#~ msgid "Open" +#~ msgstr "Åben" + +#~ msgid "Cancel" +#~ msgstr "Annuller" + +#~ msgid "Impulse Response" +#~ msgstr "Impulsrespons" + +#~ msgid "Load Impulse" +#~ msgstr "Indlæs Impuls" + +#~ msgid "Remove Impulse" +#~ msgstr "Fjern Impuls" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Impulsfiler liste" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Kunne Ikke Indlæse Impulsfilen" + +#~ msgid "Recorders" +#~ msgstr "Optagere" + +#~ msgid "Players" +#~ msgstr "Spillere" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "Easyeffects" + +#~ msgid "infinity" +#~ msgstr "uendelighed" + +#~ msgid "Import APO Preset File" +#~ msgstr "Import APO Forindstillingsfil" + +#~ msgid "APO Presets" +#~ msgstr "APO-Forindstillinger" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Fjern Autoindlæst Forudindstilling" + +#~ msgid "Remove" +#~ msgstr "Fjern" + +#~ msgid "Output Device" +#~ msgstr "Udgangsenhed" + +#~ msgid "Add" +#~ msgstr "Tilføj" + +#~ msgid "Import Preset" +#~ msgstr "Import Forudindstilling" + +#~ msgid "Import Model File" +#~ msgstr "Import Modelfil" + +#~ msgid "RNNoise Models" +#~ msgstr "RNNoise-modeller" + +#, fuzzy +#~ msgid "Bass Enhancer" +#~ msgstr "Balance" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Hørestyrke" + +#, fuzzy +#~ msgid "Delay" +#~ msgstr "Pre Forsinkelse" + +#, fuzzy +#~ msgid "Echo Canceller" +#~ msgstr "Annuller" + +#, fuzzy +#~ msgid "Filter" +#~ msgstr "Filterlængde" + +#, fuzzy +#~ msgid "Maximizer" +#~ msgstr "Maksimum" + +#, fuzzy +#~ msgid "Multiband Compressor" +#~ msgstr "Kompressor" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Serveroplysninger" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Reduktion" + +#, fuzzy +#~ msgid "Stereo Tools" +#~ msgstr "Stereotilstand" + +#~ msgid "Average" +#~ msgstr "Gennemsnitlig" + +#~ msgid "Failed" +#~ msgstr "Fejlede" + +#~ msgid "Use Default" +#~ msgstr "Brug Standard" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Fjern denne modelfil" + +#~ msgid "Import Presets" +#~ msgstr "Importer Forindstillinger" + +#~ msgid "Start Service at Login" +#~ msgstr "Start Tjeneste ved Login" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktive Modeller" + +#~ msgid "Add to Blocklist" +#~ msgstr "Tilføj til Blokliste" + +#~ msgid "Blocklist" +#~ msgstr "Blockliste" + +#~ msgid "Add Plugin" +#~ msgstr "Tilføj Plugin" + +#~ msgid "Speakers" +#~ msgstr "Højtalerer" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Plugins" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Aktiveret" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Aktiveret" + +#~ msgid "Format" +#~ msgstr "Formater" + +#~ msgid "Latency" +#~ msgstr "Forsinkelse" + +#~ msgid "Faster" +#~ msgstr "Hurtigere" + +#~ msgid "Preserve Formant" +#~ msgstr "Bevar Formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Player Name" +#~ msgstr "Spillernavn" + +#~ msgid "Show Blocklisted Players" +#~ msgstr "Vis Bloklistede Spillere" + +#~ msgid "RLC (BT)" +#~ msgstr "BLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "7bit" +#~ msgstr "7bit" + +#~ msgid "8bit" +#~ msgstr "8bit" + +#~ msgid "11bit" +#~ msgstr "11bit" + +#~ msgid "12bit" +#~ msgstr "12bit" + +#~ msgid "15bit" +#~ msgstr "15bit" + +#~ msgid "16bit" +#~ msgstr "16bit" + +#~ msgid "23bit" +#~ msgstr "23bit" + +#~ msgid "24bit" +#~ msgstr "24bit" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Output Channel" +#~ msgstr "Udgangskanal" + +#~ msgid "Channel" +#~ msgstr "Kanal" + +#~ msgid "Value" +#~ msgstr "Værdi" diff --git a/po/news/de.po b/po/news/de.po new file mode 100644 index 0000000..fb2c3a7 --- /dev/null +++ b/po/news/de.po @@ -0,0 +1,3474 @@ +# German translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the EasyEffects package. +# Bleuzen , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-03 16:59+0000\n" +"Last-Translator: Simon Hahne \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Audio Effekte für PipeWire Anwendungen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects ist ein fortgeschrittenes Audio-Manipulations-Tool. Es enthält " +"einen Equalizer, Limiter, Kompressor, einen Hall und viele weitere. Dies " +"wird zudem mit einem eingebauten Spektrumanalysator ergänzt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects ist der Nachfolger von PulseEffects. EasyEffects unterstützt nur " +"den Audioserver von PipeWire. PulseAudio-Nutzer sollte stattdessen " +"PulseEffects verwenden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Da EasyEffects den Standard PulseAudio Sound Server benutzt, funktioniert es " +"mit so ziemlich allen Anwendungen. Alle unterstützten Anwendungen werden im " +"Hauptfenster angezeigt, wo diese individuell ein-/ausgeschaltet werden " +"können." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Neben der Audiomanipulation des Ausgangs kann EasyEffects auch Effekte auf " +"Eingabegeräte, z.B. Mikrofone, anwenden. Dies ist sinnvoll für z.B. " +"Audioaufnahmen oder VOIP Anwendungen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Wenn EasyEffects startet, stellt es die Konfiguration der letzten Sitzung " +"wieder her. Es ist auch möglich, die aktuellen Einstellungen als Profile zu " +"speichern." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Die Hauptseite mit zwei Audioausgabe-Apps" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Die Bassverstärkerseite mit den Audiosteuerelementen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "Die Convolverseite mit den Audiosteuerelementen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +#, fuzzy +msgid "Bug fixes:" +msgstr "Fehlerbehebungen:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Weitere Anmerkungen:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" +"Eine Sektion für \"Experimentelle Funktionen\" wurde zum Einstellungsdialog " +"hinzugefügt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Übersetzungen wurden aktualisiert" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "automatisch geladene Voreinstellungen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Übersetzungen wurden aktualisiert" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +#, fuzzy +msgid "Improved translations" +msgstr "Übersetzungen wurden aktualisiert" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +#, fuzzy +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"Das Begrenzer Plugin verwendet jetzt das Begrenzer Plugin von Linux Studio " +"Plugins statt das von Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +#, fuzzy +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"Wenn jetzt Effekte einer Anwendung deaktiviert werden, setzen wir dessen " +"Ziel-Metadaten auf null. Dies ermöglicht der Medien Session" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +#, fuzzy +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"Es wurde eine neue Einstellungsmöglichkeit hinzugefügt. Diese erlaubt " +"EasyEffects überwachende Eingänge zu ignorieren" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "Der Code zum Anzeigen des Stream-Auflösungsformats wurde verbessert" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +#, fuzzy +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"Die rnnoise-Bibliothek ist jetzt optional. Dadurch sollten Paket-Maintainer " +"einfacher" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"In den Logs werden jetzt die Sourcecode-Zeilen angezeigt, welche die " +"Nachricht ausgelöst hat" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +#, fuzzy +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"Die \"Effekte aktivieren\" Checkbox im Fenster wurde nicht aktualisiert, " +"wenn Programme wie Pavucontrol" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"Ein Absturz-Problem wurde behoben, wenn der Verlauf der automatischen " +"Verstärkungsregelung verändert wurde." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "Absturz-Probleme durch pw-mididump wurden behoben" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "Die Benutzer-Oberfläche der Tonhöhe-Erweiterung wurde verbessert" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "Unser App-Symbol ist jetzt auch mit QT-basierten Desktops kompatibel" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +#, fuzzy +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"Unser Blocklist-Code berücksichtigt jetzt den `application.id` Tag, sofern " +"dieser gesetzt ist" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +#, fuzzy +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Um Probleme beim Maus-Scrollen zu vermeiden, werden Einträge in der " +"Anwendungen-Liste jetzt unter `Spieler` angezeigt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +#, fuzzy +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Wenn keine Anwendungen verfügbar sind, wird in `Spieler` eine Nachricht dem " +"Nutzer angezeigt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Unzählige Übersetzungen aktualisiert" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +#, fuzzy +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"Es wurde ein Fehler behoben, der EasyEffects zum Absturz brachte, wenn die " +"Anzahl der angezeigten Punkte im Spektrum geändert wurde, während" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"Der angezeigte Pipeline-Latenz-Wert war in bestimmten Situationen falsch. " +"Dies wurde behoben." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +#, fuzzy +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"Das Autogain-Plugin erlaubt es dem Benutzer nun auszuwählen, welche der drei " +"Lautstärken für die Berechnung der geometrischen Werte verwendet werden " +"sollen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +#, fuzzy +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"Das Autogain-Plugin erlaubt nun die Einstellung des maximalen Verlaufs und " +"verwendet nicht mehr den Histogramm-Modus `libebur128`." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"Das EasyEffects-Symbol wurde aktualisiert, damit es auf QT-Desktops sichtbar " +"ist." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"Die Kommandozeilen-Option, welche den globalen `bypass`-Status " +"zurückliefert, funktioniert wieder." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Der Crossfeed-Filter sollte nun besser mit PipeWire's dynamischem Wechsel " +"der Latenz klarkommen. Unstetigkeiten in der Lautstärke sollten in diesen " +"Situationen nicht mehr auftreten." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Es wurde ein Fehler behoben, der verhinderte, dass Monomikrofone " +"ordnungsgemäß mit EasyEffects funktionierten" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Unterstützung für die nächste PipeWire Version '0.3.44'" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Der Autogain-Filter sollte nun besser mit den dynamischen Latenzschaltern " +"von PipeWire umgehen. Lautstärke-Sprünge sollten in diesen Situationen nicht " +"mehr auftreten." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Wir haben eine Option hinzugefügt, mit der die Lautstärke und die " +"Stummschaltung der virtuellen Geräte beim Start von EasyEffects " +"zurückgesetzt werden können. Das sollte in den Fällen helfen, in denen die " +"Geräte aus unbekannten Gründen vom Audioserver selbst stummgeschaltet werden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Computer in Bereitschaft werden nun besser unterstützt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Es wurde ein Fehler behohen, der die Anwendung zum Absturz brachte, wenn " +"versucht wurde, automatisch ein Profil ohne Voreinstellungen anzulegen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +#, fuzzy +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"Es wurde ein Fehler behoben, der beim Setzen der Equalizer Flankensteilheit " +"(Q-Wert) auf `Null`die Anwendung zum Abstürzen brachte." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita wird verwendet in manchen Teilen unseres Fensters und um zwischen " +"dunklem und hellem Farbschema umzuschalten." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "Das Einstellungs-Menü wurde auf LibAdwaita-Komponenten umgebaut." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +#, fuzzy +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"Der Import von Equalizer APO Vorlagen wurde verbessert, sodass dieses nicht " +"mehr nur auf Glocken-Filter, sondern auch auf andere unterstützte angewendet " +"werden kann" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +#, fuzzy +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"Die `alle Einstellungen zurücksetzen`-Funktion sollte jetzt auch für Flatpak " +"funktionieren." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +#, fuzzy +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Jetzt gibt es eine Möglichkeit das automatische Verstecken des Menüs zu " +"deaktivieren. Dies könnte bei einigen Problemen mit den GTK 4.0 Popover-" +"Menüs helfen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"APO Voreinstellungen parsen ist jetzt robuster dank Komma als " +"Tausendertrennzeichen im mittleren Frequenzbereich." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"Die fmt Bibliothek ist eine neue Abhängigkeit; zumindest solange der C++ " +"Kompiler dies nicht unterstützt. Dies sollte in den kommenden Jahren der " +"Fall sein." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM und GLIBMM sind jetzt keine Abhängigkeiten mehr. Jetzt verwenden wir " +"GTK 4.0 direkt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Jetzt ist es möglich Impulsantworten im Convolver zu kombinieren. Eine neue " +"Impuls-Datei wird generiert und sollte in der Impuls-Liste sichtbar sein." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +#, fuzzy +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"X-Achsen-Anzeige in unseren Graphen verbessert. Jetzt wird die Anzahl der " +"Beschriftungen dynamisch an die Fensterbreite angepasst." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"Die Dokumentation wurde um die neuen EasyEffects-Funktionen erweitert. " +"PulseEffects-Referenzen wurden entfernt. Ein Button zur Dokumentation wurde " +"dem Menü hinzugefügt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Wenn ein Drehknopf einen Wertebereich außerhalb des möglichen Bereichs hat, " +"wird dieser jetzt an die Grenzen angepasst - statt den vorherigen Wert zu " +"verwenden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"Das Anwengungsfenster speichert sich jetzt den Maximiert-Status und stellt " +"diesen beim nächsten Öffnen wieder her." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +#, fuzzy +msgid "The tbb library is a new dependency" +msgstr "Die `tbb`-Bibliothek ist jetzt eine neue Abhängigkeit" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Die Begrenzer- und Multiband-Kompressor-Plugins können jetzt optional eine " +"externe Sidechain verwenden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"Der Benutzer kann jetzt im Autogain-Plugin auswählen, welche Loudness als " +"Referenz zur Lautstärken-Korrektur verwendet werden soll." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" +"Das APO-Profile-Import-Feature des Equalizer-Plugins parst jetzt auch den " +"\"Pre Amplification\" Parameter." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" +"Kubische Lautstärke kann jetzt optional in den allgemeinen Einstellungen " +"aktiviert werden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" +"PipeWire Monitor-Streams werden jetzt von der Applikaitonsliste " +"ausgeschlossen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +#, fuzzy +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "Hoffentlich sind jetzt Abstürze, wie in [1172] gemeldet, behoben." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "Ein Absturz durch die Spektrum-Anzeige wurde verindert." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"Pavucontrol wird jetzt nicht mehr in der Liste der Aufnahme-Anwendungen auf " +"nicht-englischen Systemen angezeigt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +#, fuzzy +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"Kompatibilität mit WirePlumber verbesser. Dies ist notwendig, um auf " +"Systemen zu laufen, die sich dazu entschieden haben, es statt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"Die Ziel-Voreinstellung für Geräte in der Liste werden aktualisiert, wenn " +"ein Standardprofil hinterlegt wird. So kann die Profil-Voreinstellung " +"angepasst werden, ohne das es komplett neu angelegt werden muss." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +#, fuzzy +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"Das Laden von Standard-Voreinstellungen wurde wieder verändert. Jetzt " +"sollten mehr Geräte damit funktionieren. Für weitere Informationen siehe " +"Ticket [1051](" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"Wenn der Begrenzer oder Maximierer an der letzten Position der Plugin-Kette " +"stehen, werden weitere Plugins an der zweitletzen Position hinzugefügt, um " +"eventuelle Schäden an den Geräten durch zu hohe Laustärke zu vermeiden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" +"Wird eine Anwendung von der Blockliste entfernt, so werden die zuvor " +"aktivierten Einstellungen wiederhergestellt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"Manchmal wurde beim Entfernen von importierten Rauschreduzierungs-Modellen " +"das aktuelle Modell nicht korrekt gesetzt. Dies sollte nun behoben sein." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" +"Wenn Voreinstellungs-Datein in einem externen Editor verändert wurden, " +"konnten duplizierte Einträge nicht mehr in dem Menü für Voreinstellungen " +"angezeigt werden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" +"Jetzt wird die Blockliste korrekt gesetzt, wenn Voreinstellungen gewechselt " +"werden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" +"Jetzt wird der Status der Knopfes für die globalen Umleitung korrekt " +"aktualisiert, wenn die Plugin-Liste verändert wird." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"Manche Symbole, die auf der Plasma-Desktopoberfläche gefehlt haben, sollten " +"jetzt wieder angezeigt werden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Die chinesische Übersetzung wurde aktualisiert." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Die italienische Übersetzung wurde aktualisiert." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +#, fuzzy +msgid "Added support for the compressor parameter Boost Amount" +msgstr "Der Kompressor-Parameter `Boost Amount`wird jetzt unterstützt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"Das Multiband-Kompressor Plugin verwendet jetzt das Stereo Multiband-" +"Kompressor Plugin von Linux Studio anstatt des Plugins von Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"Das Begrenzer Plugin verwendet jetzt das Begrenzer Plugin von Linux Studio " +"Plugins statt das von Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"LV2 Filter werden jetzt in der PipeWire nur beim ersten Mal eingehängt. " +"Jetzt bleiben diese eingehängt, bis EasyEffects beendet wird." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "Die Abtastrate der Echounterdrückung wird jetzt korrekt gesetzt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" +"Der Grenz-Parameter des Deesser Plugins wird jetzt in der Voreinstellungs-" +"Datei gespeichert." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" +"Die Balkenvisualisierung konnte nicht abhängig von der Eingangs- oder " +"Ausgangsverstäkung angepasst werden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +#, fuzzy +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" +"Beim Hinzufügen von Equalizer-Bereichen, werden diese jetzt mit `Glocke` " +"statt `Aus` vorbesetzt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" +"Laden der Equalizer APO Voreinstellungen funktioniert jetzt auch in anderen " +"Sprachen korrekt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" +"Verbessertes Verknüfungs-Management zwischen Schnittstellenfilter-Knoten in " +"PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" +"Die Signalverstärkung des Crystalizer Plugins war zuvor zu hoch. Jetzt " +"sollte es mit sinnvolleren Werten vorbelegt sein." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" +"Der Resampler, der in verschiedenen Plugins (z.B. der Rauschunterdrückung) " +"verwendet wird, wurde verbessert" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" +"Setzen von mehreren Standard-Voreinstellungen sollte jetzt funktionieren" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "Die Dialog-Fenster mancher Plugins werden jetzt korrekt dargestellt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +#, fuzzy +msgid "We now support the LSP compressor Boosting mode." +msgstr "Der Kompressor-Parameter `Boost Amount`wird jetzt unterstützt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +#, fuzzy +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" +"Die Anwendung und dessen Repository wurde von PulseEffects zu `EasyEffects` " +"umbenannt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "GStreamer wurde durch PipeWire-Filter ersetzt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"Es werden neue Bibliotheken verwendet, und einige der Bibliotheken, die " +"zuvor optional waren, sind nun erforderlich" + +#~ msgid "This release adds the following features:" +#~ msgstr "Dieser Release fügt die folgenden Features hinzu:" + +#~ msgid "manager" +#~ msgstr "Manager" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr ". Dies sollte einige Probleme in Verbindung mit OBS beheben." + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "" +#~ "Debian Pakete bauen können. Siehe Problem #1000 für weiter Informationen." + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Dieser Release behebt die folgenden Fehler:" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "den Stream von unserem virtuellem Gerät entfernt haben. Dies sollte jetzt " +#~ "behoben sein." + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "Tab ohne Lautstärke-Skala angezeigt. Weitere Details zu dem Problem und " +#~ "dessen Lösung kann bei Ticket #1211" + +#~ msgid "and #1427" +#~ msgstr "und #1427 nachgelesen werden" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "die Pipeline aktiv und das Spektrum-Widget sichtbar war" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Es gibt eine neue Einstellung, die es den BenutzerInnen erlaubt, einen " +#~ "Timeout nach Inaktivität für den Audioeffekt festzulegen. Wenn kein " +#~ "Client spielt" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "oder von einem Geräte aufnimmt, werden die Filter getrennt, nachdem der " +#~ "Timeout erreicht ist. Dies wird getan um sicherzustellen," + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "" +#~ "dass keine CPU-Leistung für das Verarbeiten von Stille verschwendet wird." + +#~ msgid "mean." +#~ msgstr "gemein." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Dies sollte verhindern, dass die \"Integrierte\" Lautheit für immer auf " +#~ "demselben Wert stehen bleibt." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Diese Version behebt den folgenden Fehler:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Dieser Release fügt die folgenden Features hinzu:" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "dem mitgelieferten PipeWire-Sitzungsmanager zu verwenden. Weitere " +#~ "Informationen bei Fehlerticket [1144](" + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Fehlende Symbole des Systems sollten jetzt nicht mehr in der " +#~ "Applikationsinfo-Oberfläche angezeigt werden" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Equalizer, Kompressor und andere Audioeffekte" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "Limiter;Kompressor;Hall;Equalizer;Autovolumen;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Voreinstellungen\"" + +#~ msgid "Enable" +#~ msgstr "Aktiviert" + +#~ msgid "Exclude" +#~ msgstr "Ausschließen" + +#~ msgid "Mute Application" +#~ msgstr "Anwendung stummschalten" + +#~ msgid "Application Volume" +#~ msgstr "Anwendungs-Lautstärke" + +#~ msgid "_Preferences" +#~ msgstr "_Einstellungen" + +#~ msgid "_Manual" +#~ msgstr "_Handbuch" + +#~ msgid "_Shortcuts" +#~ msgstr "_Tastenkürzel" + +#~ msgid "_Reset Settings" +#~ msgstr "_Einstellungen zurücksetzen" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Über EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Voreinstellungen" + +#~ msgid "Presets Menu" +#~ msgstr "Voreinstellungs-Menü" + +#~ msgid "Global Bypass" +#~ msgstr "Globale Umleitung" + +#~ msgid "Primary Menu" +#~ msgstr "Hauptmenü" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects Fenster" + +#~ msgid "Applications List" +#~ msgstr "Anwendungs-Liste" + +#~ msgid "Empty List" +#~ msgstr "Leere Liste" + +#~ msgid "No Audio Application Available" +#~ msgstr "Keine Audio-Anwendungen verfügbar" + +#~ msgid "Target" +#~ msgstr "Ziel" + +#~ msgid "Maximum History" +#~ msgstr "Gesamter Verlauf" + +#~ msgid "Reference" +#~ msgstr "Referenz" + +#~ msgid "Momentary" +#~ msgstr "Momentan" + +#~ msgid "Short-Term" +#~ msgstr "Kurzzeitig" + +#~ msgid "Integrated" +#~ msgstr "Integriert" + +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Geometrisches Mittel (MSI)" + +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Geometrisches Mittel (MS)" + +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Geometrisches Mittel (MI)" + +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Geometrisches Mittel (SI)" + +#~ msgid "Reset History" +#~ msgstr "Verlauf löschen" + +#~ msgid "Relative" +#~ msgstr "Relativ" + +#~ msgid "Range" +#~ msgstr "Umfang" + +#~ msgid "Loudness" +#~ msgstr "Lautstärke" + +#~ msgid "Output Gain" +#~ msgstr "Ausgangsverstärkung" + +#~ msgid "Input" +#~ msgstr "Eingabe" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Eingangsverstärkungs-Plugin" + +#~ msgid "Output" +#~ msgstr "Ausgang" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Ausgangsverstärkungs-Plugin" + +#~ msgid "Reset" +#~ msgstr "Zurücksetzen" + +#~ msgid "Using" +#~ msgstr "Nutze" + +#~ msgid "Device" +#~ msgstr "Gerät" + +#~ msgid "Name" +#~ msgstr "Name" + +#~ msgid "Profile" +#~ msgstr "Profil" + +#~ msgid "Preset" +#~ msgstr "Voreinstellung" + +#~ msgid "Remove this autoload preset" +#~ msgstr "automatisch geladene Voreinstellung entfernen" + +#~ msgid "Listen" +#~ msgstr "Zuhören" + +#~ msgid "Blend Harmonics" +#~ msgstr "Oberwellen mischen" + +#~ msgid "3rd" +#~ msgstr "Dritte" + +#~ msgid "2nd" +#~ msgstr "Zweite" + +#~ msgid "Amount" +#~ msgstr "Betrag" + +#~ msgid "Harmonics" +#~ msgstr "Obertöne" + +#~ msgid "Scope" +#~ msgstr "Bereich" + +#~ msgid "Floor" +#~ msgstr "Boden" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "untere Grenze" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Application Name" +#~ msgstr "Anwendungen" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "Zu ausgeschlossenen Anwendungen hinzufügen" + +#~ msgid "Excluded Applications List" +#~ msgstr "Liste der ausgeschlossenen Anwendungen" + +#~ msgid "Show Excluded Applications" +#~ msgstr "Ausgeschlossene Anwendungen anzeigen" + +#~ msgid "Compressor" +#~ msgstr "Kompressor" + +#~ msgid "Mode" +#~ msgstr "Modus" + +#~ msgid "Downward" +#~ msgstr "Abwärts" + +#~ msgid "Upward" +#~ msgstr "Aufwärts" + +#~ msgid "Boosting" +#~ msgstr "Boosten" + +#~ msgid "Compression Mode" +#~ msgstr "Kompressionsmodus" + +#~ msgid "Boost Threshold" +#~ msgstr "Verstärkungsschwelle" + +#~ msgid "Boost Amount" +#~ msgstr "Verstärkung" + +#~ msgid "Attack" +#~ msgstr "Ansprechzeit" + +#~ msgid "Time" +#~ msgstr "Zeit" + +#~ msgid "Threshold" +#~ msgstr "Schwelle" + +#~ msgid "Attack Time" +#~ msgstr "Ansprechzeit" + +#~ msgid "Attack Threshold" +#~ msgstr "Anprech-Schwelle" + +#~ msgid "Release" +#~ msgstr "Freigabe" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Ausklingzeit" + +#~ msgid "Release Threshold" +#~ msgstr "Abkling-Schwelle" + +#~ msgid "Ratio" +#~ msgstr "Verhältnis" + +#~ msgid "Knee" +#~ msgstr "Übergang" + +#~ msgid "Makeup" +#~ msgstr "Hebung" + +#~ msgid "Sidechain" +#~ msgstr "Sidechain" + +#~ msgid "Peak" +#~ msgstr "Hochpunkt" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Tiefpass" + +#~ msgid "Uniform" +#~ msgstr "Einheitlich" + +#~ msgid "Sidechain Mode" +#~ msgstr "Sidechain-Modus" + +#~ msgid "Source" +#~ msgstr "Quelle" + +#~ msgid "Middle" +#~ msgstr "Mitte" + +#~ msgid "Side" +#~ msgstr "Seite" + +#~ msgid "Left" +#~ msgstr "Links" + +#~ msgid "Right" +#~ msgstr "Rechts" + +#~ msgid "Sidechain Source" +#~ msgstr "Sidechain-Quelle" + +#~ msgid "Type" +#~ msgstr "Typ" + +#~ msgid "Feed-forward" +#~ msgstr "Feedforward" + +#~ msgid "Feed-back" +#~ msgstr "Feedback" + +#~ msgid "External" +#~ msgstr "Extern" + +#~ msgid "Sidechain Type" +#~ msgstr "Sidechain-Typ" + +#~ msgid "Input Device" +#~ msgstr "Eingabegerät" + +#~ msgid "PreAmplification" +#~ msgstr "Vorverstärkung" + +#~ msgid "Reactivity" +#~ msgstr "Reaktivität" + +#~ msgid "Lookahead" +#~ msgstr "Ausblick" + +#~ msgid "Sidechain Filters" +#~ msgstr "Sidechain-Filter" + +#~ msgid "High-Pass" +#~ msgstr "Hochpass" + +#~ msgid "Frequency" +#~ msgstr "Frequenz" + +#~ msgid "Off" +#~ msgstr "Aus" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/okt" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/okt" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/okt" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Hochpassfilter-Modus" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Hochpassfilter-Frequenz" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Tiefpassfilter-Modus" + +#~ msgid "Gain" +#~ msgstr "Verstärkung" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Steigung" + +#~ msgid "Curve" +#~ msgstr "Kurve" + +#~ msgid "L" +#~ msgstr "L" + +#~ msgid "Left Channel" +#~ msgstr "Linker Kanal" + +#~ msgid "R" +#~ msgstr "R" + +#~ msgid "Right Channel" +#~ msgstr "Rechter Kanal" + +#~ msgid "Impulses" +#~ msgstr "Impulse" + +#~ msgid "Stereo Width" +#~ msgstr "Stereo-Breite" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#~ msgid "Log Scale" +#~ msgstr "logarithmische Skala" + +#~ msgid "Autogain" +#~ msgstr "Automatische Verstärkungsregelung" + +#~ msgid "Rate" +#~ msgstr "Rate" + +#~ msgid "Samples" +#~ msgstr "Probenahme" + +#~ msgid "Duration" +#~ msgstr "Dauer" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "Impulsantworten kombinieren" + +#~ msgid "Output File Name" +#~ msgstr "Name der Ausgabedatei" + +#~ msgid "Import Impulse" +#~ msgstr "Impuls importieren" + +#~ msgid "Search" +#~ msgstr "Suche" + +#~ msgid "Search Impulse File" +#~ msgstr "Impulsdatei suchen" + +#~ msgid "Impulse Files List" +#~ msgstr "Impulsfilter-Liste" + +#~ msgid "Default" +#~ msgstr "Standard" + +#~ msgid "Cutoff" +#~ msgstr "Abgrenzung" + +#~ msgid "Feed" +#~ msgstr "Speisung" + +#~ msgid "Bypass" +#~ msgstr "Umleiten" + +#~ msgid "Mute" +#~ msgstr "Stummschalten" + +#~ msgid "Detection" +#~ msgstr "Erkennung" + +#~ msgid "Wide" +#~ msgstr "Breit" + +#~ msgid "Split" +#~ msgstr "Teilen" + +#~ msgid "F1 Split" +#~ msgstr "F1 Teilen" + +#~ msgid "Frequency 1 Split" +#~ msgstr "Teilfrequenz 1" + +#~ msgid "F2 Peak" +#~ msgstr "F2 Peak" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frequenz 2 Peak" + +#~ msgid "F1 Gain" +#~ msgstr "F1 Verstärkung" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frequenz 1 Verstärkung" + +#~ msgid "F2 Level" +#~ msgstr "F2 Level" + +#~ msgid "Frequency 2 Level" +#~ msgstr "Frequenz 2 Level" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2 Peak Q" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frequenz 2 Peak Q" + +#~ msgid "Laxity" +#~ msgstr "Nachgiebigkeit" + +#~ msgid "Detected" +#~ msgstr "Erkannt" + +#~ msgid "Reduction" +#~ msgstr "Senkung" + +#~ msgid "Frame Size" +#~ msgstr "Rahmengröße" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filter" + +#~ msgid "Excluded Apps" +#~ msgstr "Ausgeschlossene Anwendungen" + +#~ msgid "Bands" +#~ msgstr "Bereiche" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Kanäle trennen" + +#~ msgid "Flat Response" +#~ msgstr "Flacher Frequenzgang" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Frequenzen berechnen" + +#~ msgid "Load APO Preset" +#~ msgstr "APO Preset laden" + +#~ msgid "Bell" +#~ msgstr "Glocke" + +#~ msgid "High Pass" +#~ msgstr "Hochpass" + +#~ msgid "High Shelf" +#~ msgstr "Höhen-Kuhschwanzfilter" + +#~ msgid "Low Pass" +#~ msgstr "Tiefpass" + +#~ msgid "Low Shelf" +#~ msgstr "Tiefen-Kuhschwanzfilter" + +#~ msgid "Notch" +#~ msgstr "Badewannenfilter" + +#~ msgid "Resonance" +#~ msgstr "Resonanz" + +#~ msgid "All Pass" +#~ msgstr "Allpass" + +#~ msgid "Band Type" +#~ msgstr "Band Typ" + +#~ msgid "Band Mode" +#~ msgstr "Band Modus" + +#~ msgid "Slope" +#~ msgstr "Steigung" + +#~ msgid "Band Slope" +#~ msgstr "Band Kurve" + +#~ msgid "Width" +#~ msgstr "Breite" + +#~ msgid "Quality" +#~ msgstr "Qualität" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#~ msgid "Ceil" +#~ msgstr "obere Grenze" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Zugriff" + +#~ msgid "Description" +#~ msgstr "Beschreibung" + +#~ msgid "Remove this model file" +#~ msgstr "diese Modell-Datei entfernen" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/okt Tiefpass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/okt Tiefpass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/okt Tiefpass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/okt Hochpass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/okt Hochpass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/okt Hochpass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/okt Bandpass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/okt Bandpass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/okt Bandpass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/okt Bandsperre" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/okt Bandsperre" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/okt Bandsperre" + +#~ msgid "Inertia" +#~ msgstr "Trägheit" + +#~ msgid "Gate" +#~ msgstr "Gate" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Ausklingzeit" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Extern" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "Oversampling" +#~ msgstr "Überabtastung" + +#~ msgid "Herm Wide" +#~ msgstr "Herm Breit" + +#~ msgid "Exp Wide" +#~ msgstr "Exp Breit" + +#~ msgid "Line Thin" +#~ msgstr "Line Thin" + +#~ msgid "Line Wide" +#~ msgstr "Line Wide" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Line Tail" + +#~ msgid "None" +#~ msgstr "Keine" + +#~ msgid "Half x2(2L)" +#~ msgstr "Halb x2(2L)" + +#~ msgid "Half x2(3L)" +#~ msgstr "Halb x2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "Halb x3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "Halb x3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "Halb x4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "Halb x4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "Halb x6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "Halb x6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "Halb x8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "Halb x8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "Voll x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "Voll x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "Voll x3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "Voll x3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "Voll x4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "Voll x4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "Voll x6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "Voll x6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "Voll x8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "Voll x8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "SC Vorverstärker" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Sidechain Vorverstärkung" + +#~ msgid "Boost" +#~ msgstr "Boost" + +#~ msgid "Stereo Link" +#~ msgstr "Stereoverbindung" + +#~ msgid "External Sidechain" +#~ msgstr "Externe Sidechain" + +#~ msgid "External Sidechain Source" +#~ msgstr "Externe Sidechain-Quelle" + +#~ msgid "Auto Leveling" +#~ msgstr "Auto Leveling" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "Auto Leveling Attack" + +#~ msgid "Auto Leveling Release" +#~ msgstr "Auto Leveling Release" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "Auto Leveling Knee" + +#~ msgid "Gain Left" +#~ msgstr "Verstärkung Links" + +#~ msgid "Gain Right" +#~ msgstr "Verstärkung Rechts" + +#~ msgid "Sidechain Left" +#~ msgstr "Sidechain Links" + +#~ msgid "Sidechain Right" +#~ msgstr "Sidechain Rechts" + +#~ msgid "Standard" +#~ msgstr "Standard" + +#~ msgid "Flat" +#~ msgstr "Flach" + +#~ msgid "FFT Size" +#~ msgstr "FFT-Größe" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Auflösung der schnellen Fourier-Transformation" + +#~ msgid "Output Volume" +#~ msgstr "Ausgangslautstärke" + +#~ msgid "Ceiling" +#~ msgstr "Grenze" + +#~ msgid "Operating Mode" +#~ msgstr "Betriebsmodus" + +#~ msgid "Classic" +#~ msgstr "Klassisch" + +#~ msgid "Modern" +#~ msgstr "Modern" + +#~ msgid "Sidechain Boost" +#~ msgstr "Sidechain Boost" + +#~ msgid "Bands List" +#~ msgstr "Band-Liste" + +#~ msgid "Band 1" +#~ msgstr "Band 1" + +#~ msgid "Band 2" +#~ msgstr "Band 2" + +#~ msgid "Band 3" +#~ msgstr "Band 3" + +#~ msgid "Band 4" +#~ msgstr "Band 4" + +#~ msgid "Band 5" +#~ msgstr "Band 5" + +#~ msgid "Band 6" +#~ msgstr "Band 6" + +#~ msgid "Band 7" +#~ msgstr "Band 7" + +#~ msgid "Band 8" +#~ msgstr "Band 8" + +#~ msgid "Band Start" +#~ msgstr "Band Beginn" + +#~ msgid "Band End" +#~ msgstr "Band Ende" + +#~ msgid "Band Compression Mode" +#~ msgstr "Band Kompressionsmodus" + +#~ msgid "Band Bypass" +#~ msgstr "Band Umleitung" + +#~ msgid "Band Sidechain Options" +#~ msgstr "Band Sidechain Einstellungen" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Hochpass-Filter" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Tiefpassfilter-Frequenz" + +#~ msgid "High-Cut Filter" +#~ msgstr "Tiefpass-Filter" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Tiefpassfilter-Frequenz" + +#~ msgid "PreAmp" +#~ msgstr "Vorverstärker" + +#~ msgid "Band Gain" +#~ msgstr "Bereichs-Verstärkung" + +#~ msgid "Band Envelope" +#~ msgstr "Band Bereich" + +#~ msgid "Band Curve" +#~ msgstr "Band-Kurve" + +#~ msgid "Split Mode" +#~ msgstr "Teilungsmodus" + +#~ msgid "Split 1/2" +#~ msgstr "1/2 Teilen" + +#~ msgid "Split Frequency 1" +#~ msgstr "Teilfrequenz 1" + +#~ msgid "Split 2/3" +#~ msgstr "2/3 Teilen" + +#~ msgid "Split Frequency 2" +#~ msgstr "Teilfrequenz 2" + +#~ msgid "Split 3/4" +#~ msgstr "3/4 Teilen" + +#~ msgid "Split Frequency 3" +#~ msgstr "Teilfrequenz 3" + +#~ msgid "Sub Band" +#~ msgstr "Subband" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Band 1 Umleitung" + +#~ msgid "Band 1 Solo" +#~ msgstr "Nur Band 1" + +#~ msgid "Band 1 Detection" +#~ msgstr "Band 1 Erkennung" + +#~ msgid "Band 1 Attack" +#~ msgstr "Band 1 Ansprechzeit" + +#~ msgid "Band 1 Release" +#~ msgstr "Band 1 Freigabe" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Band 1 Schwelle" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Band 1 Verhältnis" + +#~ msgid "Band 1 Knee" +#~ msgstr "Band 1 Knie" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Band 1 Hebung" + +#~ msgid "Max Reduction" +#~ msgstr "Senkung" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "maximale Band 1 Reduktion" + +#~ msgid "Low Band" +#~ msgstr "Tiefband" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Band 2 Umleitung" + +#~ msgid "Band 2 Solo" +#~ msgstr "Nur Band 2" + +#~ msgid "Band 2 Detection" +#~ msgstr "Band 2 Erkennung" + +#~ msgid "Band 2 Attack" +#~ msgstr "Band 2 Ansprechzeit" + +#~ msgid "Band 2 Release" +#~ msgstr "Band 2 Freigabe" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Band 2 Schwelle" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Band 2 Verhältnis" + +#~ msgid "Band 2 Knee" +#~ msgstr "Band 2 Knie" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Band 2 Hebung" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "maximale Band 2 Reduktion" + +#~ msgid "Mid Band" +#~ msgstr "Mittelband" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Band 3 Umleitung" + +#~ msgid "Band 3 Solo" +#~ msgstr "Nur Band 3" + +#~ msgid "Band 3 Detection" +#~ msgstr "Band 3 Erkennung" + +#~ msgid "Band 3 Attack" +#~ msgstr "Band 3 Ansprechzeit" + +#~ msgid "Band 3 Release" +#~ msgstr "Band 3 Freigabe" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Band 3 Schwelle" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Band 3 Verhältnis" + +#~ msgid "Band 3 Knee" +#~ msgstr "Band 3 Knie" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Band 3 Hebung" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "maximale Band 3 Reduktion" + +#~ msgid "High Band" +#~ msgstr "Hochband" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Band 4 Umleitung" + +#~ msgid "Band 4 Solo" +#~ msgstr "Nur Band 4" + +#~ msgid "Band 4 Detection" +#~ msgstr "Band 4 Erkennung" + +#~ msgid "Band 4 Attack" +#~ msgstr "Band 4 Ansprechzeit" + +#~ msgid "Band 4 Release" +#~ msgstr "Band 4 Freigabe" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Band 4 Schwelle" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Band 4 Verhältnis" + +#~ msgid "Band 4 Knee" +#~ msgstr "Band 4 Knie" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Band 4 Hebung" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Maximale Band 4 Reduktion" + +#~ msgid "General" +#~ msgstr "Allgemein" + +#~ msgid "Use Default Input" +#~ msgstr "Standardeingang nutzen" + +#~ msgid "Custom Input Device" +#~ msgstr "benutzerdefiniertes Eingabegerät" + +#~ msgid "Use Default Output" +#~ msgstr "Standardausgang nutzen" + +#~ msgid "Custom Output Device" +#~ msgstr "benutzerdefiniertes Ausgabegerät" + +#~ msgid "Server Information" +#~ msgstr "Serverinformation" + +#~ msgid "Header Version" +#~ msgstr "Header-Version" + +#~ msgid "Library Version" +#~ msgstr "Bibliotheksversion" + +#~ msgid "Sampling Rate" +#~ msgstr "Abtastrate" + +#~ msgid "Minimum Quantum" +#~ msgstr "Minimales Quantum" + +#~ msgid "Maximum Quantum" +#~ msgstr "Maximales Quantum" + +#~ msgid "Default Quantum" +#~ msgstr "Standard Quantum" + +#~ msgid "Output Devices" +#~ msgstr "Ausgabegeräte" + +#~ msgid "Output Presets" +#~ msgstr "Ausgabe-Voreinstellungen" + +#~ msgid "Create Association" +#~ msgstr "Assoziation erstellen" + +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "automatische Ausgabe-Voreinstellung hinzufügen" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "automatisch geladene Ausgabe-Voreinstellungen" + +#~ msgid "Input Devices" +#~ msgstr "Eingabegeräte" + +#~ msgid "Input Presets" +#~ msgstr "Eingabe-Voreinstellungen" + +#~ msgid "Add Autoloading Input Preset" +#~ msgstr "automatische Eingangs-Voreinstellung hinzufügen" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "automatisch geladene Eingang-Voreinstellungen" + +#~ msgid "Modules" +#~ msgstr "Module" + +#~ msgid "Modules List" +#~ msgstr "Modulliste" + +#~ msgid "Clients" +#~ msgstr "Clienten" + +#~ msgid "Clients List" +#~ msgstr "Client-Liste" + +#~ msgid "Test Signal" +#~ msgstr "Testsignal" + +#~ msgid "State" +#~ msgstr "Status" + +#~ msgid "Enabled" +#~ msgstr "Aktiviert" + +#~ msgid "Properties" +#~ msgstr "Eigenschaften" + +#~ msgid "Channels" +#~ msgstr "Kanäle" + +#~ msgid "Both" +#~ msgstr "Beide" + +#~ msgid "Both Channels" +#~ msgstr "Beide Kanäle" + +#~ msgid "Waveform" +#~ msgstr "Schwingungsverlauf" + +#~ msgid "Sine Wave" +#~ msgstr "Sinuswelle" + +#~ msgid "White Noise" +#~ msgstr "Weißes Rauschen" + +#~ msgid "High Speed" +#~ msgstr "Schnell" + +#~ msgid "High Quality" +#~ msgstr "Hohe Qualität" + +#~ msgid "High Consistency" +#~ msgstr "Hohe Konsistenz" + +#~ msgid "Formant" +#~ msgstr "Format" + +#~ msgid "Shifted" +#~ msgstr "Verschoben" + +#~ msgid "Preserved" +#~ msgstr "Beibehalten" + +#~ msgid "Transients" +#~ msgstr "Transient" + +#~ msgid "Crisp" +#~ msgstr "Klar" + +#~ msgid "Mixed" +#~ msgstr "Gemischt" + +#~ msgid "Smooth" +#~ msgstr "Sanft" + +#~ msgid "Detector" +#~ msgstr "Erkennung" + +#~ msgid "Compound" +#~ msgstr "Verbindung" + +#~ msgid "Percussive" +#~ msgstr "Hart" + +#~ msgid "Soft" +#~ msgstr "Weich" + +#~ msgid "Phase" +#~ msgstr "Phase" + +#~ msgid "Laminar" +#~ msgstr "Laminar" + +#~ msgid "Independent" +#~ msgstr "Unabhängig" + +#~ msgid "Cents" +#~ msgstr "Cent" + +#~ msgid "Semitones" +#~ msgstr "Halbtöne" + +#~ msgid "Octaves" +#~ msgstr "Oktaven" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Diese Preset-Datei entfernen" + +#~ msgid "Add Effect" +#~ msgstr "Effekt hinzufügen" + +#~ msgid "Used Plugins List" +#~ msgstr "Benutzte Plugins" + +#~ msgid "No Effects" +#~ msgstr "Keine Effekte" + +#~ msgid "Audio Stream Not Modified" +#~ msgstr "Audio Stream nicht verändert" + +#~ msgid "Search Plugin" +#~ msgstr "Plugin suchen" + +#~ msgid "Plugins List" +#~ msgstr "Pluginliste" + +#~ msgid "_General" +#~ msgstr "_Allgemein" + +#~ msgid "Service" +#~ msgstr "Dienst" + +#~ msgid "Launch Service at System Startup" +#~ msgstr "Dienst beim Systemstart starten" + +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Beim Schließen des Fensters beenden" + +#~ msgid "Audio" +#~ msgstr "Audio" + +#~ msgid "Process All Output Streams" +#~ msgstr "Alle Ausgänge verarbeiten" + +#~ msgid "Process All Input Streams" +#~ msgstr "Alle Eingänge verarbeiten" + +#~ msgid "Ignore Streams from Monitor of Devices" +#~ msgstr "Streams von Monitor-Geräten ignorieren" + +#~ msgid "Use Cubic Volume" +#~ msgstr "Verwende kubische Lautstärke" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "" +#~ "Lautstärke von virtuellen EasyEffects Geräten beim Start zurücksetzen" + +#~ msgid "Inactivity Timeout" +#~ msgstr "Timeout durch Inaktivität" + +#~ msgid "Style" +#~ msgstr "Stil" + +#~ msgid "Use Dark Theme" +#~ msgstr "Benutze dunkles Thema" + +#~ msgid "Hide Menus on Outside Clicks" +#~ msgstr "Menüs beim Rausklicken schließen" + +#~ msgid "_Spectrum" +#~ msgstr "_Spektrum" + +#~ msgid "Shape" +#~ msgstr "Form" + +#~ msgid "Bars" +#~ msgstr "Balken" + +#~ msgid "Lines" +#~ msgstr "Linien" + +#~ msgid "Dots" +#~ msgstr "Punkte" + +#~ msgid "Points" +#~ msgstr "Punkte" + +#~ msgid "Height" +#~ msgstr "Höhe" + +#~ msgid "Line Width" +#~ msgstr "Linienbreite" + +#~ msgid "Fill" +#~ msgstr "Ausfüllen" + +#~ msgid "Show Bars Border" +#~ msgstr "Balkenbegrenzung anzeigen" + +#~ msgid "Rounded Corners" +#~ msgstr "Abgerundete Ecken" + +#~ msgid "Color" +#~ msgstr "Farbe" + +#~ msgid "Lines and Bars" +#~ msgstr "Linien und Leisten" + +#~ msgid "Axis Labels" +#~ msgstr "Achsentitel" + +#~ msgid "Frequency Range" +#~ msgstr "Frequenzspanne" + +#~ msgid "Minimum" +#~ msgstr "Minimum" + +#~ msgid "Maximum" +#~ msgstr "Maximum" + +#~ msgid "Load" +#~ msgstr "Laden" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Aktuelle Einstellungen in dieser Preset-Datei speichern" + +#~ msgid "Remove this preset file" +#~ msgstr "Diese Preset-Datei entfernen" + +#~ msgid "New Output Preset Name" +#~ msgstr "Neuer Ausgabe-Presetname" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Preset erstellen" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Preset importieren" + +#~ msgid "Search Output Preset" +#~ msgstr "Ausgabe-Preset suchen" + +#~ msgid "Output Presets List" +#~ msgstr "Liste der Ausgabe-Voreinstellungen" + +#~ msgid "New Input Preset Name" +#~ msgstr "Neuer Eingabe-Presetname" + +#~ msgid "Search Input Preset" +#~ msgstr "Eingabe-Preset suchen" + +#~ msgid "Input Presets List" +#~ msgstr "Eingabe-Voreinstellungen" + +#~ msgid "High Frequency Damping" +#~ msgstr "Hochfrequenz-Dämpfung" + +#~ msgid "Room Size" +#~ msgstr "Raumgröße" + +#~ msgid "Small" +#~ msgstr "Klein" + +#~ msgid "Medium" +#~ msgstr "Mittel" + +#~ msgid "Large" +#~ msgstr "Groß" + +#~ msgid "Tunnel" +#~ msgstr "Tunnel" + +#~ msgid "Large/smooth" +#~ msgstr "Groß/sanft" + +#~ msgid "Experimental" +#~ msgstr "Experimentell" + +#~ msgid "Diffusion" +#~ msgstr "Verbreitung" + +#~ msgid "Pre Delay" +#~ msgstr "Vorverzögerung" + +#~ msgid "Decay Time" +#~ msgstr "Abklingzeit" + +#~ msgid "Wet Amount" +#~ msgstr "Feuchtigkeits-Anteil" + +#~ msgid "Wet Level" +#~ msgstr "Feuchtigkeit" + +#~ msgid "Dry Amount" +#~ msgstr "Trockenheits-Anteil" + +#~ msgid "Dry Level" +#~ msgstr "Trockenheit" + +#~ msgid "Bass Cut" +#~ msgstr "Bassschnitt" + +#~ msgid "Treble Cut" +#~ msgstr "Höhenschnitt" + +#~ msgid "Ambience" +#~ msgstr "Atmosphäre" + +#~ msgid "Empty Walls" +#~ msgstr "Leere Wände" + +#~ msgid "Room" +#~ msgstr "Raum" + +#~ msgid "Large Empty Hall" +#~ msgstr "Große leere Halle" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Große besetzte Halle" + +#~ msgid "Import Model" +#~ msgstr "Modell importieren" + +#~ msgid "Models" +#~ msgstr "Modelle" + +#~ msgid "Standard Model" +#~ msgstr "Standard-Modell" + +#~ msgid "RNNoise Models List" +#~ msgstr "RNNoise-Modell Liste" + +#~ msgid "Active Model" +#~ msgstr "Aktives Modell" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Standard RNNoise-Modell" + +#~ msgid "Overview" +#~ msgstr "Übersicht" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Öffne die EasyEffects Bedinungsanleitung" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Vollbildschirm/Vom Vollbildschirm wiederherstellen" + +#~ msgid "Close the Window" +#~ msgstr "Fenster schließen" + +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects beenden" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#~ msgid "Input Balance" +#~ msgstr "Eingangsverstärkung" + +#~ msgid "Softclip" +#~ msgstr "Softclip" + +#~ msgid "Softclip Level" +#~ msgstr "Softclip-Stufe" + +#~ msgid "Stereo Matrix" +#~ msgstr "Stereo-Matrix" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Stereo Standard)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Stereo zu Mittelseite)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Mittelseite zu Stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (Linker Monokanal)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Rechter Monokanal)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Monosumme L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Stereo Kanäle tauschen)" + +#~ msgid "Stereo Mode" +#~ msgstr "Stereo Modus" + +#~ msgid "Invert Phase" +#~ msgstr "Phase umkehren" + +#~ msgid "Side Level" +#~ msgstr "Seitenebene" + +#~ msgid "Side Balance" +#~ msgstr "Seitenausgleich" + +#~ msgid "Middle Level" +#~ msgstr "Mittlere Ebene" + +#~ msgid "Middle Panorama" +#~ msgstr "Mittleres Panorama" + +#~ msgid "Output Balance" +#~ msgstr "Ausgabe-Balance" + +#~ msgid "Delay L/R" +#~ msgstr "Verzögerung L/R" + +#~ msgid "Delay Left Right" +#~ msgstr "Verzögerung L/R" + +#~ msgid "Stereo Base" +#~ msgstr "Stereo Basis" + +#~ msgid "Stereo Phase" +#~ msgstr "Stereo Phase" + +#~ msgid "Running" +#~ msgstr "läuft" + +#~ msgid "Suspended" +#~ msgstr "pausiert" + +#~ msgid "Idle" +#~ msgstr "Untätig" + +#~ msgid "Creating" +#~ msgstr "Erstellen" + +#~ msgid "Error" +#~ msgstr "Fehler" + +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgid "channels" +#~ msgstr "Kanäle" + +#~ msgid "Output Presets: " +#~ msgstr "Ausgabe-Voreinstellungen: " + +#~ msgid "Input Presets: " +#~ msgstr "Eingabe-Voreinstellungen: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Audioeffekte für PipeWire Anwendungen" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Beende EasyEffects. Nützlich bei der Ausführung als Service." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Lade ein Preset. Beispiel: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "EasyEffects zurücksetzen." + +#~ msgid "Hide the Window." +#~ msgstr "Fenster verstecken." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Globale Umleitung. 1 zum Aktivieren, 2 zum Deaktivieren und 3 zum " +#~ "Erhalten des Status" + +#~ msgid "Show available presets." +#~ msgstr "Verfügbare Voreinstellungen anzeigen." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Impulsfilter-Liste" + +#~ msgid "Import Impulse File" +#~ msgstr "Impulsdatei importieren" + +#~ msgid "Open" +#~ msgstr "Öffnen" + +#~ msgid "Cancel" +#~ msgstr "Abbrechen" + +#~ msgid "Impulse Response" +#~ msgstr "Impulsantwort" + +#~ msgid "Load Impulse" +#~ msgstr "Impuls laden" + +#~ msgid "Remove Impulse" +#~ msgstr "Impuls entfernen" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Impulsfilter-Liste" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Die Impulsdatei konnte nicht geladen werden" + +#~ msgid "Recorders" +#~ msgstr "Rekorder" + +#~ msgid "Players" +#~ msgstr "Spieler" + +#~ msgid "Effects" +#~ msgstr "Effekte" + +#~ msgid "infinity" +#~ msgstr "unendlich" + +#~ msgid "Import APO Preset File" +#~ msgstr "APO Preset-Datei importieren" + +#~ msgid "APO Presets" +#~ msgstr "APO Voreinstellungen" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Voreinstellung automatisch laden" + +#~ msgid "Remove" +#~ msgstr "Entfernen" + +#~ msgid "Output Device" +#~ msgstr "Ausgabegerät" + +#~ msgid "Add" +#~ msgstr "Hinzufügen" + +#~ msgid "Import Preset" +#~ msgstr "Preset importieren" + +#~ msgid "Import Model File" +#~ msgstr "Modell-Datei importieren" + +#~ msgid "RNNoise Models" +#~ msgstr "RNNoise-Modelle" + +#~ msgid "Bass Enhancer" +#~ msgstr "Bassverstärker" + +#~ msgid "Bass Loudness" +#~ msgstr "Bass Lautheit" + +#~ msgid "Convolver" +#~ msgstr "Convolver" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Crystalizer" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Verzögerung" + +#~ msgid "Echo Canceller" +#~ msgstr "Echounterdrückung" + +#~ msgid "Equalizer" +#~ msgstr "Equalizer" + +#~ msgid "Exciter" +#~ msgstr "Exciter" + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Limiter" +#~ msgstr "Limiter" + +#~ msgid "Maximizer" +#~ msgstr "Maximierer" + +#~ msgid "Multiband Compressor" +#~ msgstr "Multiband-Kompressor" + +#~ msgid "Multiband Gate" +#~ msgstr "Multiband Gate" + +#~ msgid "Pitch" +#~ msgstr "Tonhöhe" + +#~ msgid "Reverberation" +#~ msgstr "Nachhall" + +#~ msgid "Noise Reduction" +#~ msgstr "Rauschreduzierung" + +#~ msgid "Stereo Tools" +#~ msgstr "Stereowerkzeuge" + +#~ msgid "Average" +#~ msgstr "Durchschnitt" + +#~ msgid "Failed" +#~ msgstr "Gescheitert" + +#~ msgid "Use Default" +#~ msgstr "Standard verwenden" + +#~ msgid "Remove this plugin" +#~ msgstr "Dieses Plugin entfernen" + +#~ msgid "Import Presets" +#~ msgstr "Presets importieren" + +#~ msgid "Start Service at Login" +#~ msgstr "Dienst beim Login starten" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktives Modell" + +#~ msgid "Add to Blocklist" +#~ msgstr "Zur Sperrliste hinzufügen" + +#~ msgid "Blocklist" +#~ msgstr "Sperrliste" + +#~ msgid "Add Plugin" +#~ msgstr "Plugin hinzufügen" + +#~ msgid "Speakers" +#~ msgstr "Lautsprecher" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Plugins" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Aktiviert" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Aktiviert" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latenz" + +#~ msgid "idle" +#~ msgstr "inaktiv" + +#~ msgid "Faster" +#~ msgstr "Schneller" + +#~ msgid "Preserve Formant" +#~ msgstr "Formant erhalten" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Player Name" +#~ msgstr "Spielername" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Ausgangsverstärkung" + +#~ msgid "Channel" +#~ msgstr "Kanal" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Boden" + +#~ msgid "Output Effects" +#~ msgstr "Ausgabeeffekte" + +#~ msgid "Settings" +#~ msgstr "Einstellungen" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Einstellungen" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Dauer" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Testsignal" + +#~ msgid "Signal" +#~ msgstr "Signal" + +#~ msgid "Show Spectrum" +#~ msgstr "Spektrum anzeigen" + +#~ msgid "Border" +#~ msgstr "Grenze" + +#~ msgid "Spectrum Type" +#~ msgstr "Spektrumstyp" + +#~ msgid "Spectrum Color" +#~ msgstr "Spektrumfarbe" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Aktives Modell" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Maximale Amplitudenreduktion" + +#~ msgid "Wet" +#~ msgstr "Nass" + +#~ msgid "Dry" +#~ msgstr "Trocken" + +#~ msgid "S/C Level" +#~ msgstr "S/C-Level" + +#~ msgid "Phase Correlation" +#~ msgstr "Phasenkorrelation" + +#~ msgid "Short Term" +#~ msgstr "Kurzfristig" + +#~ msgid "Id" +#~ msgstr "Id" + +#~ msgid "Low-pass" +#~ msgstr "Tiefpass" + +#~ msgid "Run in Background" +#~ msgstr "Im Hintergrund ausführen" + +#~ msgid "ceil" +#~ msgstr "Begrenzen" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Setze die Lautstärke und schalte Effekte ein/aus" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Enthält einen Equalizer mit integrierten Presets" + +#~ msgid "Input Limiter" +#~ msgstr "Eingabe-Limiter" + +#~ msgid "Calibration" +#~ msgstr "Kalibrierung" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "Automatische Glättungsregelung" + +#~ msgid "Limit" +#~ msgstr "Grenze" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Dämpfung" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Audio-Effekte für Pulseaudio Anwendungen" + +#~ msgid "using" +#~ msgstr "nutzt" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Audioeffekte für Pulseaudio-Anwendungen" + +#~ msgid "Help" +#~ msgstr "Hilfe" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrationsmikrofon" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Dieses Preset automatisch anwenden, wenn das aktuell verwendete Gerät an " +#~ "das System angeschlossen ist" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Version" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Rechteck" + +#~ msgid "Saw" +#~ msgstr "Sägezahn" + +#~ msgid "Triangle" +#~ msgstr "Dreieck" + +#~ msgid "Silence" +#~ msgstr "Ruhe" + +#~ msgid "Pink Noise" +#~ msgstr "Rosa Rauschen" + +#~ msgid "Ticks" +#~ msgstr "Ticken" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaußsches Rauschen" + +#~ msgid "Red Noise" +#~ msgstr "Rotes Rauschen" + +#~ msgid "Blue Noise" +#~ msgstr "Blaues Rauschen" + +#~ msgid "Violet Noise" +#~ msgstr "Violettes Rauschen" + +#~ msgid "Volume" +#~ msgstr "Lautstärke" + +#~ msgid "Window" +#~ msgstr "Fenster" + +#~ msgid "Measure Noise" +#~ msgstr "Rauschen messen" + +#~ msgid "Subtract Noise" +#~ msgstr "Rauschen reduzieren" + +#~ msgid "Extended Filter" +#~ msgstr "Erweiterter Filter" + +#~ msgid "Low" +#~ msgstr "Tief" + +#~ msgid "Moderate" +#~ msgstr "Mäßig" + +#~ msgid "High" +#~ msgstr "Hoch" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Unterdrückungsgrad" + +#~ msgid "Delay Agnostic" +#~ msgstr "Verzögerungsagnostisch" + +#~ msgid "Very High" +#~ msgstr "Sehr hoch" + +#~ msgid "Noise Suppressor" +#~ msgstr "Rauschunterdrücker" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptiv Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Fixiert Digital" + +#~ msgid "Gain Controller" +#~ msgstr "Verstärkungsregler" + +#~ msgid "Detection Likelihood" +#~ msgstr "Erkennungswahrscheinlichkeit" + +#~ msgid "Very Low" +#~ msgstr "Sehr Tief" + +#~ msgid "Voice Detector" +#~ msgstr "Spracherkennung" + +#~ msgid "Use Custom Color" +#~ msgstr "Benutzerdefinierte Farbe benutzen" + +#~ msgid "Use Gradient" +#~ msgstr "Farbverlauf nutzen" + +#~ msgid "Gradient Color" +#~ msgstr "Verlaufsfarbe" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Impulsantwortdatei importieren" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Auswahl der Impulsantwortdatei" + +#~ msgid "Aggressive Mode" +#~ msgstr "Aggressiver Modus" + +#~ msgid "Before" +#~ msgstr "Vorher" + +#~ msgid "After" +#~ msgstr "Nachher" + +#~ msgid "Loudness Range" +#~ msgstr "Lautstärkebereich" + +#~ msgid "Apply" +#~ msgstr "Anwenden" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Standard Samplingrate" + +#~ msgid "Default Source" +#~ msgstr "Standard Audioquelle" + +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgid "File" +#~ msgstr "Datei" + +#~ msgid "Configuration" +#~ msgstr "Konfiguration" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Frequenz zurücksetzen" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Einstellungen" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Presets" + +#~ msgid "Auto Gain" +#~ msgstr "Automatische Verstärkungsregelung" + +#~ msgid "Detect Silence" +#~ msgstr "Stille erkennen" + +#~ msgid "Muted" +#~ msgstr "Stumm" + +#~ msgid "Distant Headphones" +#~ msgstr "Entfernte Kopfhörer" + +#~ msgid "Priority Type" +#~ msgstr "Prioritätstyp" + +#~ msgid "Niceness" +#~ msgstr "Qualität" + +#~ msgid "Priority" +#~ msgstr "Priorität" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frequenz" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frequenz" + +#~ msgid "About" +#~ msgstr "Über" + +#~ msgid "Protocol" +#~ msgstr "Protokoll" + +#~ msgid "Default Sample Format" +#~ msgstr "Standard Samplingformat" + +#~ msgid "Channel Mapping" +#~ msgstr "Kanalzuordnung" + +#~ msgid "Resamplers" +#~ msgstr "Resampler" + +#~ msgid "Pipeline Input" +#~ msgstr "Pipeline-Eingang" + +#~ msgid "Buffer" +#~ msgstr "Puffer" + +#~ msgid "Pipeline Output" +#~ msgstr "Pipeline-Ausgang" + +#~ msgid "Block Size" +#~ msgstr "Blockgröße" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#~ msgid "paused" +#~ msgstr "Pausiert" + +#~ msgid "playing" +#~ msgstr "Spielt" + +#~ msgid "Pulseaudio" +#~ msgstr "PulseAudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Presets importieren" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Amplitudenreduktion" + +#~ msgid "Exponent" +#~ msgstr "Exponent" diff --git a/po/news/easyeffects-news.pot b/po/news/easyeffects-news.pot new file mode 100644 index 0000000..3bfc063 --- /dev/null +++ b/po/news/easyeffects-news.pot @@ -0,0 +1,1081 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects-news package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: easyeffects-news\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/es.po b/po/news/es.po new file mode 100644 index 0000000..179505a --- /dev/null +++ b/po/news/es.po @@ -0,0 +1,3194 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-09-10 08:54+0000\n" +"Last-Translator: gallegonovato \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0.1-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de sonido para las aplicaciones PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace (wwmm)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects es una herramienta avanzada de manipulación de audio. Incluye " +"un ecualizador, un limitador, un compresor y una herramienta de " +"reverberación, por mencionar algunos. Para complementar esto, también hay un " +"analizador de espectro incorporado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects es el sucesor de PulseEffects. Easy Effects sólo es compatible " +"con el servidor de audio de PipeWire. Los usuarios de PulseAudio deben " +"utilizar en su lugar PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Dado que Easy Effects utiliza el servidor de sonido PipeWire por defecto, " +"funcionará con la mayoría, si no con todas, las aplicaciones que utilice. " +"Todas las aplicaciones compatibles se presentan en la ventana principal, " +"donde cada una puede ser activada individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Además de manipular la salida de sonido, Easy Effects es capaz de aplicar " +"efectos a un dispositivo de entrada, como un micrófono. Esto es, por " +"ejemplo, útil en la grabación de audio, pero también funciona bien durante " +"las conversaciones de voz." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Cuando se inicie Easy Effects, recordará convenientemente la configuración " +"utilizada en la última sesión. También es posible guardar todos los ajustes " +"actuales como perfiles." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "La página principal mostrando dos aplicaciones de salida de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "La página del potenciador de graves mostrando los controles de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "La página del convolucionador mostrando los controles de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Características:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Corrección de errores:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" +"Se ha corregido un pequeño error que impedía inicializar correctamente el " +"umbral de actividad de la voz y la reducción de ruido." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Otras notas:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" +"Se ha añadido un nuevo control al complemento de reducción de ruido que " +"permite desactivar el reconocimiento de la voz." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" +"El efecto Filtro se ha mejorado con nuevos parámetros ya que se ha portado " +"de Calf Studio a Linux Studio Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" +"La reducción de ruido mediante RNNoise se ha mejorado con la adición de los " +"controles Release y VAD Threshold." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" +"Ahora, la reducción de ruido mediante RNNoise puede mezclar las señales " +"original y eliminada para evitar que la salida suene demasiado \"seca\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" +"Esta versión está pensada para funcionar con las versiones de Linux Studio " +"Plugins iguales o superiores a \"1.2.10\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "EasyEffects ahora también se puede compilar con libc++." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" +"El expansor de complementos de Linux Studio se puede utilizar en Easy " +"Effects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" +"Las bandas del ecualizador disponen ahora de un control de ganancia " +"adicional que permite introducir con mayor eficacia valores difíciles de " +"ajustar en la escala. Más detalles en el problema 1383." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" +"Se ha añadido la posibilidad de seleccionar y cargar varios archivos en los " +"cuadros de diálogo para los preajustes, respuestas impulsivas de Convolver y " +"modelos RNNoise." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "Arreglado el botón Solo en los ajustes de la banda del ecualizador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" +"Las carpetas de Easy Effects en /etc han quedado obsoletas y los preajustes " +"ubicados allí ya no se cargarán. Por el momento, sólo los preajustes locales " +"en ~/.config/easyeffects se cargan automáticamente en el menú de los " +"preajustes. En el futuro implementaremos un nuevo sistema para instalar, " +"gestionar e importar los preajustes de la comunidad." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" +"Se ha añadido una sección de \"Características experimentales\" a las " +"preferencias." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" +"Se puede utilizar la ventana nativa de los plugins de LSP. Se trata de una " +"función experimental destinada únicamente a usuarios avanzados. Así que " +"espera algunos errores." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" +"Los valores de los semitonos fraccionarios ahora se pueden usar en el efecto " +"Pitch Shift." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" +"El menú desplegable del dispositivo de entrada/salida en nuestra pestaña de " +"PipeWire se actualiza cuando cambia el dispositivo predeterminado del " +"sistema y se habilita Usar predeterminado. Esto soluciona el problema 1989." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" +"Se ha agregado un nuevo complemento de medidor de nivel basado en libebur128." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" +"El complemento Pitch ahora usa la biblioteca SoundTouch en lugar de " +"Rubberband. Con suerte, algunos de los errores raros que estaban ocurriendo " +"con Rubbernand no volverán a suceder." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" +"Compatibilidad mejorada con las versiones recientes de PipeWire. Mas " +"información en" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" +"Los filtros del ecualizador que está activo ya no se configuran en tipo Bell " +"cuando cambia el número de bandas." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" +"Rabberband ya no es una dependencia desde que fue reemplazada por SoundTouch." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" +"El menú preestablecido ahora pide confirmación para guardar/eliminar un " +"archivo preestablecido." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" +"Restabler un complemento ya no debería hacer que sus controles sean " +"ineficaces." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" +"Speex ya no aparece incorrectamente como una dependencia de la compilación " +"(speexdsp sigue siendo una dependencia de compilación)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" +"RNNoise ya no es una dependencia automática. Ahora es necesaria por defecto; " +"si no está disponible, debe desactivarse explícitamente con -Denable-" +"rnnoise=false" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "Traducciones actualizadas." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" +"Un pequeño error se hizo en la última versión. Hacer una nueva para " +"asegurarte de que la gente tiene la rama correcta en el paquete" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" +"La función de \"ordenar bandas\" del ecualizador ahora ordena las bandas en " +"GSettings, por lo que el resultado se puede guardar en los preajustes." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "Mejora del rendimiento al restablecer las claves." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" +"Se ha corregido la selección del preajuste \"Una gran sala vacía\" el efecto " +"de Reverberación." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" +"Corregidos algunos errores de uso de la API de PipeWire que potencialmente " +"pueden solucionar algunos fallos aleatorios a los que se enfrentan algunos " +"usuarios." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" +"Como estamos eliminando código obsoleto de GTK 4.10, se ha aumentado la " +"versión mínima de GTK." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" +"Frecuencia de actualización del complemento de espectro mejorada. Las " +"diferentes frecuencias de muestreo ahora deberían dar como resultado " +"visualmente las mismas frecuencias de actualización." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" +"El intervalo de actualización utilizado por los medidores de nivel y el " +"espectro puede ser personalizado por el usuario." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" +"El valor del control deslizante de ganancia de la banda EQ se puede " +"actualizar en pasos grandes. El control preciso aún es posible con las " +"teclas arriba/abajo del teclado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "Pequeñas mejoras en el cancelador de eco." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" +"Después de cambiar al uso de varios filtros, los sensores canceladores de " +"eco no estaban asociados con la tarjeta de sonido. Ahora esto debería " +"arreglarse." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" +"Ahora es posible añadir más de una instancia de filtro a la cadena de " +"efectos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"Se ha añadido un nuevo plugin de procesador de voz basado en la biblioteca " +"Speex. Además de suprimir el ruido, también puede detectar la actividad de " +"la voz. Es una alternativa decente para los casos en los que la biblioteca " +"rnnoise no funciona bien." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "Compatibilidad mejorada con Linux Studio Plugins 1.2.3." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" +"Los preajustes de GraphicEQ pueden importarse al efecto del ecualizador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"El nombre de la aplicación ha sido cambiado a Easy Effects para adherirse a " +"las convenciones de nomenclatura de las Directrices de Interfaz Humana de " +"GNOME." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "Se ha actualizado la información." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "Mejora de la autocarga de los preajustes." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" +"Ahora el usuario puede configurar el umbral de silencio de la ganancia " +"automática." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "Se agregaron controles secos y húmedos al efecto Stereo Tools." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" +"El cancelador del eco ahora tiene un control para la supresión del ruido " +"residual también basado en la biblioteca de Speed." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" +"Al pasar el ratón por encima de un gráfico se mostraba un valor erróneo de " +"la coordenada del eje x. Esta regresión se ha corregido." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"Debido a la nueva función de instancias múltiples, el formato preestablecido " +"ha cambiado, pero el antiguo aún es compatible y puede cargarse. De todos " +"modos, tenga en cuenta que al guardar el preset actual siempre lo escribirá " +"en el nuevo formato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"La implementación de la puerta multibanda se ha migrado de CALF a los " +"plugins de Linux Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"Se ha mejorado la compatibilidad del código de carga automática " +"preestablecido con dispositivos bluez5." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "Se ha añadido controles húmedo/seco para algunos plugins" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"La interfaz de efectos ya no se carga cuando el plugin lv2 relacionado no " +"está instalado en el sistema. En su lugar se muestra un mensaje de estado al " +"usuario." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "La documentación ha sido actualizada" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "Mejoría en mensajes de depuración" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Traducciones actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Traducciones mejoradas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Se ha corregido un error por el que EasyEffects podía fallar al cerrar su " +"ventana mientras se aplicaban los efectos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" +"El estado de baipás se puede guardar en el archivo de preselección. Las " +"razones por las que se hizo esto se pueden ver en la incidencia 1039" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" +"Se ha mejorado la compatibilidad del código de precarga con los dispositivos " +"usb." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"Se muestra un cuadro de diálogo al usuario cuando no se puede cargar un " +"preajuste o no se puede importar un archivo de preajuste/impulso." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"Ahora se utiliza el plugin SideChain Gate de Linux Studio Plugins en lugar " +"del de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"EasyEffects ya no debería bloquearse cuando la configuración regional del " +"usuario no está bien configurada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"Se ha implementado una solución en nuestro icono para hacer frente a la " +"falta de soporte adecuado de SVG en QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"Cuando los efectos se desactivan en una aplicación, ahora establecemos sus " +"metadatos de destino como nulos. Esto permitirá que el gestor de sesiones " +"multimedia (wireplumber) mueva correctamente el flujo a un nuevo dispositivo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"Se ha añadido una nueva opción de configuración. Permite a EasyEffects " +"ignorar los flujos cuyo propósito es supervisar los dispositivos de " +"recepción. Esto ayudará a solucionar algunos de los problemas que tenían " +"nuestros usuarios al utilizar OBS." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "Se ha mejorado el código que muestra el formato de muestra del flujo" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"La biblioteca rnnoise es ahora opcional. Esto debería ayudar a los " +"mantenedores de paquetes a construir un paquete Debian. Vea la incidencia " +"1000 para más información." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"Nuestros registros muestran ahora la línea de código fuente donde se " +"imprimen los mensajes" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"La casilla \"activar efectos \" en nuestra ventana no se actualizaba cuando " +"programas de terceros como pavucontrol alejaban el flujo de nuestros " +"dispositivos virtuales. Esto debería estar arreglado ahora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"Se ha corregido un fallo que podía producirse cuando se modificaba el " +"historial máximo de autogestión." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "Evitar los fallos cuando se ejecuta pw-mididump" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "Se ha mejorado la interfaz del plugin de tono" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" +"El icono de nuestra aplicación es ahora compatible con los escritorios que " +"usan QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"Nuestro código de lista de bloqueo utilizará la etiqueta application.id si " +"el flujo la establece" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Para evitar problemas con el desplazamiento del ratón, las entradas de la " +"lista de aplicaciones que aparecen en la pestaña Reproductores/Grabadoras ya " +"no muestran una escala de volumen. Encontrará más detalles sobre el problema " +"y su solución en los números 1211 y 1427" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Cuando no haya ninguna aplicación disponible para su visualización en los " +"reproductores/grabadores, se mostrará un mensaje al usuario" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Muchas actualizaciones de las traducciones" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"Se ha corregido un error por el que EasyEffeects se bloqueaba cuando se " +"cambiaba el número de puntos mostrados en el espectro mientras nuestro " +"pipeline estaba activo y el widget del espectro estaba visible" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"El valor de la latencia de la tubería mostrado en nuestra ventana podía ser " +"erróneo en algunas situaciones. Esto se ha solucionado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" +"Hay un nuevo ajuste que permite al usuario seleccionar un tiempo de " +"inactividad para la tubería. Cuando ningún cliente esté reproduciendo o " +"grabando desde nuestros dispositivos, los filtros se desvincularán una vez " +"alcanzado el tiempo de espera. Esto se hace para asegurarse de que no " +"desperdiciamos energía de la CPU procesando el silencio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"El plugin de ganancia automática ahora permite al usuario seleccionar cuál " +"de los tres tipos de sonoridad se utiliza para calcular." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"El complemento de ganancia automática ahora permite configurar el historial " +"máximo y ya no usa el modo de histograma libebur128. Esto debería evitar los " +"casos en los que la sonoridad integrada se atasca para siempre en el mismo " +"valor." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"El icono de EasyEffects ha sido actualizado de forma que debería ser visible " +"en los escritorios QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"La opción de línea de comandos que retorna el estado de bypass global vuelve " +"a funcionar." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"El filtro de alimentación cruzada debería funcionar mejor con los " +"conmutadores de latencia dinámica de PipeWire. Ya no deberían producirse " +"saltos en el nivel del volumen en estas situaciones." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Se ha corregido un error que impedía que los micrófonos mono funcionaran " +"correctamente con EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Compatibilidad con la próxima versión de PipeWire 0.3.44" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"El filtro autogain debería lidiar mejor con los conmutadores de latencia " +"dinámica de PipeWire. Ya no deberían producirse saltos en el nivel de " +"volumen en estas situaciones." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Hemos añadido una opción que permite restablecer el volumen y el estado de " +"silencio de nuestros dispositivos virtuales cuando se inicia EasyEffects. " +"Esto debería ayudar en los casos en que nuestros dispositivos son " +"silenciados por el servidor de audio por razones desconocidas." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Se ha mejorado el soporte para la suspensión del ordenador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Se ha corregido un error que causaba que la aplicación se bloqueara al " +"intentar crear un perfil de carga automática que no disponía de preajustes." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"Se ha corregido un error por el que, al poner a cero la calidad de una banda " +"del ecualizador, la aplicación se bloqueaba." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"Se hace uso de LibAdwaita para crear algunas partes de nuestra ventana y " +"para manejar el cambio entre temas oscuros y claros." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" +"El menú de ajustes ha sido rediseñado utilizando widgets de LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"Se mejoró la función de importación preestablecida APO del ecualizador para " +"aplicar no solo el filtro Bell, sino también otros compatibles (por el " +"momento, solo el filtro Bandpass no está disponible en el complemento LSP)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"La función Restablecer todos los ajustes de nuestro menú debería funcionar " +"ahora en Flatpak." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Tenemos una nueva opción que permite al usuario desactivar la ocultación " +"automática de nuestros menús. Esto puede ayudar a solucionar algunos errores " +"que los menús Popover tienen actualmente en gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Un análisis más robusto para importar perfiles APO guardados con una coma " +"como separador de miles en la banda de frecuencia central." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"La biblioteca fmt es una nueva dependencia, al menos mientras los " +"compiladores de c++ no implementen sus características. Se espera que esto " +"ocurra en los próximos años." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "GTKMM y GLIBMM ya no son dependencias. Ahora usamos gtk4 directamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Ahora es posible combinar respuestas a impulsos en la interfaz del " +"convolucionador. Un nuevo archivo de respuesta a impulsos es generado y debe " +"ser visible en la lista de respuestas a impulsos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"Mejorados los dibujos del eje x en nuestros gráficos. Ahora el número de " +"etiquetas se ajusta dinámicamente en función del ancho de nuestra ventana." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"La documentación se ha actualizado para reflejar las nuevas características " +"de EasyEffects. Se han eliminado las antiguas referencias sobre " +"PulseEffects. Se ha añadido al menú el botón de documentación." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Cuando se introduce un valor fuera de rango a un spinbutton, ahora se " +"actualiza con el valor más bajo o más alto en lugar de restablecerse al " +"valor previo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"La ventana principal ahora recuerda el estado maximizado y lo restaura " +"cuando se abre de nuevo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "La biblioteca tbb es una nueva dependencia" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Los plugins Limitador y Compresor multibanda ahora pueden utilizar una " +"cadena lateral externa opcional." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"El plugin de ganancia automática ahora permite al usuario seleccionar el " +"tipo de sonoridad a usar como referencia en la corrección de volumen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" +"La función de importación de perfiles APO del plugin Ecualizador ahora " +"analiza el parámetro \"PreAmplificación\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" +"El volumen cúbico puede activarse de forma opcional en la configuración " +"general." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" +"El plugin de Spectrum debía entrar en passthrough siempre que no fuera " +"visible, pero esto sólo ocurría cuando nuestra ventana estaba cerrada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "Mejor apoyo a la Tecnología de Asistencia." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" +"Las sondas utilizadas en algunos filtros como el Compresor y el Limitador no " +"estaban siendo revinculadas luego de cambiar el orden de los plugins en la " +"tubería. Ahora debería funcionar." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" +"Los flujos de monitorización de PipeWire están ahora excluidos y eliminados " +"de la lista de aplicaciones." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" +"Esperemos que se solucionen los bloqueos como el informado en el problema " +"1172." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" +"Se ha corregido un caso en el que el visualizador de espectro se bloqueaba." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"Pavucontrol ya no se añade a la lista de aplicaciones de entrada en los " +"sistemas con localización diferente a la inglesa." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"Compatibilidad mejorada con WirePlumber. Esto es necesario para ejecutarse " +"en sistemas que decidieron usarlo en lugar del administrador de sesión " +"integrado de PipeWire. Más información en el número 1144." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"Al intentar añadir un perfil de carga automática para un dispositivo que ya " +"está en la lista se actualizará su perfil de destino. De esta manera podemos " +"modificar los ajustes del perfil sin tener que eliminarlo y volver a crearlo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"La implementación de soporte de carga automática preestablecida fue " +"rediseñada nuevamente. Debería funcionar en más hardware ahora. Para obtener " +"más información, consulte el número 1051." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"Si el Limitador o el Maximizador se colocan en la última posición de la pila " +"de plugins, los nuevos plugins se añaden en la penúltima posición con el fin " +"de evitar la posibilidad de que el hardware se dañe por un nivel de salida " +"eventualmente alto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" +"Al eliminar una aplicación de la lista de aplicaciones bloqueadas, se " +"restablece su estado anterior de activación." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"En ocasiones, al eliminar los modelos importados del plugin de reducción de " +"ruido, el modelo en uso no se actualizaba correctamente. Esto debería estar " +"solucionado ahora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" +"Al editar archivos de perfiles en un editor externo, las entradas duplicadas " +"no se mostrarán en el menú de perfiles." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" +"Ahora la lista de aplicaciones bloqueadas se ajusta correctamente al cambiar " +"de perfil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" +"Ahora el estado del botón de bypass global se actualiza correctamente al " +"modificarse la pila de plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" +"Los iconos faltantes en el sistema no deberían ser mostrados dentro de la " +"interfaz de usuario (si el ícono de una aplicación no pudiese ser mostrado " +"aunque estés seguro de que está correctamente instalada, por favor abre un " +"problema)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"Algunos iconos que no se mostraban en el escritorio Plasma con el tema de " +"iconos Breeze deberían ser visibles ahora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Traducción al chino actualizada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Traducción al italiano actualizada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "Se agregó soporte para el parámetro del compresor Boost Amount" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"El plugin de compresión multibanda ahora utiliza el plugin de compresión " +"multibanda estéreo de Linux Studio Plugins, en lugar del de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"El plugin del limitador ahora utiliza el plugin del limitador estéreo de " +"Linux Studio Plugins, en lugar del de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"Los filtros LV2 ahora se generan en el diagrama de PipeWire sólo cuando se " +"cargan por primera vez. Una vez cargados, permanecen conectados hasta el " +"cierre de EasyEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" +"La tasa de muestreo del plugin de cancelación de eco está ahora " +"correctamente ajustada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" +"El parámetro umbral del plugin deesser se guarda ahora en el archivo de " +"perfil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" +"Mejorada la división de bandas para el cristalizador con nuevos valores de " +"intensidad por defecto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" +"Dependiendo de los valores de la ganancia de entrada y de salida, las barras " +"de nivel correspondientes podrían no alinearse correctamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" +"Cuando se añaden más bandas de ecualizador se ponen en Campana en vez de en " +"Apagado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" +"La carga de los perfiles del ecualizador APO ahora funciona correctamente en " +"localizaciones diferentes a C." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" +"Se ha mejorado la gestión de las conexiones entre puertos de nodos en " +"PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" +"La amplificación de la señal del plugin del cristalizador era demasiado alta " +"antes. Ahora debería estar dentro de niveles más razonables." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" +"Se ha mejorado el remuestreador (resampler) utilizado en los plugins que lo " +"requieren (como el plugin rnnoise)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" +"La configuración de múltiples perfiles de autocarga debería funcionar ahora " +"correctamente" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" +"Las ventanas transitorias están ahora correctamente configuradas para " +"algunos diálogos de plugins" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"El menú de respuesta de impulso de convolver se mejoró para solucionar un " +"problema en el que los archivos de impulso no se cargaban cuando solo había " +"uno disponible en el menú; consulte el problema 1011" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" +"Se ha corregido un error que podía hacer que el plugin de tonalidad (pitch) " +"no se inicializara correctamente" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "El aviso de saturación ahora no desplaza a los widgets adyacentes" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "Se ha corregido la configuración regional en algunos widgets" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "Se ha corregido la alineación incorrecta de algunos widgets" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" +"El complemento Loudness se está utilizando nuevamente por los motivos " +"descritos en el problema 820. Esto significa que es una dependencia opcional " +"nuevamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" +"Se ha corregido un fallo de segmentación que ocurría cuando no se instalaban " +"las dependencias opcionales" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "Se ha mejorado la interfaz del ecualizador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" +"Ahora se hace uso de un compresor LSP de cadena lateral que permite al " +"usuario seleccionar una fuente externa como entrada para la cadena lateral." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "Ahora soportamos el modo de compresor LSP Boosting." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" +"Cuando los canales divididos están activados en el ecualizador, el preajuste " +"APO importado se aplicará sólo al canal que se está visualizando en la " +"ventana. Esto permitirá importar diferentes preajustes para cada canal en " +"lugar de simplemente ajustar los mismos valores a ambos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" +"Se han corregido algunos fallos de segmentación que podían producirse al " +"crear o eliminar un perfil de carga automática" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" +"Este es uno de los mayores lanzamientos que he hecho. El número de cambios " +"es tan grande que es difícil describirlos todos aquí." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" +"Los siguientes son solo los más importantes. Las personas interesadas en el " +"viaje que nos trajo aquí pueden consultar el número 904 y el número 874." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" +"La aplicación y su repositorio han sido renombrados de PulseEffects a " +"EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "Se ha sustituido gtkmm3 por gtkmm4" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Se ha sustituido Gstreamer por filtros nativos de PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" +"Muchas características se han reimplementado desde cero. La carga automática " +"de perfiles es un ejemplo. Otro cambio notable se observa en el menú de " +"selección de plugins. Ahora el usuario puede mostrar en la ventana sólo los " +"plugins que desea utilizar." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" +"Boost ya no es una dependencia. El precio a pagar por esto es un pequeño " +"cambio en la estructura de nuestros perfiles. Con algo de paciencia, es " +"posible editar los perfiles de PulseEffects en un editor de texto y hacerlos " +"funcionar en EasyEffects. Con un poco de suerte puede que alguien cree un " +"script para automatizar esto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"Se utilizan nuevas bibliotecas y algunas de las que antes eran opcionales " +"ahora son requeridas" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta versión añade las siguientes características:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Esta versión corrige los siguientes errores:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Banda 1" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Hay disponible un nuevo ajuste que permite al usuario seleccionar un " +#~ "tiempo de inactividad para la tubería. Cuando ningún cliente está " +#~ "reproduciendo" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "o grabando desde nuestros dispositivos, los filtros se desconectarán una " +#~ "vez alcanzado el tiempo de espera. Esto se hace para asegurarse de que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "no desperdiciamos la potencia de la CPU procesando silencio." + +#~ msgid "mean." +#~ msgstr "la media geométrica." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Esto debería evitar los casos en los que la sonoridad `Integrada` se " +#~ "quedaba bloqueada indefinidamente en el mismo valor." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta versión corrige el siguiente error:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esta versión añade la siguiente funcionalidad:" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "gestor de sesiones de PipeWire integrado. Más información en [1144](" + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Los iconos no disponibles en el sistema no deberían mostrarse en la " +#~ "interfaz de información de la aplicación" + +#~ msgid "a look at and" +#~ msgstr "un vistazo y" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ecualizador, compresor y otros efectos de sonido" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Perfiles\"" + +#~ msgid "Enable" +#~ msgstr "Habilitar" + +#~ msgid "Exclude" +#~ msgstr "Excluir" + +#~ msgid "Mute Application" +#~ msgstr "Silenciar la aplicación" + +#~ msgid "Application Volume" +#~ msgstr "Volumen de aplicación" + +#~ msgid "_Preferences" +#~ msgstr "_Preferencias" + +#~ msgid "_Manual" +#~ msgstr "_Manual" + +#~ msgid "_Shortcuts" +#~ msgstr "_Atajos de teclado" + +#~ msgid "_Reset Settings" +#~ msgstr "_Restablecer ajustes" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Acerca de EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Perfiles" + +#~ msgid "Presets Menu" +#~ msgstr "Menú de perfiles" + +#~ msgid "Global Bypass" +#~ msgstr "Bypass global" + +#~ msgid "Primary Menu" +#~ msgstr "Menú principal" + +#~ msgid "EasyEffects Window" +#~ msgstr "Ventana de EasyEffects" + +#~ msgid "Applications List" +#~ msgstr "Lista de aplicaciones" + +#~ msgid "Empty List" +#~ msgstr "Lista vacía" + +#~ msgid "No Audio Application Available" +#~ msgstr "Ninguna aplicación de audio disponible" + +#~ msgid "Target" +#~ msgstr "Objetivo" + +#~ msgid "Maximum History" +#~ msgstr "Historial máximo" + +#~ msgid "Reference" +#~ msgstr "Referencia" + +#~ msgid "Momentary" +#~ msgstr "Momentánea" + +#~ msgid "Short-Term" +#~ msgstr "Corto plazo" + +#~ msgid "Integrated" +#~ msgstr "Integral" + +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Media geométrica (MSI)" + +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Media geométrica (MS)" + +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Media geométrica (MI)" + +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Media geométrica (SI)" + +#~ msgid "Reset History" +#~ msgstr "Restablecer el historial" + +#~ msgid "Relative" +#~ msgstr "Relativa" + +#~ msgid "Range" +#~ msgstr "Rango" + +#~ msgid "Loudness" +#~ msgstr "Sonoridad" + +#~ msgid "Output Gain" +#~ msgstr "Ganancia de salida" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Ganancia de entrada del plugin" + +#~ msgid "Output" +#~ msgstr "Salida" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Ganancia de salida del plugin" + +#~ msgid "Reset" +#~ msgstr "Restablecer" + +#~ msgid "Using" +#~ msgstr "Usando" + +#~ msgid "Device" +#~ msgstr "Dispositivo" + +#~ msgid "Name" +#~ msgstr "Nombre" + +#~ msgid "Profile" +#~ msgstr "Perfil" + +#~ msgid "Preset" +#~ msgstr "Perfil" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Eliminar perfil de carga automática" + +#~ msgid "Listen" +#~ msgstr "Escuchar" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mezclar armónicos" + +#~ msgid "3rd" +#~ msgstr "3ª" + +#~ msgid "2nd" +#~ msgstr "2ª" + +#~ msgid "Amount" +#~ msgstr "Cantidad" + +#~ msgid "Harmonics" +#~ msgstr "Harmónicos" + +#~ msgid "Scope" +#~ msgstr "Umbral" + +#~ msgid "Floor" +#~ msgstr "Límite inferior" + +#~ msgid "Floor Value" +#~ msgstr "Valor del límite inferior" + +#~ msgid "Link" +#~ msgstr "Enlace" + +#~ msgid "Application Name" +#~ msgstr "Nombre de la aplicación" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "Añadir a las aplicaciones excluidas" + +#~ msgid "Excluded Applications List" +#~ msgstr "Lista de aplicaciones excluidas" + +#~ msgid "Show Excluded Applications" +#~ msgstr "Mostrar aplicaciones excluidas" + +#~ msgid "Compressor" +#~ msgstr "Compresor" + +#~ msgid "Mode" +#~ msgstr "Modo" + +#~ msgid "Downward" +#~ msgstr "Descendente" + +#~ msgid "Upward" +#~ msgstr "Ascendente" + +#~ msgid "Boosting" +#~ msgstr "Refuerzo" + +#~ msgid "Compression Mode" +#~ msgstr "Modo de compresión" + +#~ msgid "Boost Threshold" +#~ msgstr "Umbral de refuerzo" + +#~ msgid "Boost Amount" +#~ msgstr "Cantidad de refuerzo" + +#~ msgid "Attack" +#~ msgstr "Ataque" + +#~ msgid "Time" +#~ msgstr "Tiempo" + +#~ msgid "Threshold" +#~ msgstr "Umbral" + +#~ msgid "Attack Time" +#~ msgstr "Tiempo de ataque" + +#~ msgid "Attack Threshold" +#~ msgstr "Umbral de ataque" + +#~ msgid "Release" +#~ msgstr "Decaimiento" + +#~ msgid "Release Time" +#~ msgstr "Tiempo de decaimiento" + +#~ msgid "Release Threshold" +#~ msgstr "Umbral de decaimiento" + +#~ msgid "Ratio" +#~ msgstr "Ratio (n:1)" + +#~ msgid "Knee" +#~ msgstr "Rótula" + +#~ msgid "Makeup" +#~ msgstr "Ganancia de compensación" + +#~ msgid "Sidechain" +#~ msgstr "Cadena lateral" + +#~ msgid "Peak" +#~ msgstr "Pico" + +#~ msgid "RMS" +#~ msgstr "RMS (media cuadrática)" + +#~ msgid "Low-Pass" +#~ msgstr "Paso bajo" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "Sidechain Mode" +#~ msgstr "Modo cadena lateral" + +#~ msgid "Source" +#~ msgstr "Fuente" + +#~ msgid "Middle" +#~ msgstr "Medio" + +#~ msgid "Side" +#~ msgstr "Lateral" + +#~ msgid "Left" +#~ msgstr "Izquierdo" + +#~ msgid "Right" +#~ msgstr "Derecho" + +#~ msgid "Sidechain Source" +#~ msgstr "Fuente de la cadena lateral" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Feed-forward" +#~ msgstr "Feed-forward" + +#~ msgid "Feed-back" +#~ msgstr "Feed-back" + +#~ msgid "External" +#~ msgstr "Externa" + +#~ msgid "Sidechain Type" +#~ msgstr "Tipo de cadena lateral" + +#~ msgid "Input Device" +#~ msgstr "Dispositivo de entrada" + +#~ msgid "PreAmplification" +#~ msgstr "Preamplificación" + +#~ msgid "Reactivity" +#~ msgstr "Reactividad" + +#~ msgid "Lookahead" +#~ msgstr "Anticipación" + +#~ msgid "Sidechain Filters" +#~ msgstr "Filtros de cadena lateral" + +#~ msgid "High-Pass" +#~ msgstr "Paso alto" + +#~ msgid "Frequency" +#~ msgstr "Frecuencia" + +#~ msgid "Off" +#~ msgstr "Desactivado" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Modo filtro de paso alto" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Frecuencia del filtro de paso alto" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Modo filtro de paso bajo" + +#~ msgid "Gain" +#~ msgstr "Ganancia" + +#~ msgid "Envelope" +#~ msgstr "Envolvente" + +#~ msgid "Curve" +#~ msgstr "Curva" + +#~ msgid "L" +#~ msgstr "L" + +#~ msgid "Left Channel" +#~ msgstr "Canal izquierdo" + +#~ msgid "R" +#~ msgstr "R" + +#~ msgid "Right Channel" +#~ msgstr "Canal derecho" + +#~ msgid "Impulses" +#~ msgstr "Respuestas a impulsos" + +#~ msgid "Combine" +#~ msgstr "Combinar" + +#~ msgid "Stereo Width" +#~ msgstr "Amplitud estéreo" + +#~ msgid "Spectrum" +#~ msgstr "Espectro" + +#~ msgid "Log Scale" +#~ msgstr "Escala logarítmica" + +#~ msgid "Autogain" +#~ msgstr "Ganancia automática" + +#~ msgid "Rate" +#~ msgstr "Tasa" + +#~ msgid "Samples" +#~ msgstr "Muestras" + +#~ msgid "Duration" +#~ msgstr "Duración" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "Combinar las respuestas a impulsos" + +#~ msgid "First Kernel" +#~ msgstr "Primer núcleo" + +#~ msgid "Second Kernel" +#~ msgstr "Segundo núcleo" + +#~ msgid "Output File Name" +#~ msgstr "Nombre del archivo de salida" + +#~ msgid "Combined Kernel Name" +#~ msgstr "Nombre del núcleo combinado" + +#~ msgid "Import Impulse" +#~ msgstr "Importar archivo de respuesta a impulsos" + +#~ msgid "Search" +#~ msgstr "Buscar" + +#~ msgid "Search Impulse File" +#~ msgstr "Buscar archivo de respuesta a impulsos" + +#~ msgid "Impulse Files List" +#~ msgstr "Lista de archivos de respuesta a impulsos" + +#~ msgid "Default" +#~ msgstr "Predeterminado" + +#~ msgid "Cutoff" +#~ msgstr "Corte" + +#~ msgid "Feed" +#~ msgstr "Alimentación" + +#~ msgid "Bypass" +#~ msgstr "Bypass" + +#~ msgid "Mute" +#~ msgstr "Silenciar" + +#~ msgid "Detection" +#~ msgstr "Detección" + +#~ msgid "Wide" +#~ msgstr "Banda ancha" + +#~ msgid "Split" +#~ msgstr "Banda dividida" + +#~ msgid "F1 Split" +#~ msgstr "División F1" + +#~ msgid "Frequency 1 Split" +#~ msgstr "División de la frecuencia 1" + +#~ msgid "F2 Peak" +#~ msgstr "Pico F2" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "Pico de la frecuencia 2" + +#~ msgid "F1 Gain" +#~ msgstr "Ganancia F1" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "Ganancia de la frecuencia 1" + +#~ msgid "F2 Level" +#~ msgstr "Nivel F2" + +#~ msgid "Frequency 2 Level" +#~ msgstr "Nivel de la frecuencia 2" + +#~ msgid "F2 Peak Q" +#~ msgstr "Pico Q F2" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Pico Q de la frecuencia 2" + +#~ msgid "Laxity" +#~ msgstr "Laxitud" + +#~ msgid "Detected" +#~ msgstr "Detectado" + +#~ msgid "Reduction" +#~ msgstr "Reducción" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del cuadro" + +#~ msgid "Filter Length" +#~ msgstr "Longitud del filtro" + +#~ msgid "Excluded Apps" +#~ msgstr "Aplicaciones excluidas" + +#~ msgid "Bands" +#~ msgstr "Bandas" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Dividir canales" + +#~ msgid "Flat Response" +#~ msgstr "Respuesta plana" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calcular frecuencias" + +#~ msgid "Load APO Preset" +#~ msgstr "Cargar el perfil APO" + +#~ msgid "Bell" +#~ msgstr "Campana" + +#~ msgid "High Pass" +#~ msgstr "Paso alto" + +#~ msgid "High Shelf" +#~ msgstr "Shelving de agudos" + +#~ msgid "Low Pass" +#~ msgstr "Pase bajo" + +#~ msgid "Low Shelf" +#~ msgstr "Shelving de graves" + +#~ msgid "Notch" +#~ msgstr "Rechazo de banda" + +#~ msgid "Resonance" +#~ msgstr "Resonancia" + +#~ msgid "All Pass" +#~ msgstr "Paso total" + +#~ msgid "Band Type" +#~ msgstr "Tipo de banda" + +#~ msgid "Band Mode" +#~ msgstr "Modo de banda" + +#~ msgid "Slope" +#~ msgstr "Pendiente" + +#~ msgid "Band Slope" +#~ msgstr "Pendiente de la banda" + +#~ msgid "Width" +#~ msgstr "Anchura" + +#~ msgid "Quality" +#~ msgstr "Calidad" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#~ msgid "Ceil" +#~ msgstr "Límite superior" + +#~ msgid "Ceil Value" +#~ msgstr "Valor del límite superior" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Acceder" + +#~ msgid "Description" +#~ msgstr "Descripción" + +#~ msgid "Remove this model file" +#~ msgstr "Borrar este perfil" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Paso bajo 12dB/oct" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Paso bajo 24dB/oct" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Paso bajo 36dB/oct" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Paso alto 12dB/oct" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Paso alto 24dB/oct" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Paso alto 36dB/oct" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Paso banda 6dB/oct" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Paso banda 12dB/oct" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Paso banda 18dB/oct" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Rechazo de banda 6dB/oct" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Rechazo de banda 12dB/oct" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Rechazo de banda 18dB/oct" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#~ msgid "Gate" +#~ msgstr "Puerta de ruido" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Tiempo de decaimiento" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Externa" + +#~ msgid "Gating" +#~ msgstr "Actividad de la puerta" + +#~ msgid "Oversampling" +#~ msgstr "Sobremuestreo" + +#~ msgid "Dither" +#~ msgstr "Dither" + +#~ msgid "Herm Thin" +#~ msgstr "Herm Thin" + +#~ msgid "Herm Wide" +#~ msgstr "Herm Wide" + +#~ msgid "Herm Tail" +#~ msgstr "Herm Tail" + +#~ msgid "Herm Duck" +#~ msgstr "Herm Duck" + +#~ msgid "Exp Thin" +#~ msgstr "Exp Thin" + +#~ msgid "Exp Wide" +#~ msgstr "Exp Wide" + +#~ msgid "Exp Tail" +#~ msgstr "Exp Tail" + +#~ msgid "Exp Duck" +#~ msgstr "Exp Duck" + +#~ msgid "Line Thin" +#~ msgstr "Line Thin" + +#~ msgid "Line Wide" +#~ msgstr "Line Wide" + +#~ msgid "Line Tail" +#~ msgstr "Line Tail" + +#~ msgid "Line Duck" +#~ msgstr "Line Duck" + +#~ msgid "None" +#~ msgstr "Ninguno" + +#~ msgid "Half x2(2L)" +#~ msgstr "Parcial x2(2L)" + +#~ msgid "Half x2(3L)" +#~ msgstr "Parcial x2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "Parcial x3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "Parcial x3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "Parcial x4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "Parcial x4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "Parcial x6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "Parcial x6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "Parcial x8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "Parcial x8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "Completo x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "Completo x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "Completo x3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "Completo x3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "Completo x4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "Completo x4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "Completo x6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "Completo x6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "Completo x8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "Completo x8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "SC PreAmp" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Preamplificaión de la cadena lateral" + +#~ msgid "Boost" +#~ msgstr "Refuerzo" + +#~ msgid "Stereo Link" +#~ msgstr "Enlace estéreo" + +#~ msgid "External Sidechain" +#~ msgstr "Cadena lateral externa" + +#~ msgid "External Sidechain Source" +#~ msgstr "Fuente de la cadena lateral externa" + +#~ msgid "Auto Leveling" +#~ msgstr "Nivelación automática" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "Ataque de nivelación automática" + +#~ msgid "Auto Leveling Release" +#~ msgstr "Decaimiento de nivelación automática" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "Rótula (transición) de nivelación automática" + +#~ msgid "Gain Left" +#~ msgstr "Ganancia izquierda" + +#~ msgid "Gain Right" +#~ msgstr "Ganancia derecha" + +#~ msgid "Sidechain Left" +#~ msgstr "Cadena lateral izquierda" + +#~ msgid "Sidechain Right" +#~ msgstr "Cadena lateral derecha" + +#~ msgid "Standard" +#~ msgstr "Estándar" + +#~ msgid "Flat" +#~ msgstr "Plano" + +#~ msgid "FFT Size" +#~ msgstr "Tamaño de la FFT" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Tamaño de la transformada rápida de Fourier" + +#~ msgid "Output Volume" +#~ msgstr "Volumen de salida" + +#~ msgid "Ceiling" +#~ msgstr "Límite superior" + +#~ msgid "Operating Mode" +#~ msgstr "Modo de funcionamiento" + +#~ msgid "Classic" +#~ msgstr "Clásico" + +#~ msgid "Modern" +#~ msgstr "Moderno" + +#~ msgid "Sidechain Boost" +#~ msgstr "Refuerzo de la cadena lateral" + +#~ msgid "Pink BT" +#~ msgstr "Rosa BT" + +#~ msgid "Pink MT" +#~ msgstr "Rosa MT" + +#~ msgid "Brown BT" +#~ msgstr "Marrón BT" + +#~ msgid "Brown MT" +#~ msgstr "Marrón MT" + +#~ msgid "Bands List" +#~ msgstr "Lista de bandas" + +#~ msgid "Band 1" +#~ msgstr "Banda 1" + +#~ msgid "Band 2" +#~ msgstr "Banda 2" + +#~ msgid "Band 3" +#~ msgstr "Banda 3" + +#~ msgid "Band 4" +#~ msgstr "Banda 4" + +#~ msgid "Band 5" +#~ msgstr "Banda 5" + +#~ msgid "Band 6" +#~ msgstr "Banda 6" + +#~ msgid "Band 7" +#~ msgstr "Banda 7" + +#~ msgid "Band 8" +#~ msgstr "Banda 8" + +#~ msgid "Band Start" +#~ msgstr "Inicio de la banda" + +#~ msgid "Band End" +#~ msgstr "Fin de la banda" + +#~ msgid "Band Compression Mode" +#~ msgstr "Modo de compresión de banda" + +#~ msgid "Band Bypass" +#~ msgstr "Bypass de banda" + +#~ msgid "Band Sidechain Options" +#~ msgstr "Opciones de la cadena lateral de la banda" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro paso bajo" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Frecuencia del filtro paso bajo" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro paso alto" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Frecuencia del filtro paso alto" + +#~ msgid "PreAmp" +#~ msgstr "PreAmp" + +#~ msgid "Band Gain" +#~ msgstr "Ganancia de banda" + +#~ msgid "Band Envelope" +#~ msgstr "Envolvente de banda" + +#~ msgid "Band Curve" +#~ msgstr "Curva de la banda" + +#~ msgid "Split Mode" +#~ msgstr "Modo de división" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Dividir frecuencia 1" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Dividir frecuencia 2" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Dividir frecuencia 3" + +#~ msgid "Sub Band" +#~ msgstr "Sub-banda" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass de banda 1" + +#~ msgid "Band 1 Solo" +#~ msgstr "Solo de la banda 1" + +#~ msgid "Band 1 Detection" +#~ msgstr "Método de detección de la banda 1" + +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque de la banda 1" + +#~ msgid "Band 1 Release" +#~ msgstr "Tiempo de decaimiento de la banda 1" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Umbral de la banda 1" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Ratio de la banda 1" + +#~ msgid "Band 1 Knee" +#~ msgstr "Rótula (transición) de la banda 1" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Ganancia de compensación de la banda 1" + +#~ msgid "Max Reduction" +#~ msgstr "Atenuación máxima" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Reducción máx. de la banda 1" + +#~ msgid "Low Band" +#~ msgstr "Banda baja" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass de la banda 2" + +#~ msgid "Band 2 Solo" +#~ msgstr "Solo de la banda 2" + +#~ msgid "Band 2 Detection" +#~ msgstr "Método de detección de la banda 2" + +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque de la banda 2" + +#~ msgid "Band 2 Release" +#~ msgstr "Tiempo de decaimiento de la banda 2" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Umbral de la banda 2" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Ratio de la banda 2" + +#~ msgid "Band 2 Knee" +#~ msgstr "Rótula (transición) de la banda 2" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Ganancia de compensación de la banda 2" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción máx. de la banda 2" + +#~ msgid "Mid Band" +#~ msgstr "Banda media" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass de la banda 3" + +#~ msgid "Band 3 Solo" +#~ msgstr "Solo de la banda 3" + +#~ msgid "Band 3 Detection" +#~ msgstr "Método de detección de la banda 3" + +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque de la banda 3" + +#~ msgid "Band 3 Release" +#~ msgstr "Tiempo de decaimiento de la banda 3" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Umbral de la banda 3" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Ratio de la banda 3" + +#~ msgid "Band 3 Knee" +#~ msgstr "Rótula (transición) de la banda 3" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Ganancia de compensación de la banda 3" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción máx. de la banda 3" + +#~ msgid "High Band" +#~ msgstr "Banda alta" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass de la banda 4" + +#~ msgid "Band 4 Solo" +#~ msgstr "Solo de la banda 4" + +#~ msgid "Band 4 Detection" +#~ msgstr "Método de detección de la banda 4" + +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque de la banda 4" + +#~ msgid "Band 4 Release" +#~ msgstr "Tiempo de decaimiento de la banda 4" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Umbral de la banda 4" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Ratio de la banda 4" + +#~ msgid "Band 4 Knee" +#~ msgstr "Rótula (transición) de la banda 4" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Ganancia de compensación de la banda 4" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción máx. de la banda 4" + +#~ msgid "General" +#~ msgstr "General" + +#~ msgid "Use Default Input" +#~ msgstr "Usar entrada predeterminada" + +#~ msgid "Custom Input Device" +#~ msgstr "Dispositivo de entrada personalizado" + +#~ msgid "Use Default Output" +#~ msgstr "Usar salida predeterminada" + +#~ msgid "Custom Output Device" +#~ msgstr "Dispositivo de salida personalizado" + +#~ msgid "Server Information" +#~ msgstr "Información del servidor" + +#~ msgid "Header Version" +#~ msgstr "Versión principal" + +#~ msgid "Library Version" +#~ msgstr "Versión de la biblioteca" + +#~ msgid "Sampling Rate" +#~ msgstr "Tasa de muestreo" + +#~ msgid "Minimum Quantum" +#~ msgstr "Quantum mínimo" + +#~ msgid "Maximum Quantum" +#~ msgstr "Quantum máximo" + +#~ msgid "Default Quantum" +#~ msgstr "Quantum por defecto" + +#~ msgid "Output Devices" +#~ msgstr "Dispositivos de salida" + +#~ msgid "Output Presets" +#~ msgstr "Perfiles de salida" + +#~ msgid "Create Association" +#~ msgstr "Crear asociación" + +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "Agregar un perfil de salida de carga automática" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Lista de perfiles de salida de carga automática" + +#~ msgid "Input Devices" +#~ msgstr "Dispositivos de entrada" + +#~ msgid "Input Presets" +#~ msgstr "Perfiles de entrada" + +#~ msgid "Add Autoloading Input Preset" +#~ msgstr "Agregar un perfil de entrada de carga automática" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Lista de perfiles de entrada de carga automática" + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#~ msgid "Modules List" +#~ msgstr "Lista de los módulos" + +#~ msgid "Clients" +#~ msgstr "Clientes" + +#~ msgid "Clients List" +#~ msgstr "Lista de los clientes" + +#~ msgid "Test Signal" +#~ msgstr "Señal de prueba" + +#~ msgid "State" +#~ msgstr "Estado" + +#~ msgid "Enabled" +#~ msgstr "Habilitado" + +#~ msgid "Properties" +#~ msgstr "Propiedades" + +#~ msgid "Channels" +#~ msgstr "Canales" + +#~ msgid "Both" +#~ msgstr "Ambos" + +#~ msgid "Both Channels" +#~ msgstr "Ambos canales" + +#~ msgid "Waveform" +#~ msgstr "Forma de onda" + +#~ msgid "Sine Wave" +#~ msgstr "Onda sinusoidal" + +#~ msgid "White Noise" +#~ msgstr "Ruido blanco" + +#~ msgid "High Speed" +#~ msgstr "Alta velocidad" + +#~ msgid "High Quality" +#~ msgstr "Alta calidad" + +#~ msgid "High Consistency" +#~ msgstr "Alta consistencia" + +#~ msgid "Formant" +#~ msgstr "Formato" + +#~ msgid "Shifted" +#~ msgstr "Alterado" + +#~ msgid "Preserved" +#~ msgstr "Preservado" + +#~ msgid "Transients" +#~ msgstr "Transitorios" + +#~ msgid "Crisp" +#~ msgstr "Nítidos" + +#~ msgid "Mixed" +#~ msgstr "Intermedios" + +#~ msgid "Smooth" +#~ msgstr "Suavizados" + +#~ msgid "Detector" +#~ msgstr "Detección" + +#~ msgid "Compound" +#~ msgstr "Compuesto" + +#~ msgid "Percussive" +#~ msgstr "Percusivo" + +#~ msgid "Soft" +#~ msgstr "Suave" + +#~ msgid "Phase" +#~ msgstr "Fase" + +#~ msgid "Laminar" +#~ msgstr "Laminar" + +#~ msgid "Independent" +#~ msgstr "Independiente" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Semitones" +#~ msgstr "Semitonos" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Borrar este perfil" + +#~ msgid "Add Effect" +#~ msgstr "Agregar efecto" + +#~ msgid "Used Plugins List" +#~ msgstr "Lista de plugins utilizados" + +#~ msgid "No Effects" +#~ msgstr "Sin efectos" + +#~ msgid "Audio Stream Not Modified" +#~ msgstr "Flujo de audio no modificado" + +#~ msgid "Search Plugin" +#~ msgstr "Buscar plugin" + +#~ msgid "Plugins List" +#~ msgstr "Lista de plugins" + +#~ msgid "_General" +#~ msgstr "_General" + +#~ msgid "Service" +#~ msgstr "Servicio" + +#, fuzzy +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Apagar al cerrar la ventana" + +#~ msgid "Audio" +#~ msgstr "Audio" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Procesar todas las salidas" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Procesar todas las entradas" + +#~ msgid "Use Cubic Volume" +#~ msgstr "Usar volumen cúbico" + +#~ msgid "Inactivity Timeout" +#~ msgstr "Tiempo de inactividad" + +#~ msgid "Style" +#~ msgstr "Estilo" + +#~ msgid "Use Dark Theme" +#~ msgstr "Usar tema oscuro" + +#~ msgid "Hide Menus on Outside Clicks" +#~ msgstr "Ocultar los menús al hacer click fuera" + +#~ msgid "_Spectrum" +#~ msgstr "_Espectro" + +#~ msgid "Shape" +#~ msgstr "Forma" + +#~ msgid "Bars" +#~ msgstr "Barras" + +#~ msgid "Lines" +#~ msgstr "Líneas" + +#~ msgid "Dots" +#~ msgstr "Puntos" + +#~ msgid "Points" +#~ msgstr "Puntos" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Line Width" +#~ msgstr "Ancho de la línea" + +#~ msgid "Fill" +#~ msgstr "Rellenar" + +#~ msgid "Show Bars Border" +#~ msgstr "Mostrar los bordes de las barras" + +#~ msgid "Rounded Corners" +#~ msgstr "Redondear las esquinas" + +#~ msgid "Color" +#~ msgstr "Color" + +#~ msgid "Lines and Bars" +#~ msgstr "Lineas y barras" + +#~ msgid "Axis Labels" +#~ msgstr "Etiquetas del eje" + +#~ msgid "Frequency Range" +#~ msgstr "Rango de frecuencia" + +#~ msgid "Minimum" +#~ msgstr "Mínima" + +#~ msgid "Maximum" +#~ msgstr "Máximo" + +#~ msgid "Load" +#~ msgstr "Cargar" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Guardar la configuración actual en este perfil" + +#~ msgid "Remove this preset file" +#~ msgstr "Eliminar este perfil" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nombre del nuevo perfil de salida" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Crear perfil" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importar perfil" + +#~ msgid "Search Output Preset" +#~ msgstr "Buscar perfil de salida" + +#~ msgid "Output Presets List" +#~ msgstr "Lista de perfiles de salida" + +#~ msgid "New Input Preset Name" +#~ msgstr "Nombre del nuevo perfil de entrada" + +#~ msgid "Search Input Preset" +#~ msgstr "Buscar perfil de entrada" + +#~ msgid "Input Presets List" +#~ msgstr "Lista de perfiles de entrada" + +#~ msgid "High Frequency Damping" +#~ msgstr "Atenuación de alta frecuencia" + +#~ msgid "Room Size" +#~ msgstr "Tamaño de la sala" + +#~ msgid "Small" +#~ msgstr "Pequeña" + +#~ msgid "Medium" +#~ msgstr "Mediana" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Túnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/suave" + +#~ msgid "Experimental" +#~ msgstr "Experimental" + +#~ msgid "Diffusion" +#~ msgstr "Difusión" + +#~ msgid "Pre Delay" +#~ msgstr "Pre retraso" + +#~ msgid "Decay Time" +#~ msgstr "Tiempo de decaimiento" + +#~ msgid "Wet Amount" +#~ msgstr "Cantidad de señal con efectos" + +#~ msgid "Wet Level" +#~ msgstr "Nivel de señal con efectos" + +#~ msgid "Dry Amount" +#~ msgstr "Cantidad de señal sin efectos" + +#~ msgid "Dry Level" +#~ msgstr "Nivel de señal sin efectos" + +#~ msgid "Bass Cut" +#~ msgstr "Corte de graves" + +#~ msgid "Treble Cut" +#~ msgstr "Corte de agudos" + +#~ msgid "Ambience" +#~ msgstr "Ambiente" + +#~ msgid "Empty Walls" +#~ msgstr "Paredes vacías" + +#~ msgid "Room" +#~ msgstr "Sala" + +#~ msgid "Large Empty Hall" +#~ msgstr "Sala grande vacía" + +#~ msgid "Disco" +#~ msgstr "Discoteca" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Sala grande ocupada" + +#~ msgid "Import Model" +#~ msgstr "Importar modelo" + +#~ msgid "Models" +#~ msgstr "Modelos" + +#~ msgid "Standard Model" +#~ msgstr "Modelo estándar" + +#~ msgid "RNNoise Models List" +#~ msgstr "Lista de modelos de RNNoise" + +#~ msgid "Active Model" +#~ msgstr "Modelo activo" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Modelo RNNoise estándar" + +#~ msgid "Overview" +#~ msgstr "Resumen" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Abrir el manual de EasyEffects" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Pantalla completa/restaurar desde pantalla completa" + +#~ msgid "Close the Window" +#~ msgstr "Cerrar la ventana" + +#~ msgid "Quit EasyEffects" +#~ msgstr "Cerrar EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#~ msgid "Input Balance" +#~ msgstr "Balance de entrada" + +#~ msgid "Softclip" +#~ msgstr "Recorte suave" + +#~ msgid "Softclip Level" +#~ msgstr "Nivel del recorte suave (soft clipping)" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matriz estéreo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Estéreo predeterminado)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Estéreo a medio-lateral)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Medio-lateral a estéreo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "R > LL (Mono usando el canal izquierdo)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Mono usando el canal derecho)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Mono sumando los canales izq. y dcho.)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Estéreo invirtiendo los canales)" + +#~ msgid "Stereo Mode" +#~ msgstr "Modo estéreo" + +#~ msgid "Invert Phase" +#~ msgstr "Invertir la fase" + +#~ msgid "Side Level" +#~ msgstr "Nivel lateral" + +#~ msgid "Side Balance" +#~ msgstr "Balance lateral" + +#~ msgid "Middle Level" +#~ msgstr "Nivel medio" + +#~ msgid "Middle Panorama" +#~ msgstr "Panoramización media" + +#~ msgid "Output Balance" +#~ msgstr "Balance de salida" + +#~ msgid "Delay L/R" +#~ msgstr "Retraso L/R" + +#~ msgid "Delay Left Right" +#~ msgstr "Retardo izquierdo/derecho" + +#~ msgid "Stereo Base" +#~ msgstr "Base estéreo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fase estéreo" + +#~ msgid "Running" +#~ msgstr "En ejecución" + +#~ msgid "Suspended" +#~ msgstr "Suspendido" + +#~ msgid "Idle" +#~ msgstr "Inactivo" + +#~ msgid "Creating" +#~ msgstr "En creación" + +#~ msgid "Error" +#~ msgstr "Error" + +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgid "channels" +#~ msgstr "canales" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de entrada: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de audio para aplicaciones que utilizan PipeWire" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "Salir de EasyEffects. Útil cuando se está ejecutando en modo servicio." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Cargar un perfil. Por ejemplo: easyeffects -l musica" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Restablecer EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Ocultar la ventana." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Bypass global. 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +#~ "estado actual" + +#~ msgid "Show available presets." +#~ msgstr "Mostrar los perfiles disponibles." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Lista de archivos de respuesta a impulsos" + +#~ msgid "Import Impulse File" +#~ msgstr "Importar archivo de respuesta a impulsos" + +#~ msgid "Open" +#~ msgstr "Abrir" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Impulse Response" +#~ msgstr "Respuesta a impulsos" + +#~ msgid "Load Impulse" +#~ msgstr "Cargar archivo de respuesta a impulsos" + +#~ msgid "Remove Impulse" +#~ msgstr "Eliminar archivo de respuesta a impulsos" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Lista de archivos de respuesta a impulsos" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "No se pudo cargar el archivo de respuesta a impulsos" + +#~ msgid "Recorders" +#~ msgstr "Gravadores" + +#~ msgid "Players" +#~ msgstr "Reproductores" + +#~ msgid "Effects" +#~ msgstr "Efectos" + +#~ msgid "infinity" +#~ msgstr "infinito" + +#~ msgid "Import APO Preset File" +#~ msgstr "Importar archivo de perfil APO" + +#~ msgid "APO Presets" +#~ msgstr "Perfiles APO" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Eliminar perfil de carga automática" + +#~ msgid "Remove" +#~ msgstr "Eliminar" + +#~ msgid "Output Device" +#~ msgstr "Dispositivo de salida" + +#~ msgid "Add" +#~ msgstr "Agregar" + +#~ msgid "Import Preset" +#~ msgstr "Importar perfil" + +#~ msgid "Import Model File" +#~ msgstr "Importar archivo de modelo" + +#~ msgid "RNNoise Models" +#~ msgstr "Modelos RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Refuerzo de graves" + +#~ msgid "Bass Loudness" +#~ msgstr "Sonoridad de graves" + +#~ msgid "Convolver" +#~ msgstr "Convolucinador" + +#~ msgid "Crossfeed" +#~ msgstr "Alimentación cruzada" + +#~ msgid "Crystalizer" +#~ msgstr "Cristalizador" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Retraso" + +#~ msgid "Echo Canceller" +#~ msgstr "Cancelación de eco" + +#~ msgid "Equalizer" +#~ msgstr "Ecualizador" + +#~ msgid "Exciter" +#~ msgstr "Excitador" + +#~ msgid "Filter" +#~ msgstr "Filtro" + +#~ msgid "Limiter" +#~ msgstr "Limitador" + +#~ msgid "Maximizer" +#~ msgstr "Maximizador" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compresor multibanda" + +#~ msgid "Multiband Gate" +#~ msgstr "Puerta de ruido multibanda" + +#~ msgid "Pitch" +#~ msgstr "Tono" + +#~ msgid "Reverberation" +#~ msgstr "Reverberación" + +#~ msgid "Noise Reduction" +#~ msgstr "Reducción de ruido" + +#~ msgid "Stereo Tools" +#~ msgstr "Herramientas estéreo" + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar predeterminado" + +#~ msgid "Remove this plugin" +#~ msgstr "Eliminar este plugin" + +#~ msgid "Import Presets" +#~ msgstr "Importar perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar el servicio en el inicio de sesión" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Restablecer el volumen de los dispositivos de EasyEffect al inicio" diff --git a/po/news/es_CO.po b/po/news/es_CO.po new file mode 100644 index 0000000..751e3c4 --- /dev/null +++ b/po/news/es_CO.po @@ -0,0 +1,3073 @@ +# Spanish (CO) translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Pulseeffects package. +# CCaroV , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Spanish (Colombia) \n" +"Language: es_CO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de audio paras las aplicaciones PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects es una herramienta avanzada de manipulación de audio. Incluye un " +"ecualizador, limitador, compresor y una herramienta de reverberación, solo " +"por mencionar algunos. Para complementar esto también hay un analizador de " +"espectro incorporado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects es el sucesor de PulseEffects. EasyEffects solo admite el " +"servidor de audio de PipeWire. Los usuarios de PulseAudio deben usar " +"PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Debido a que EasyEffects utiliza el servidor de sonido PipeWire " +"predeterminado, funcionará con la mayoría, si no todas, las aplicaciones que " +"utilice. Todas las aplicaciones soportadas se presentan en la ventana " +"principal, donde cada una se puede habilitar individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Además de manipular el sonido de salida, EasyEffects puede aplicar efectos a " +"dispositivos de entrada, como micrófonos. Esto es útil, por ejemplo, en la " +"grabación de audio, pero también funciona correctamente durante " +"conversaciones de voces." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Cuando EasyEffects esté activo este convenientemente recordará la " +"configuración usada en la última sesión. También es posible guardar la " +"configuración actual como un perfil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "La página principal que muestra dos aplicaciones de salida de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "La página de potenciador de graves que muestra los controles de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "La página convolver que muestra los controles de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Traducciones actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Traducciones actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Traducciones actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +#, fuzzy +msgid "Improved translations" +msgstr "Traducciones actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +#, fuzzy +msgid "Many translation updates" +msgstr "Traducciones actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +#, fuzzy +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"El plugin autogain ahora permite al usuario seleccionar cuál de las tres " +"sonoridades se utilizan para calcular la geométrica" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +#, fuzzy +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"El plugin autogain ahora permite establecer el historial máximo y ya no usa " +"el modo `libebur128` histograma." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"El icono de EasyEffects se ha actualizado de una manera que debería hacerlo " +"visible en los escritorios QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"La opción de línea de comandos que devuelve el estado de derivación global " +"está funcionando de nuevo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"El filtro de crossfeed debería tratar mejor con los interruptores de " +"latencia dinámica de PipeWire. Los saltos en el nivel de volumen ya no " +"deberían ocurrir en estas situaciones." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Corregido un error que impedía que los micrófonos mono funcionaran " +"correctamente con EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Soporte para la próxima versión de PipeWire `0.3.44`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"El filtro de autogain debe tratar mejor con los interruptores de latencia " +"dinámica de PipeWire. Los saltos en el nivel de volumen ya no deberían " +"ocurrir en estas situaciones." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Hemos añadido una opción que permite restablecer el volumen y el estado de " +"silencio de nuestros dispositivos virtuales cuando se inicie EasyEffects. " +"Debería ayudar con los casos en los que nuestros dispositivos son " +"silenciados por el servidor de audio por razones desconocidas." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Mejor soporte para la suspensión de la computadora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Se ha corregido un error por el que al intentar crear un perfil de carga " +"automática sin tener ajustes preestablecidos la aplicación se bloqueaba." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +#, fuzzy +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"se ha Corregido un error donde el establecimiento de una banda de " +"ecualizador `calidad` a `cero` daría lugar a un accidente de aplicación." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita se utiliza para crear algunas partes de nuestra ventana y para " +"manejar el cambio entre temas oscuros y claros." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" +"El menú de configuración ha sido rediseñado usando los widgets de LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +#, fuzzy +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"Ecualizador APO función de importación preestablecida se ha mejorado para " +"aplicar no solo el filtro de Bell, sino también otros soportados" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +#, fuzzy +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"La función `Reiniciar todas las configuraciones` de nuestro menú debería " +"funcionar ahora en Flatpak." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +#, fuzzy +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Tenemos una nueva opción que permite al usuario deshabilitar nuestros menús " +"`autohide`. Esto puede ayudar a solucionar algunos errores que los menús " +"Popover tienen actualmente en gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Análisis más robusto para importar preajustes APO guardados con coma como " +"separador de miles en banda de frecuencia central." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"La biblioteca fmt es una nueva dependencia Al menos mientras los " +"compiladores de c++ no implementan sus características. Se espera que esto " +"suceda en los próximos años." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM y GLIBMM ya no son una dependencia. Ahora usamos gtk4 directamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Ahora es posible combinar respuestas de impulso en la interfaz Convolver. Se " +"genera un nuevo archivo de impulso y debe ser visible en la lista de " +"impulsos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +#, fuzzy +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"Dibujos `x ejes` mejorados en nuestras gráficas. Ahora el número de " +"etiquetas se ajusta dinámicamente dependiendo del ancho de nuestra ventana." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"La documentación se ha actualizado para reflejar las nuevas características " +"de EasyEffects. Se han eliminado las referencias antiguas sobre " +"PulseEffects. El botón de documentación se ha añadido en la sección de menú." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Cuando un spinbutton se llena con un valor fuera de rango, ahora se " +"actualiza con el valor más bajo/ más alto en lugar de reinicializar al " +"anterior." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta versión añade las siguientes características:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Esta versión corrige los siguientes errores:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Hay una nueva configuración que permite al usuario seleccionar un tiempo " +#~ "de inactividad para la canalización. Cuando no se reproduce ningún cliente" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "desde nuestros dispositivos, los filtros se desvincularán después de que " +#~ "se alcance el tiempo de espera. Esto se hace para asegurarse de que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "" +#~ "no desperdiciamos el silencio de procesamiento de energía de la CPU." + +#~ msgid "mean." +#~ msgstr "medida." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Esto debe evitar los casos en los que el `Integrated` loudness se queda " +#~ "atascado para siempre en el mismo valor." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta versión corrige el siguiente error:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esta versión incluye las siguientes novedades:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ecualizador, Compresor y Otros Efectos de Sonido" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Perfiles\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Ajustes" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Perfiles" + +#~ msgid "Global Bypass" +#~ msgstr "Bypass Global" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Paredes Vacías" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplicaciones" + +#~ msgid "Target" +#~ msgstr "Objetivo" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Máximo" + +#~ msgid "Momentary" +#~ msgstr "Momentáneo" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Corto Plazo" + +#~ msgid "Integrated" +#~ msgstr "Integrado" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Usar la Media Geométrica" + +#~ msgid "Reset History" +#~ msgstr "Restablecer Historial" + +#~ msgid "Relative" +#~ msgstr "Reativo" + +#~ msgid "Range" +#~ msgstr "Rango" + +#~ msgid "Loudness" +#~ msgstr "Volumen" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Ganancia de Entrada" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Ganancia de Entrada" + +#~ msgid "Output" +#~ msgstr "Salida" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Caudal de Salida" + +#~ msgid "Reset" +#~ msgstr "Restablecer" + +#~ msgid "Name" +#~ msgstr "Nombre" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Remover preajuste de autocargar" + +#~ msgid "Listen" +#~ msgstr "Escuchar" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mezclar Harmónicos" + +#~ msgid "3rd" +#~ msgstr "3era" + +#~ msgid "2nd" +#~ msgstr "2nda" + +#~ msgid "Amount" +#~ msgstr "Cantidad" + +#~ msgid "Harmonics" +#~ msgstr "Harmónicos" + +#~ msgid "Scope" +#~ msgstr "Alcance" + +#~ msgid "Floor" +#~ msgstr "Fondo" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Fondo" + +#~ msgid "Link" +#~ msgstr "Acoplar" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Aplicaciones" + +#~ msgid "Compressor" +#~ msgstr "Compresor" + +#~ msgid "Mode" +#~ msgstr "Modo" + +#~ msgid "Downward" +#~ msgstr "Hacia Abajo" + +#~ msgid "Upward" +#~ msgstr "Hacia Arriba" + +#~ msgid "Compression Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Cantidad" + +#~ msgid "Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Tiempo Real" + +#~ msgid "Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Límite" + +#~ msgid "Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Tiempo Real" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Límite" + +#~ msgid "Ratio" +#~ msgstr "Radio" + +#~ msgid "Knee" +#~ msgstr "Codo" + +#~ msgid "Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Sidechain" +#~ msgstr "Cadena Lateral" + +#~ msgid "Peak" +#~ msgstr "Pico" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Cadena Lateral" + +#~ msgid "Source" +#~ msgstr "Fuente" + +#~ msgid "Middle" +#~ msgstr "Medio" + +#~ msgid "Side" +#~ msgstr "Lado" + +#~ msgid "Left" +#~ msgstr "Izquierda" + +#~ msgid "Right" +#~ msgstr "Derecha" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Cadena Lateral" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Feed-forward" +#~ msgstr "Adelantar" + +#~ msgid "Feed-back" +#~ msgstr "Realimentar" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Efectos de Entrada" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Reactivity" +#~ msgstr "Reactividad" + +#~ msgid "Lookahead" +#~ msgstr "Atenuación" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Pase Alto" + +#~ msgid "Frequency" +#~ msgstr "Frecuencia" + +#~ msgid "Off" +#~ msgstr "Apagdo" + +#, fuzzy +#~ msgid "12 dB/oct" +#~ msgstr "12dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "24 dB/oct" +#~ msgstr "24dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "36 dB/oct" +#~ msgstr "36dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Filtro de Pase Alto" + +#~ msgid "Gain" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Pendiente" + +#~ msgid "Curve" +#~ msgstr "Curva" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Canales" + +#~ msgid "R" +#~ msgstr "R" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Dividir Canales" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Respuesta de Impulse" + +#~ msgid "Stereo Width" +#~ msgstr "Amplitud Estéreo" + +#~ msgid "Spectrum" +#~ msgstr "Espectro" + +#, fuzzy +#~ msgid "Log Scale" +#~ msgstr "Escala" + +#~ msgid "Autogain" +#~ msgstr "AutoGain" + +#~ msgid "Rate" +#~ msgstr "Tasa" + +#~ msgid "Samples" +#~ msgstr "Muestras" + +#~ msgid "Duration" +#~ msgstr "Duración" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Respuesta de Impulse" + +#~ msgid "Import Impulse" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Default" +#~ msgstr "Predeterminado" + +#~ msgid "Cutoff" +#~ msgstr "Umbral" + +#~ msgid "Feed" +#~ msgstr "Alimentar" + +#~ msgid "Bypass" +#~ msgstr "Derivación" + +#~ msgid "Mute" +#~ msgstr "Silenciar" + +#~ msgid "Detection" +#~ msgstr "Detección" + +#~ msgid "Wide" +#~ msgstr "Ancho" + +#~ msgid "Split" +#~ msgstr "Dividir" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Dividir" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Pico" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Nivel" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Pico Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frecuencia" + +#~ msgid "Laxity" +#~ msgstr "Relajamiento" + +#~ msgid "Detected" +#~ msgstr "Detectado" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Reducción" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filtro" + +#~ msgid "Bands" +#~ msgstr "Bandas" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "Split Channels" +#~ msgstr "Dividir Canales" + +#~ msgid "Flat Response" +#~ msgstr "Respuesta Plana" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calcular Frecuencias" + +#~ msgid "Bell" +#~ msgstr "Timbre" + +#~ msgid "High Pass" +#~ msgstr "Pase Alto" + +#~ msgid "High Shelf" +#~ msgstr "Estante Alto" + +#~ msgid "Low Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Low Shelf" +#~ msgstr "Estante Bajo" + +#~ msgid "Notch" +#~ msgstr "Muesca" + +#~ msgid "Resonance" +#~ msgstr "Resonancia" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Tipo" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Modo" + +#~ msgid "Slope" +#~ msgstr "Pendiente" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendiente" + +#~ msgid "Width" +#~ msgstr "Anchura" + +#~ msgid "Quality" +#~ msgstr "Calidad" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Borrar este perfil" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Paso Bajo" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Paso Bajo" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Paso Bajo" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Pase Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Pase Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Pase Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Paso de Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Paso de Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Paso de Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rechazo de Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rechazo de Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rechazo de Banda" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#~ msgid "Gate" +#~ msgstr "Puerta de Ruido" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Tiempo Real" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Integrado" + +#~ msgid "Gating" +#~ msgstr "Puerta" + +#~ msgid "Oversampling" +#~ msgstr "Sobre Muestreo" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Ancho" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Ancho" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Ancho de Linea" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Ancho de Linea" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Mesa Sinusoidal" + +#~ msgid "None" +#~ msgstr "Ninguno" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Stereo Link" +#~ msgstr "Acoplamiento Estéreo" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Ganancia Automática" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Derecha" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Salida" + +#~ msgid "Ceiling" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Calcular Frecuencias" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Calcular Frecuencias" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Ganancia de Entrada" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Curva" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Max Reduction" +#~ msgstr "Reducción" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Low Band" +#~ msgstr "Banda Baja" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Reverberación" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Tasa de Muestreo por Defecto" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Ganancia Máxima" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Profundidad Predeterminda" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Efectos de Salida" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Efectos de Entrada" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Módulos" + +#~ msgid "Clients" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Señal de Prueba" + +#~ msgid "State" +#~ msgstr "Estado" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Habilitar" + +#~ msgid "Channels" +#~ msgstr "Canales" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Canales" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Mesa Sinusoidal" + +#~ msgid "White Noise" +#~ msgstr "Ruido Blanco" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Estante Alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidad" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formato" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Frescura" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Clip Suave" + +#~ msgid "Cents" +#~ msgstr "Acentos" + +#~ msgid "Semitones" +#~ msgstr "Semitonos" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "Efectos" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Servidor" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Procesar Todas las Salidas" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Procesar Todas las Entradas" + +#~ msgid "Use Dark Theme" +#~ msgstr "Usar Tema Oscuro" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Espectro" + +#~ msgid "Bars" +#~ msgstr "Barras" + +#~ msgid "Lines" +#~ msgstr "Lineas" + +#~ msgid "Points" +#~ msgstr "Puntos" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Line Width" +#~ msgstr "Ancho de Linea" + +#~ msgid "Fill" +#~ msgstr "Rellenar" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Máximo" + +#~ msgid "Maximum" +#~ msgstr "Máximo" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Guardar esta configuración a este perfil" + +#~ msgid "Remove this preset file" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Crear Perfil" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importar Preajuste" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#~ msgid "High Frequency Damping" +#~ msgstr "Amortiguación de Alta Frecuencia" + +#~ msgid "Room Size" +#~ msgstr "Tamaño de la Habitación" + +#~ msgid "Small" +#~ msgstr "Pequeña" + +#~ msgid "Medium" +#~ msgstr "Mediana" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Túnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/Liso" + +#~ msgid "Experimental" +#~ msgstr "Experimental" + +#~ msgid "Diffusion" +#~ msgstr "Difusión" + +#~ msgid "Pre Delay" +#~ msgstr "Pre Retraso" + +#~ msgid "Decay Time" +#~ msgstr "Tiempo de Decaimiento" + +#~ msgid "Wet Amount" +#~ msgstr "Cantidad húmeda" + +#~ msgid "Wet Level" +#~ msgstr "Nivel húmedo" + +#~ msgid "Dry Amount" +#~ msgstr "Gran cantidad" + +#~ msgid "Dry Level" +#~ msgstr "nivel seco" + +#~ msgid "Bass Cut" +#~ msgstr "Corte de Bajos" + +#~ msgid "Treble Cut" +#~ msgstr "Corte de Sobreagudos" + +#~ msgid "Ambience" +#~ msgstr "Ambiente" + +#~ msgid "Empty Walls" +#~ msgstr "Paredes Vacías" + +#~ msgid "Room" +#~ msgstr "Habitación" + +#~ msgid "Large Empty Hall" +#~ msgstr "Habitación Vacía Grande" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Habitación Ocupada Grande" + +#~ msgid "Import Model" +#~ msgstr "Importar Modelo" + +#~ msgid "Models" +#~ msgstr "Modelos" + +#~ msgid "Standard Model" +#~ msgstr "Modelo estándar" + +#~ msgid "RNNoise Models List" +#~ msgstr "RNNoise Lista de Modelos" + +#~ msgid "Active Model" +#~ msgstr "Modelo activo" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Modelo estándar RNNoise" + +#~ msgid "Overview" +#~ msgstr "Visión general" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Abrir el manual de EasyEffects" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Pantalla completa/Restaurar desde pantalla completa" + +#~ msgid "Close the Window" +#~ msgstr "Cierra la ventana" + +#~ msgid "Quit EasyEffects" +#~ msgstr "Salir de EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#~ msgid "Input Balance" +#~ msgstr "Balance de insumos" + +#~ msgid "Softclip" +#~ msgstr "Clip Suave" + +#~ msgid "Softclip Level" +#~ msgstr "Nivel del Clip Suave" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matriz Estéreo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Estéreo Predeterminado)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Estéreo hacia Medio Lado)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Medio Lado - Estéreo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (Canal Izquierdo Mono)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Canal Derecho Mono)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Suma Mono L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Intercambiar Canales)" + +#~ msgid "Stereo Mode" +#~ msgstr "Modo Estéreo" + +#~ msgid "Invert Phase" +#~ msgstr "Invertir Fase" + +#~ msgid "Side Level" +#~ msgstr "Nivel Lateral" + +#~ msgid "Side Balance" +#~ msgstr "Balance Lateral" + +#~ msgid "Middle Level" +#~ msgstr "Nivel Medio" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama Medio" + +#~ msgid "Output Balance" +#~ msgstr "Balance de producción" + +#~ msgid "Delay L/R" +#~ msgstr "Retraso L/R" + +#~ msgid "Delay Left Right" +#~ msgstr "Retraso Izquierda Derecha" + +#~ msgid "Stereo Base" +#~ msgstr "Base Estéreo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fase Estéreo" + +#~ msgid "Running" +#~ msgstr "Corriendo" + +#~ msgid "Suspended" +#~ msgstr "Suspendido" + +#~ msgid "Idle" +#~ msgstr "Inactivo" + +#~ msgid "Creating" +#~ msgstr "Creando" + +#~ msgid "Error" +#~ msgstr "Error" + +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgid "channels" +#~ msgstr "canales" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de audio para aplicaciones PipeWire" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "Salir de EasyEffects. Útil cuando se está ejecutando en modo de servicio." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Cargar un perfil. Ejemplo: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Restablecer EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Oculta la ventana." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Bypass global, 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +#~ "estado" + +#~ msgid "Show available presets." +#~ msgstr "Mostrar perfiles disponibles." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Import Impulse File" +#~ msgstr "Importar impulso de archivo" + +#~ msgid "Open" +#~ msgstr "Abrir" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Impulse Response" +#~ msgstr "Respuesta de Impulse" + +#~ msgid "Load Impulse" +#~ msgstr "Cargar impulso" + +#~ msgid "Remove Impulse" +#~ msgstr "Remover impulso" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "No se pudo encontrar el archivo Impulse" + +#~ msgid "Recorders" +#~ msgstr "grabadoras" + +#~ msgid "Players" +#~ msgstr "Jugadores" + +#~ msgid "Effects" +#~ msgstr "Efectos" + +#~ msgid "infinity" +#~ msgstr "infinidad" + +#~ msgid "Import APO Preset File" +#~ msgstr "Importar archivo de preajuste APO" + +#~ msgid "APO Presets" +#~ msgstr "Preajustes APO" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Remover preajuste de autocargar" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Efectos de Salida" + +#~ msgid "Add" +#~ msgstr "Añadir" + +#~ msgid "Import Preset" +#~ msgstr "Importar Preajuste" + +#~ msgid "Import Model File" +#~ msgstr "Importar archivo modelo" + +#~ msgid "RNNoise Models" +#~ msgstr "Modelos RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "potenciador de graves" + +#~ msgid "Bass Loudness" +#~ msgstr "sonoridad de graves" + +#~ msgid "Convolver" +#~ msgstr "enrevesado" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Cristalizador" + +#~ msgid "Deesser" +#~ msgstr "DeEsser" + +#~ msgid "Delay" +#~ msgstr "Retraso" + +#~ msgid "Echo Canceller" +#~ msgstr "Cancelador de Eco" + +#~ msgid "Equalizer" +#~ msgstr "Ecualizador" + +#~ msgid "Exciter" +#~ msgstr "Excitador" + +#~ msgid "Filter" +#~ msgstr "Filtro" + +#~ msgid "Limiter" +#~ msgstr "Limitador" + +#~ msgid "Maximizer" +#~ msgstr "Maximizador" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compresor Multibanda" + +#~ msgid "Multiband Gate" +#~ msgstr "Puerta Multibanda" + +#~ msgid "Pitch" +#~ msgstr "Tono" + +#~ msgid "Reverberation" +#~ msgstr "Reverberación" + +#~ msgid "Noise Reduction" +#~ msgstr "Reducción de ruido" + +#~ msgid "Stereo Tools" +#~ msgstr "Herramientas Estéreo" + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Borrar este perfil" + +#~ msgid "Import Presets" +#~ msgstr "Importar Perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar Servicio al Iniciar Sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Lista Negra" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrar Micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "Faster" +#~ msgstr "Más Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar Formato" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Help" +#~ msgstr "Ayuda" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Color Personalizado" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Degradado" + +#~ msgid "Spectrum Color" +#~ msgstr "Color del Espectro" + +#~ msgid "Gradient Color" +#~ msgstr "Color del Degradado" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Exponent" +#~ msgstr "Exponente" + +#~ msgid "Sampling" +#~ msgstr "Muestreo" + +#~ msgid "Block Size" +#~ msgstr "Tamaño de Bloque" + +#~ msgid "Pipeline Input" +#~ msgstr "Caudal de Entrada" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Niceness" +#~ msgstr "Meticulosidad" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridad" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Priority" +#~ msgstr "Prioridad" + +# Resampler does not have an official translation +#~ msgid "Resampler" +#~ msgstr "Remuestreador" + +#~ msgid "Default Source" +#~ msgstr "Fuente Predeterminada" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Muestreo Predeterminado" + +#~ msgid "Channel Mapping" +#~ msgstr "Mapa de Canales" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +# Resamplers does not have an official translation +#~ msgid "Resamplers" +#~ msgstr "Remuestreadores" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silencio" + +#~ msgid "-23" +#~ msgstr "-23" + +#~ msgid "Weights" +#~ msgstr "Fuerza" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Atenuación" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Silenciado" + +#~ msgid "Distant Headphones" +#~ msgstr "Audífonos a Distancia" + +#~ msgid "Reset Equalizer" +#~ msgstr "Restablecer Ecualizador" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Dry" +#~ msgstr "Secar" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar Archivo de Respuesta Impulse" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione el Archivo de Respuesta Impulse" + +#~ msgid "Loudness Range" +#~ msgstr "Rango de Sonoridad" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Después" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Extendido" + +#~ msgid "Delay Agnostic" +#~ msgstr "Retraso Agnóstico" + +#~ msgid "Suppresion Level" +#~ msgstr "Nivel de Supresión" + +#~ msgid "Low" +#~ msgstr "Bajo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#~ msgid "Very High" +#~ msgstr "Muy Alto" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supresor de Ruido" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptado Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Arreglo Digital" + +#~ msgid "Gain Controller" +#~ msgstr "Regulador de Ganancia" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidad de Detección" + +#~ msgid "Very Low" +#~ msgstr "Muy Bajo" + +#~ msgid "Voice Detector" +#~ msgstr "Detector de Voz" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automáticamente aplicar este perfil siempre que el dispositivo actual " +#~ "esté conectado" + +#~ msgid "Volume" +#~ msgstr "Volumen" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cuadrado" + +#~ msgid "Saw" +#~ msgstr "Sierra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Silence" +#~ msgstr "Silencio" + +#~ msgid "Pink Noise" +#~ msgstr "Ruido Rosa" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruido Gaussiano" + +#~ msgid "Red Noise" +#~ msgstr "Ruido Rojo" + +#~ msgid "Blue Noise" +#~ msgstr "Ruido Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruido Violeta" + +#~ msgid "Window" +#~ msgstr "Ventana" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruido" + +#~ msgid "Subtract Noise" +#~ msgstr "Reducir Ruido" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Establecer el volumen y encender/apagar los efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Incluye un ecualizador con perfiles incluidos" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "reproduciendo" diff --git a/po/news/es_MX.po b/po/news/es_MX.po new file mode 100644 index 0000000..c535188 --- /dev/null +++ b/po/news/es_MX.po @@ -0,0 +1,2958 @@ +# Spanish (MX) translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Pulseeffects package. +# CCaroV , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Spanish (Mexico) \n" +"Language: es_MX\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de audio para aplicaciones PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects es una avanzada herramienta de manipulación de audio. Incluye un " +"ecualizador, limitador, compresor y herramienta de reverberación , solo por " +"mencionar algunos. Para complementar esto hay también incluido un analizador " +"de espectro." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects es el sucesor de PulseEffects. Easy Effects solo es compatible " +"con el servidor de audio de PipeWire. En su lugar, los usuarios de " +"PulseAudio deberían usar PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Debido a que EasyEffects usa por defecto el servicio de sonido PulseAudio, " +"este funcionará con la mayoría, sino que todas, las aplicaciones que use. " +"Todas las aplicaciones son mostradas en la ventana principal donde pueden " +"ser habilitadas individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Además de manipular el sonido de salida, EasyEffects puede aplicar efectos a " +"dispositivos de entrada, como micrófonos. Esto es útil, por ejemplo, en la " +"grabación de audio, pero también funciona correctamente durante " +"conversaciones de voces." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Cuando EasyEffects esté activo este convenientemente recordará la " +"configuración usada en la última sesión. También es posible guardar la " +"configuración actual como un perfil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "La página principal que muestra dos aplicaciones de salida de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "La página del potenciador de graves que muestra los controles de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "La página de convolver que muestra los controles de audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Características:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Corrección de errores:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Otras notas:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" +"Se mejoró la compatibilidad con versiones recientes de PipeWire. Más " +"información en" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" +"El menú de ajustes preestablecidos ahora pide confirmación antes de guardar/" +"eliminar un archivo preestablecido." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "Actualización de traducciones." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" +"Se cometió un pequeño error en la última versión. Esta nueva versión asegura " +"que todos los involucrados tengan la rama correcta" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" +"La función del ecualizador \"ordenar bandas\" ahora ordena las bandas en " +"GSettings, por tanto el resultado puede ser guardado en los perfiles." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "Pequeñas mejoras a la cancelación de eco." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ecualizador, Compresor y Otros Efectos de Sonido" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Perfiles\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Ajustes" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Perfiles" + +#~ msgid "Global Bypass" +#~ msgstr "Bypass Global" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Paredes Vacías" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplicaciones" + +#~ msgid "Target" +#~ msgstr "Objetivo" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Máximo" + +#~ msgid "Momentary" +#~ msgstr "Momentáneo" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Corto Plazo" + +#~ msgid "Integrated" +#~ msgstr "Integrado" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Usar la Media Geométrica" + +#~ msgid "Reset History" +#~ msgstr "Restablecer Historial" + +#~ msgid "Relative" +#~ msgstr "Reativo" + +#~ msgid "Range" +#~ msgstr "Rango" + +#~ msgid "Loudness" +#~ msgstr "Loudness" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Ganancia de Entrada" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Ganancia de Entrada" + +#~ msgid "Output" +#~ msgstr "Salida" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Caudal de Salida" + +#~ msgid "Reset" +#~ msgstr "Restablecer" + +#~ msgid "Name" +#~ msgstr "Nombre" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Borrar este perfil" + +#~ msgid "Listen" +#~ msgstr "Escuchar" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mezclar Harmónicos" + +#~ msgid "3rd" +#~ msgstr "3era" + +#~ msgid "2nd" +#~ msgstr "2nda" + +#~ msgid "Amount" +#~ msgstr "Cantidad" + +#~ msgid "Harmonics" +#~ msgstr "Harmónicos" + +#~ msgid "Scope" +#~ msgstr "Alcance" + +#~ msgid "Floor" +#~ msgstr "Fondo" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Fondo" + +#~ msgid "Link" +#~ msgstr "Acoplar" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Aplicaciones" + +#~ msgid "Compressor" +#~ msgstr "Compresor" + +#~ msgid "Mode" +#~ msgstr "Modo" + +#~ msgid "Downward" +#~ msgstr "Hacia Abajo" + +#~ msgid "Upward" +#~ msgstr "Hacia Arriba" + +#~ msgid "Compression Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Cantidad" + +#~ msgid "Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Tiempo Real" + +#~ msgid "Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Límite" + +#~ msgid "Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Tiempo Real" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Límite" + +#~ msgid "Ratio" +#~ msgstr "Radio" + +#~ msgid "Knee" +#~ msgstr "Codo" + +#~ msgid "Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Sidechain" +#~ msgstr "Cadena Lateral" + +#~ msgid "Peak" +#~ msgstr "Pico" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Cadena Lateral" + +#~ msgid "Source" +#~ msgstr "Fuente" + +#~ msgid "Middle" +#~ msgstr "Medio" + +#~ msgid "Side" +#~ msgstr "Lado" + +#~ msgid "Left" +#~ msgstr "Izquierda" + +#~ msgid "Right" +#~ msgstr "Derecha" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Cadena Lateral" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Feed-forward" +#~ msgstr "Adelantar" + +#~ msgid "Feed-back" +#~ msgstr "Realimentar" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Efectos de Entrada" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Reactivity" +#~ msgstr "Reactividad" + +#~ msgid "Lookahead" +#~ msgstr "Atenuación" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Pase Alto" + +#~ msgid "Frequency" +#~ msgstr "Frecuencia" + +#~ msgid "Off" +#~ msgstr "Apagdo" + +#, fuzzy +#~ msgid "12 dB/oct" +#~ msgstr "12dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "24 dB/oct" +#~ msgstr "24dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "36 dB/oct" +#~ msgstr "36dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Filtro de Pase Alto" + +#~ msgid "Gain" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Pendiente" + +#~ msgid "Curve" +#~ msgstr "Curva" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Canales" + +#~ msgid "R" +#~ msgstr "R" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Dividir Canales" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Respuesta de Impulse" + +#~ msgid "Stereo Width" +#~ msgstr "Amplitud Estéreo" + +#~ msgid "Spectrum" +#~ msgstr "Espectro" + +#, fuzzy +#~ msgid "Log Scale" +#~ msgstr "Escala" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Ganancia Automática" + +#~ msgid "Rate" +#~ msgstr "Tasa" + +#~ msgid "Samples" +#~ msgstr "Muestras" + +#~ msgid "Duration" +#~ msgstr "Duración" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Respuesta de Impulse" + +#~ msgid "Import Impulse" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Default" +#~ msgstr "Predeterminado" + +#~ msgid "Cutoff" +#~ msgstr "Umbral" + +#~ msgid "Feed" +#~ msgstr "Alimentar" + +#~ msgid "Bypass" +#~ msgstr "Bypass" + +#~ msgid "Mute" +#~ msgstr "Silenciar" + +#~ msgid "Detection" +#~ msgstr "Detección" + +#~ msgid "Wide" +#~ msgstr "Ancho" + +#~ msgid "Split" +#~ msgstr "Dividir" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Dividir" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Pico" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Nivel" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Pico Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frecuencia" + +#~ msgid "Laxity" +#~ msgstr "Relajamiento" + +#~ msgid "Detected" +#~ msgstr "Detectado" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Reducción" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filtro" + +#~ msgid "Bands" +#~ msgstr "Bandas" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "Split Channels" +#~ msgstr "Dividir Canales" + +#~ msgid "Flat Response" +#~ msgstr "Respuesta Plana" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calcular Frecuencias" + +#~ msgid "Bell" +#~ msgstr "Timbre" + +#~ msgid "High Pass" +#~ msgstr "Pase Alto" + +#~ msgid "High Shelf" +#~ msgstr "Estante Alto" + +#~ msgid "Low Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Low Shelf" +#~ msgstr "Estante Bajo" + +#~ msgid "Notch" +#~ msgstr "Muesca" + +#~ msgid "Resonance" +#~ msgstr "Resonancia" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Tipo" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Modo" + +#~ msgid "Slope" +#~ msgstr "Pendiente" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendiente" + +#~ msgid "Width" +#~ msgstr "Anchura" + +#~ msgid "Quality" +#~ msgstr "Calidad" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Borrar este perfil" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Paso Bajo" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Paso Bajo" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Paso Bajo" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Pase Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Pase Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Pase Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Paso de Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Paso de Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Paso de Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rechazo de Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rechazo de Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rechazo de Banda" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#~ msgid "Gate" +#~ msgstr "Puerta de Ruido" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Tiempo Real" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Integrado" + +#~ msgid "Gating" +#~ msgstr "Puerta" + +#~ msgid "Oversampling" +#~ msgstr "Sobre Muestreo" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Ancho" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Ancho" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Ancho de Linea" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Ancho de Linea" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Mesa Sinusoidal" + +#~ msgid "None" +#~ msgstr "Ninguno" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Stereo Link" +#~ msgstr "Acoplamiento Estéreo" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Ganancia Automática" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Derecha" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Salida" + +#~ msgid "Ceiling" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Calcular Frecuencias" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Calcular Frecuencias" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Ganancia de Entrada" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Curva" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Max Reduction" +#~ msgstr "Reducción" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Low Band" +#~ msgstr "Banda Baja" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Reverberación" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Tasa de Muestreo por Defecto" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Ganancia Máxima" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Profundidad Predeterminda" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Efectos de Salida" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Efectos de Entrada" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Módulos" + +#~ msgid "Clients" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Señal de Prueba" + +#~ msgid "State" +#~ msgstr "Estado" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Habilitar" + +#~ msgid "Channels" +#~ msgstr "Canales" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Canales" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Mesa Sinusoidal" + +#~ msgid "White Noise" +#~ msgstr "Ruido Blanco" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Estante Alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidad" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formato" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Frescura" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Clip Suave" + +#~ msgid "Cents" +#~ msgstr "Acentos" + +#~ msgid "Semitones" +#~ msgstr "Semitonos" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Servidor" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Procesar Todas las Salidas" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Procesar Todas las Entradas" + +#~ msgid "Use Dark Theme" +#~ msgstr "Usar Tema Oscuro" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Espectro" + +#~ msgid "Bars" +#~ msgstr "Barras" + +#~ msgid "Lines" +#~ msgstr "Lineas" + +#~ msgid "Points" +#~ msgstr "Puntos" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Line Width" +#~ msgstr "Ancho de Linea" + +#~ msgid "Fill" +#~ msgstr "Rellenar" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Máximo" + +#~ msgid "Maximum" +#~ msgstr "Máximo" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Guardar esta configuración a este perfil" + +#~ msgid "Remove this preset file" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Crear Perfil" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importar Perfiles" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#~ msgid "High Frequency Damping" +#~ msgstr "Amortiguación de Alta Frecuencia" + +#~ msgid "Room Size" +#~ msgstr "Tamaño de la Habitación" + +#~ msgid "Small" +#~ msgstr "Pequeña" + +#~ msgid "Medium" +#~ msgstr "Mediana" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Túnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/Liso" + +#~ msgid "Experimental" +#~ msgstr "Experimental" + +#~ msgid "Diffusion" +#~ msgstr "Difusión" + +#~ msgid "Pre Delay" +#~ msgstr "Pre Retraso" + +#~ msgid "Decay Time" +#~ msgstr "Tiempo de Decaimiento" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantidad" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Nivel Objetivo" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantidad" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Nivel" + +#~ msgid "Bass Cut" +#~ msgstr "Corte de Bajos" + +#~ msgid "Treble Cut" +#~ msgstr "Corte de Sobreagudos" + +#~ msgid "Ambience" +#~ msgstr "Ambiente" + +#~ msgid "Empty Walls" +#~ msgstr "Paredes Vacías" + +#~ msgid "Room" +#~ msgstr "Habitación" + +#~ msgid "Large Empty Hall" +#~ msgstr "Habitación Vacía Grande" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Habitación Ocupada Grande" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Models" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Active Model" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Restablecer EasyEffects." + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Balance" + +#~ msgid "Softclip" +#~ msgstr "Clip Suave" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Clip Suave" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matriz Estéreo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Estéreo Predeterminado)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Estéreo hacia Medio Lado)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Medio Lado - Estéreo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (Canal Izquierdo Mono)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Canal Derecho Mono)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Suma Mono L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Intercambiar Canales)" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Base Estéreo" + +#~ msgid "Invert Phase" +#~ msgstr "Invertir Fase" + +#~ msgid "Side Level" +#~ msgstr "Nivel Lateral" + +#~ msgid "Side Balance" +#~ msgstr "Balance Lateral" + +#~ msgid "Middle Level" +#~ msgstr "Nivel Medio" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama Medio" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Balance" + +#~ msgid "Delay L/R" +#~ msgstr "Retraso L/R" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Retraso L/R" + +#~ msgid "Stereo Base" +#~ msgstr "Base Estéreo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fase Estéreo" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "Puerta" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Canales" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de Sonido para las aplicaciones de PulseAudio" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "Salir de EasyEffects. Útil cuando se está ejecutando en modo de servicio." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Cargar un perfil. Ejemplo: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Restablecer EasyEffects." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Bypass global, 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +#~ "estado" + +#~ msgid "Show available presets." +#~ msgstr "Mostrar perfiles disponibles." + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Import Impulse File" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Open" +#~ msgstr "Abrir" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Impulse Response" +#~ msgstr "Respuesta de Impulse" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "No se pudo encontrar el archivo Impulse" + +#, fuzzy +#~ msgid "Recorders" +#~ msgstr "Bordes" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "infinidad" + +#, fuzzy +#~ msgid "Import APO Preset File" +#~ msgstr "Importar Perfiles" + +#, fuzzy +#~ msgid "APO Presets" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Efectos de Salida" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Importar Perfiles" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Bass Enhancer" +#~ msgstr "Potenciado de Graves" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Loudness" + +#~ msgid "Convolver" +#~ msgstr "Convolver" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Cristalizador" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Retraso" + +#~ msgid "Echo Canceller" +#~ msgstr "Cancelador de Eco" + +#~ msgid "Equalizer" +#~ msgstr "Ecualizador" + +#~ msgid "Exciter" +#~ msgstr "Excitador" + +#~ msgid "Filter" +#~ msgstr "Filtro" + +#~ msgid "Limiter" +#~ msgstr "Limitador" + +#~ msgid "Maximizer" +#~ msgstr "Maximizador" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compresor Multibanda" + +#~ msgid "Multiband Gate" +#~ msgstr "Puerta Multibanda" + +#~ msgid "Pitch" +#~ msgstr "Tono" + +#~ msgid "Reverberation" +#~ msgstr "Reverberación" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Reducción de Ganancia" + +#~ msgid "Stereo Tools" +#~ msgstr "Herramientas Estéreo" + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Borrar este perfil" + +#~ msgid "Import Presets" +#~ msgstr "Importar Perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar Servicio al Iniciar Sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Lista Negra" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrar Micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "Faster" +#~ msgstr "Más Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar Formato" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Help" +#~ msgstr "Ayuda" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Color Personalizado" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Degradado" + +#~ msgid "Spectrum Color" +#~ msgstr "Color del Espectro" + +#~ msgid "Gradient Color" +#~ msgstr "Color del Degradado" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Exponent" +#~ msgstr "Exponente" + +#~ msgid "Sampling" +#~ msgstr "Muestreo" + +#~ msgid "Block Size" +#~ msgstr "Tamaño de Bloque" + +#~ msgid "Pipeline Input" +#~ msgstr "Caudal de Entrada" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Niceness" +#~ msgstr "Meticulosidad" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridad" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Priority" +#~ msgstr "Prioridad" + +# Resampler does not have an official translation +#~ msgid "Resampler" +#~ msgstr "Remuestreador" + +#~ msgid "Default Source" +#~ msgstr "Fuente Predeterminada" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Muestreo Predeterminado" + +#~ msgid "Channel Mapping" +#~ msgstr "Mapa de Canales" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +# Resamplers does not have an official translation +#~ msgid "Resamplers" +#~ msgstr "Remuestreadores" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silencio" + +#~ msgid "-23" +#~ msgstr "-23" + +#~ msgid "Weights" +#~ msgstr "Fuerza" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Atenuación" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Silenciado" + +#~ msgid "Distant Headphones" +#~ msgstr "Audífonos a Distancia" + +#~ msgid "Reset Equalizer" +#~ msgstr "Restablecer Ecualizador" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Dry" +#~ msgstr "Secar" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar Archivo de Respuesta Impulse" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione el Archivo de Respuesta Impulse" + +#~ msgid "Loudness Range" +#~ msgstr "Rango de Sonoridad" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Después" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Extendido" + +#~ msgid "Delay Agnostic" +#~ msgstr "Retraso Agnóstico" + +#~ msgid "Suppresion Level" +#~ msgstr "Nivel de Supresión" + +#~ msgid "Low" +#~ msgstr "Bajo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#~ msgid "Very High" +#~ msgstr "Muy Alto" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supresor de Ruido" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptado Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Arreglo Digital" + +#~ msgid "Gain Controller" +#~ msgstr "Regulador de Ganancia" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidad de Detección" + +#~ msgid "Very Low" +#~ msgstr "Muy Bajo" + +#~ msgid "Voice Detector" +#~ msgstr "Detector de Voz" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automáticamente aplicar este perfil siempre que el dispositivo actual " +#~ "esté conectado" + +#~ msgid "Volume" +#~ msgstr "Volumen" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cuadrado" + +#~ msgid "Saw" +#~ msgstr "Sierra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Silence" +#~ msgstr "Silencio" + +#~ msgid "Pink Noise" +#~ msgstr "Ruido Rosa" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruido Gaussiano" + +#~ msgid "Red Noise" +#~ msgstr "Ruido Rojo" + +#~ msgid "Blue Noise" +#~ msgstr "Ruido Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruido Violeta" + +#~ msgid "Window" +#~ msgstr "Ventana" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruido" + +#~ msgid "Subtract Noise" +#~ msgstr "Reducir Ruido" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Establecer el volumen y encender/apagar los efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Incluye un ecualizador con perfiles incluidos" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "reproduciendo" diff --git a/po/news/es_VE.po b/po/news/es_VE.po new file mode 100644 index 0000000..00a397b --- /dev/null +++ b/po/news/es_VE.po @@ -0,0 +1,2948 @@ +# Spanish (VE) translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Pulseeffects package. +# CCaroV , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Spanish (Venezuela) \n" +"Language: es_VE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +#, fuzzy +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de Sonido para las Aplicaciones de PulseAudio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects es una avanzada herramienta de manipulación de audio. Incluye un " +"ecualizador, limitador, compresor y herramienta de reverberación , solo por " +"mencionar algunos. Para complementar esto hay también incluido un analizador " +"de espectro." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Debido a que EasyEffects usa por defecto el servicio de sonido PulseAudio, " +"este funcionará con la mayoría, sino que todas, las aplicaciones que use. " +"Todas las aplicaciones son mostradas en la ventana principal donde pueden " +"ser habilitadas individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Además de manipular el sonido de salida, EasyEffects puede aplicar efectos a " +"dispositivos de entrada, como micrófonos. Esto es útil, por ejemplo, en la " +"grabación de audio, pero también funciona correctamente durante " +"conversaciones de voces." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Cuando EasyEffects esté activo este convenientemente recordará la " +"configuración usada en la última sesión. También es posible guardar la " +"configuración actual como un perfil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ecualizador, Compresor y Otros Efectos de Sonido" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limitador;compresor;reverberación;ecualizador;autovolumen;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Perfiles\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Ajustes" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Perfiles" + +#~ msgid "Global Bypass" +#~ msgstr "Bypass Global" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Paredes Vacías" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplicaciones" + +#~ msgid "Target" +#~ msgstr "Objetivo" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Máximo" + +#~ msgid "Momentary" +#~ msgstr "Momentáneo" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Corto Plazo" + +#~ msgid "Integrated" +#~ msgstr "Integrado" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Usar la Media Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Usar la Media Geométrica" + +#~ msgid "Reset History" +#~ msgstr "Restablecer Historial" + +#~ msgid "Relative" +#~ msgstr "Reativo" + +#~ msgid "Range" +#~ msgstr "Rango" + +#~ msgid "Loudness" +#~ msgstr "Loudness" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Ganancia de Entrada" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Ganancia de Entrada" + +#~ msgid "Output" +#~ msgstr "Salida" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Caudal de Salida" + +#~ msgid "Reset" +#~ msgstr "Restablecer" + +#~ msgid "Name" +#~ msgstr "Nombre" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Borrar este perfil" + +#~ msgid "Listen" +#~ msgstr "Escuchar" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mezclar Harmónicos" + +#~ msgid "3rd" +#~ msgstr "3era" + +#~ msgid "2nd" +#~ msgstr "2nda" + +#~ msgid "Amount" +#~ msgstr "Cantidad" + +#~ msgid "Harmonics" +#~ msgstr "Harmónicos" + +#~ msgid "Scope" +#~ msgstr "Alcance" + +#~ msgid "Floor" +#~ msgstr "Fondo" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Fondo" + +#~ msgid "Link" +#~ msgstr "Acoplar" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Aplicaciones" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Aplicaciones" + +#~ msgid "Compressor" +#~ msgstr "Compresor" + +#~ msgid "Mode" +#~ msgstr "Modo" + +#~ msgid "Downward" +#~ msgstr "Hacia Abajo" + +#~ msgid "Upward" +#~ msgstr "Hacia Arriba" + +#~ msgid "Compression Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Cantidad" + +#~ msgid "Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Tiempo Real" + +#~ msgid "Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Límite" + +#~ msgid "Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Tiempo Real" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Límite" + +#~ msgid "Ratio" +#~ msgstr "Radio" + +#~ msgid "Knee" +#~ msgstr "Codo" + +#~ msgid "Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Sidechain" +#~ msgstr "Cadena Lateral" + +#~ msgid "Peak" +#~ msgstr "Pico" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Cadena Lateral" + +#~ msgid "Source" +#~ msgstr "Fuente" + +#~ msgid "Middle" +#~ msgstr "Medio" + +#~ msgid "Side" +#~ msgstr "Lado" + +#~ msgid "Left" +#~ msgstr "Izquierda" + +#~ msgid "Right" +#~ msgstr "Derecha" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Cadena Lateral" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Feed-forward" +#~ msgstr "Adelantar" + +#~ msgid "Feed-back" +#~ msgstr "Realimentar" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Efectos de Entrada" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Reactivity" +#~ msgstr "Reactividad" + +#~ msgid "Lookahead" +#~ msgstr "Atenuación" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Pase Alto" + +#~ msgid "Frequency" +#~ msgstr "Frecuencia" + +#~ msgid "Off" +#~ msgstr "Apagdo" + +#, fuzzy +#~ msgid "12 dB/oct" +#~ msgstr "12dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "24 dB/oct" +#~ msgstr "24dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "36 dB/oct" +#~ msgstr "36dB/oct Paso Bajo" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Filtro de Pase Alto" + +#~ msgid "Gain" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Pendiente" + +#~ msgid "Curve" +#~ msgstr "Curva" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Canales" + +#~ msgid "R" +#~ msgstr "R" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Dividir Canales" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Respuesta de Impulse" + +#~ msgid "Stereo Width" +#~ msgstr "Amplitud Estéreo" + +#~ msgid "Spectrum" +#~ msgstr "Espectro" + +#, fuzzy +#~ msgid "Log Scale" +#~ msgstr "Escala" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Ganancia Automática" + +#~ msgid "Rate" +#~ msgstr "Tasa" + +#~ msgid "Samples" +#~ msgstr "Muestras" + +#~ msgid "Duration" +#~ msgstr "Duración" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Respuesta de Impulse" + +#~ msgid "Import Impulse" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Default" +#~ msgstr "Predeterminado" + +#~ msgid "Cutoff" +#~ msgstr "Umbral" + +#~ msgid "Feed" +#~ msgstr "Alimentar" + +#~ msgid "Bypass" +#~ msgstr "Bypass" + +#~ msgid "Mute" +#~ msgstr "Silenciar" + +#~ msgid "Detection" +#~ msgstr "Detección" + +#~ msgid "Wide" +#~ msgstr "Ancho" + +#~ msgid "Split" +#~ msgstr "Dividir" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Dividir" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Pico" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Nivel" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Pico Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frecuencia" + +#~ msgid "Laxity" +#~ msgstr "Relajamiento" + +#~ msgid "Detected" +#~ msgstr "Detectado" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Reducción" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filtro" + +#~ msgid "Bands" +#~ msgstr "Bandas" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "Split Channels" +#~ msgstr "Dividir Canales" + +#~ msgid "Flat Response" +#~ msgstr "Respuesta Plana" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calcular Frecuencias" + +#~ msgid "Bell" +#~ msgstr "Timbre" + +#~ msgid "High Pass" +#~ msgstr "Pase Alto" + +#~ msgid "High Shelf" +#~ msgstr "Estante Alto" + +#~ msgid "Low Pass" +#~ msgstr "Paso Bajo" + +#~ msgid "Low Shelf" +#~ msgstr "Estante Bajo" + +#~ msgid "Notch" +#~ msgstr "Muesca" + +#~ msgid "Resonance" +#~ msgstr "Resonancia" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Paso Bajo" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Tipo" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Modo" + +#~ msgid "Slope" +#~ msgstr "Pendiente" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendiente" + +#~ msgid "Width" +#~ msgstr "Anchura" + +#~ msgid "Quality" +#~ msgstr "Calidad" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Borrar este perfil" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Paso Bajo" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Paso Bajo" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Paso Bajo" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Pase Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Pase Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Pase Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Paso de Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Paso de Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Paso de Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rechazo de Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rechazo de Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rechazo de Banda" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#~ msgid "Gate" +#~ msgstr "Puerta de Ruido" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Tiempo Real" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Integrado" + +#~ msgid "Gating" +#~ msgstr "Puerta" + +#~ msgid "Oversampling" +#~ msgstr "Sobre Muestreo" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Ancho" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Ancho" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Ancho de Linea" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Ancho de Linea" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Mesa Sinusoidal" + +#~ msgid "None" +#~ msgstr "Ninguno" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Pre-amplificación" + +#~ msgid "Stereo Link" +#~ msgstr "Acoplamiento Estéreo" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Ganancia Automática" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Ganancia" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Derecha" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Tamaño del Marco" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Salida" + +#~ msgid "Ceiling" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Cadena Lateral" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Modo de Compresión" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Calcular Frecuencias" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de Pase Alto" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Calcular Frecuencias" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Ganancia de Entrada" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Curva" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Amplificación" + +#~ msgid "Max Reduction" +#~ msgstr "Reducción" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Low Band" +#~ msgstr "Banda Baja" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Límite" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Amplificación" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducción" + +#~ msgid "General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Reverberación" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Tasa de Muestreo por Defecto" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Ganancia Máxima" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Profundidad Predeterminda" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Efectos de Salida" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Efectos de Entrada" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Módulos" + +#~ msgid "Clients" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Señal de Prueba" + +#~ msgid "State" +#~ msgstr "Estado" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Habilitar" + +#~ msgid "Channels" +#~ msgstr "Canales" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Canales" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Mesa Sinusoidal" + +#~ msgid "White Noise" +#~ msgstr "Ruido Blanco" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Estante Alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidad" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formato" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Frescura" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Clip Suave" + +#~ msgid "Cents" +#~ msgstr "Acentos" + +#~ msgid "Semitones" +#~ msgstr "Semitonos" + +#~ msgid "Octaves" +#~ msgstr "Octavas" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Servidor" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Procesar Todas las Salidas" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Procesar Todas las Entradas" + +#~ msgid "Use Dark Theme" +#~ msgstr "Usar Tema Oscuro" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Espectro" + +#~ msgid "Bars" +#~ msgstr "Barras" + +#~ msgid "Lines" +#~ msgstr "Lineas" + +#~ msgid "Points" +#~ msgstr "Puntos" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Line Width" +#~ msgstr "Ancho de Linea" + +#~ msgid "Fill" +#~ msgstr "Rellenar" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frecuencia" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Máximo" + +#~ msgid "Maximum" +#~ msgstr "Máximo" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Guardar esta configuración a este perfil" + +#~ msgid "Remove this preset file" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Crear Perfil" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importar Perfiles" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#~ msgid "High Frequency Damping" +#~ msgstr "Amortiguación de Alta Frecuencia" + +#~ msgid "Room Size" +#~ msgstr "Tamaño de la Habitación" + +#~ msgid "Small" +#~ msgstr "Pequeña" + +#~ msgid "Medium" +#~ msgstr "Mediana" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Túnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/Liso" + +#~ msgid "Experimental" +#~ msgstr "Experimental" + +#~ msgid "Diffusion" +#~ msgstr "Difusión" + +#~ msgid "Pre Delay" +#~ msgstr "Pre Retraso" + +#~ msgid "Decay Time" +#~ msgstr "Tiempo de Decaimiento" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantidad" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Nivel Objetivo" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantidad" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Nivel" + +#~ msgid "Bass Cut" +#~ msgstr "Corte de Bajos" + +#~ msgid "Treble Cut" +#~ msgstr "Corte de Sobreagudos" + +#~ msgid "Ambience" +#~ msgstr "Ambiente" + +#~ msgid "Empty Walls" +#~ msgstr "Paredes Vacías" + +#~ msgid "Room" +#~ msgstr "Habitación" + +#~ msgid "Large Empty Hall" +#~ msgstr "Habitación Vacía Grande" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Habitación Ocupada Grande" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Models" +#~ msgstr "Modo" + +#, fuzzy +#~ msgid "Active Model" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Restablecer EasyEffects." + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Balance" + +#~ msgid "Softclip" +#~ msgstr "Clip Suave" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Clip Suave" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matriz Estéreo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Estéreo Predeterminado)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Estéreo hacia Medio Lado)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Medio Lado - Estéreo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (Canal Izquierdo Mono)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Canal Derecho Mono)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Suma Mono L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Intercambiar Canales)" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Base Estéreo" + +#~ msgid "Invert Phase" +#~ msgstr "Invertir Fase" + +#~ msgid "Side Level" +#~ msgstr "Nivel Lateral" + +#~ msgid "Side Balance" +#~ msgstr "Balance Lateral" + +#~ msgid "Middle Level" +#~ msgstr "Nivel Medio" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama Medio" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Balance" + +#~ msgid "Delay L/R" +#~ msgstr "Retraso L/R" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Retraso L/R" + +#~ msgid "Stereo Base" +#~ msgstr "Base Estéreo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fase Estéreo" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "Puerta" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Canales" + +#~ msgid "Output Presets: " +#~ msgstr "Perfiles de Dispositivos de Salida: " + +#~ msgid "Input Presets: " +#~ msgstr "Perfiles de Dispositivos de Entrada: " + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de Sonido para las aplicaciones de PulseAudio" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "Salir de EasyEffects. Útil cuando se está ejecutando en modo de servicio." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Cargar un perfil. Ejemplo: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Restablecer EasyEffects." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Bypass global, 1 para habilitar, 2 para deshabilitar y 3 para obtener el " +#~ "estado" + +#~ msgid "Show available presets." +#~ msgstr "Mostrar perfiles disponibles." + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Import Impulse File" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Open" +#~ msgstr "Abrir" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Impulse Response" +#~ msgstr "Respuesta de Impulse" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Importar Archivo Impulse" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "No se pudo encontrar el archivo Impulse" + +#, fuzzy +#~ msgid "Recorders" +#~ msgstr "Bordes" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "infinidad" + +#, fuzzy +#~ msgid "Import APO Preset File" +#~ msgstr "Importar Perfiles" + +#, fuzzy +#~ msgid "APO Presets" +#~ msgstr "Perfiles" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Borrar este perfil" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Efectos de Salida" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Importar Perfiles" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "Importar Archivo Impulse" + +#~ msgid "Bass Enhancer" +#~ msgstr "Potenciado de Graves" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Loudness" + +#~ msgid "Convolver" +#~ msgstr "Convolver" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Cristalizador" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Retraso" + +#~ msgid "Echo Canceller" +#~ msgstr "Cancelador de Eco" + +#~ msgid "Equalizer" +#~ msgstr "Ecualizador" + +#~ msgid "Exciter" +#~ msgstr "Excitador" + +#~ msgid "Filter" +#~ msgstr "Filtro" + +#~ msgid "Limiter" +#~ msgstr "Limitador" + +#~ msgid "Maximizer" +#~ msgstr "Maximizador" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compresor Multibanda" + +#~ msgid "Multiband Gate" +#~ msgstr "Puerta Multibanda" + +#~ msgid "Pitch" +#~ msgstr "Tono" + +#~ msgid "Reverberation" +#~ msgstr "Reverberación" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Reducción de Ganancia" + +#~ msgid "Stereo Tools" +#~ msgstr "Herramientas Estéreo" + +#~ msgid "Average" +#~ msgstr "Promedio" + +#~ msgid "Failed" +#~ msgstr "Fallido" + +#~ msgid "Use Default" +#~ msgstr "Usar Predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Borrar este perfil" + +#~ msgid "Import Presets" +#~ msgstr "Importar Perfiles" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar Servicio al Iniciar Sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agresivo" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Lista Negra" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrar Micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "Faster" +#~ msgstr "Más Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar Formato" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Help" +#~ msgstr "Ayuda" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Color Personalizado" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Degradado" + +#~ msgid "Spectrum Color" +#~ msgstr "Color del Espectro" + +#~ msgid "Gradient Color" +#~ msgstr "Color del Degradado" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Exponent" +#~ msgstr "Exponente" + +#~ msgid "Sampling" +#~ msgstr "Muestreo" + +#~ msgid "Block Size" +#~ msgstr "Tamaño de Bloque" + +#~ msgid "Pipeline Input" +#~ msgstr "Caudal de Entrada" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Niceness" +#~ msgstr "Meticulosidad" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridad" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Priority" +#~ msgstr "Prioridad" + +# Resampler does not have an official translation +#~ msgid "Resampler" +#~ msgstr "Remuestreador" + +#~ msgid "Default Source" +#~ msgstr "Fuente Predeterminada" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Muestreo Predeterminado" + +#~ msgid "Channel Mapping" +#~ msgstr "Mapa de Canales" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +# Resamplers does not have an official translation +#~ msgid "Resamplers" +#~ msgstr "Remuestreadores" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silencio" + +#~ msgid "-23" +#~ msgstr "-23" + +#~ msgid "Weights" +#~ msgstr "Fuerza" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Atenuación" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Silenciado" + +#~ msgid "Distant Headphones" +#~ msgstr "Audífonos a Distancia" + +#~ msgid "Reset Equalizer" +#~ msgstr "Restablecer Ecualizador" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Dry" +#~ msgstr "Secar" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar Archivo de Respuesta Impulse" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione el Archivo de Respuesta Impulse" + +#~ msgid "Loudness Range" +#~ msgstr "Rango de Sonoridad" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Después" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Extendido" + +#~ msgid "Delay Agnostic" +#~ msgstr "Retraso Agnóstico" + +#~ msgid "Suppresion Level" +#~ msgstr "Nivel de Supresión" + +#~ msgid "Low" +#~ msgstr "Bajo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#~ msgid "Very High" +#~ msgstr "Muy Alto" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supresor de Ruido" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptado Digital" + +#~ msgid "Fixed Digital" +#~ msgstr "Arreglo Digital" + +#~ msgid "Gain Controller" +#~ msgstr "Regulador de Ganancia" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidad de Detección" + +#~ msgid "Very Low" +#~ msgstr "Muy Bajo" + +#~ msgid "Voice Detector" +#~ msgstr "Detector de Voz" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automáticamente aplicar este perfil siempre que el dispositivo actual " +#~ "esté conectado" + +#~ msgid "Volume" +#~ msgstr "Volumen" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cuadrado" + +#~ msgid "Saw" +#~ msgstr "Sierra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Silence" +#~ msgstr "Silencio" + +#~ msgid "Pink Noise" +#~ msgstr "Ruido Rosa" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruido Gaussiano" + +#~ msgid "Red Noise" +#~ msgstr "Ruido Rojo" + +#~ msgid "Blue Noise" +#~ msgstr "Ruido Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruido Violeta" + +#~ msgid "Window" +#~ msgstr "Ventana" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruido" + +#~ msgid "Subtract Noise" +#~ msgstr "Reducir Ruido" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Establecer el volumen y encender/apagar los efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Incluye un ecualizador con perfiles incluidos" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "reproduciendo" diff --git a/po/news/eu.po b/po/news/eu.po new file mode 100644 index 0000000..065cf0a --- /dev/null +++ b/po/news/eu.po @@ -0,0 +1,945 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects-news package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects-news\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 14:20+0000\n" +"PO-Revision-Date: 2023-05-28 06:51+0000\n" +"Last-Translator: Asier Sarasua Garmendia \n" +"Language-Team: Basque \n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Audio-efektuak PipeWire aplikazioetarako" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:127 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:143 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:201 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:214 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:224 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:293 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +msgid "Features:" +msgstr "Eginbideak:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:71 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:98 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:175 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:216 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:238 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:283 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:295 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:318 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:385 +msgid "Bug fixes:" +msgstr "Akatsen konponketa:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:60 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:85 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:162 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:254 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:270 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:61 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:62 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:70 +msgid "Updated translations." +msgstr "Eguneratutako itzulpenak." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:72 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +msgid "Improved performance when resetting keys." +msgstr "Errendimendu hobetua gakoak berrezartzean." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:84 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:86 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:99 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:111 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:112 +msgid "The documentation has been updated." +msgstr "Dokumentazioa eguneratu da." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:113 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:114 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:115 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:116 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:128 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:129 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:130 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:176 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:177 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:178 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:215 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:217 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:225 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:226 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:227 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:228 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:239 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:255 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:256 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:271 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:284 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:285 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:286 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:294 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:296 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:297 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:298 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:315 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:316 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:317 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:319 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:320 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:332 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:333 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:334 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:335 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:336 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:337 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:362 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:363 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:382 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:383 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:384 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:386 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:400 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:401 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/fi.po b/po/news/fi.po new file mode 100644 index 0000000..b8a84e2 --- /dev/null +++ b/po/news/fi.po @@ -0,0 +1,977 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects-news package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects-news\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-06-25 11:38-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:70 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:141 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:199 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:215 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:228 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:238 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:307 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:319 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:367 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:384 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Features:" +msgstr "Ominaisuudet:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:60 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:72 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:85 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:112 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:149 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:297 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:309 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:332 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:352 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:386 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "Bug fixes:" +msgstr "Bugikorjaukset:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:61 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:62 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:74 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:99 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:150 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:176 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:284 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:63 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:71 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:73 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:75 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:84 +msgid "Updated translations." +msgstr "Päivitetty käännöksiä." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:86 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:98 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:100 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:111 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:113 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:125 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:126 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:127 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:128 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:129 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:130 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:142 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:143 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:148 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:243 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:175 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:200 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:201 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:216 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:217 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:239 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:240 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:241 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:242 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:270 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:283 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:285 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:293 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:294 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:295 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:296 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:298 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:308 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:310 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:311 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:312 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:320 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:333 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:334 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:335 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:336 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:337 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:347 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:348 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:349 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:350 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:351 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:374 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:375 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:376 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:377 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:385 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:387 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:400 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/fr_FR.po b/po/news/fr_FR.po new file mode 100644 index 0000000..ded47f9 --- /dev/null +++ b/po/news/fr_FR.po @@ -0,0 +1,3525 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-09-10 08:54+0000\n" +"Last-Translator: tachyglossues \n" +"Language-Team: French \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.0.1-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Effets audio pour les applications utilisant le serveur audio PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects est un outil avancé de manipulation audio. Il inclut, entre " +"autres, un égaliseur, un limiteur, un compresseur et _un effet de " +"réverbération. Pour compléter le tout, un analyseur de spectre est également " +"intégré." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects est le successeur de PulseEffects. Easy Effects ne prend en " +"charge que le serveur audio de PipeWire. Les utilisateurs de PulseAudio " +"doivent plutôt utiliser PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Comme Easy Effects utilise le serveur audio PipeWire par défaut, il " +"fonctionnera avec la plupart, sinon la totalité, des applications que vous " +"utilisez. Toutes les applications prises en charge sont présentées dans la " +"fenêtre principale, où chacune peut être activée individuellement." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Outre la manipulation de la sortie audio, Easy Effects est capable de " +"manipuler l’entrée audio (à partir d’un microphone par exemple). Cette " +"fonction est utile pour l’enregistrement audio et fonctionne bien pour les " +"appels vocaux." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Easy Effects se souvient également de la configuration utilisée lors de la " +"dernière session. Il est aussi possible de sauvegarder tous les paramètres " +"définis sous forme de profils." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "La page principale affichant deux applications en sortie audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "La page de l’amplificateur des basses affichant les commandes audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "La page du filtre Convolueur affichant les commandes audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Fonctionnalités :" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Corrections de bogues :" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" +"Correction d'un petit problème qui empêchait l'initialisation correcte du " +"seuil d'activité vocale de la réduction du bruit." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Autres notes :" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" +"Ajout d'un nouveau contrôle au greffon de réduction de bruit qui permet de " +"désactiver la détection de la voix." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" +"L'effet Filtre a été amélioré avec de nouveaux paramètres depuis qu'il a été " +"porté de Calf Studio à Linux Studio Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" +"La réduction du bruit par RNNoise a été améliorée avec l'ajout de contrôles " +"de relâchement et de seuils VAD." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" +"La réduction du bruit par RNNoise peut maintenant mélanger les signaux " +"originaux et débruités pour éviter que la sortie ne sonne trop \"sèche\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" +"Cette version est destinée à fonctionner avec des versions de Linux Studio " +"Plugins égales ou supérieures à \"1.2.10\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "EasyEffects peut maintenant être construit avec libc++." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" +"L'Expanseur de Linux Studio Plugins peut être utilisé dans Easy Effects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" +"Les bandes de l'égaliseur ont désormais un contrôle de gain supplémentaire " +"qui permet une saisie plus efficace des valeurs qui sont difficiles de " +"définir à l'échelle. Plus de détails dans le ticket 1383." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" +"Ajout de la possibilité de sélectionner et de charger plusieurs fichiers " +"dans les boîtes de dialogue d'ouverture des pré-réglages, les réponses " +"impulsionnelles du Convolueur et les modèles RNNoise." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" +"Correction du bouton Solo dans les paramètres de la bande de l'égaliseur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" +"Les dossiers Easy Effects sous /etc ont été supprimés et les pré-réglages " +"qui s'y trouvent ne seront plus chargés. Pour le moment, seuls les pré-" +"réglages locaux sous ~/.config/easyeffects sont automatiquement chargés dans " +"le menu des pré-réglages. À l'avenir, nous mettrons en place un nouveau " +"système d'installation, de gestion et d'importation des pré-réglages " +"communautaires." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" +"Une section \"Fonctionnalités expérimentales\" a été ajoutée à notre fenêtre " +"de préférences." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" +"La fenêtre native des greffons LSP peut être utilisée. C'est une " +"fonctionnalité expérimentale destinée uniquement aux utilisateurs confirmés. " +"Il faut donc s'attendre à quelques bugs." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" +"Les valeurs fractionnaires de demi-tons peuvent maintenant être utilisées " +"dans l'effet Hauteur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" +"La liste déroulante des périphériques d'entrée/sortie dans notre onglet " +"PipeWire est mise à jour lorsque le périphérique par défaut du système " +"change et que l'option 'Utiliser la sortie par défaut' est activée. Ceci " +"résout le ticket 1989." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" +"Un nouveau greffon Indicateur de niveau basé sur libebur128 a été ajouté." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" +"Le greffon Hauteur utilise maintenant la bibliothèque SoundTouch au lieu de " +"Rubberband. Il est à espérer que certains des crashs mystérieux qui se " +"produisaient avec Rubbernand ne se produiront plus." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" +"Compatibilité améliorée avec les versions récentes de PipeWire. Plus " +"d'informations à l'adresse suivante" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" +"Les filtres de l'égaliseur actif ne sont plus réglés sur le type Bell " +"lorsque le nombre de bandes change." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" +"Rabberband n'est plus une dépendance depuis qu'il a été remplacé par " +"SoundTouch." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" +"Le menu des préréglages demande maintenant une confirmation avant " +"d'enregistrer/supprimer un fichier de préréglage." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" +"La réinitialisation d'un greffon ne devrait plus rendre ses contrôles " +"inefficaces." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" +"Speex n'est plus incorrectement listé comme une dépendance de compilation " +"(speexdsp est toujours une dépendance de compilation)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" +"RNNoise n'est plus une dépendance automatique. Il est maintenant requis par " +"défaut, s'il n'est pas disponible, il doit être explicitement désactivé avec " +"-Denable-rnnoise=false" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "Traductions mises à jour." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" +"Une petite erreur a été commise dans la dernière version. Nous en faisons " +"une nouvelle pour nous assurer que les utilisateurs ont la bonne branche " +"dans le paquet" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" +"La fonction \"trier les bandes\" de l'égaliseur ordonne maintenant les " +"bandes sur GSettings, afin que le résultat puisse être sauvegardé dans les " +"préréglages." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" +"Amélioration de la performance lors de la réinitialisation des touches." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" +"Correction de la sélection du préréglage \"Grande Salle Vide\" dans l'effet " +"de réverbération." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" +"Correction de certains mauvais usages de l'API de PipeWire qui peuvent " +"potentiellement corriger certains bogues aléatoires rencontrés par certains " +"utilisateurs." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" +"Comme nous avons supprimé le code déprécié par GTK 4.10, la version minimale " +"de GTK a été augmentée." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" +"La fréquence de mise à jour du greffon du spectre a été améliorée. Des taux " +"d'échantillonnage différents devraient conduire à des fréquences de mise à " +"jour similaires visuellement." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" +"L'intervalle de mise à jour utilisé par les indicateurs de niveau et le " +"spectre peut être personnalisé par l'utilisateur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" +"La valeur du curseur de gain de la bande de l'égaliseur peut être mise à " +"jour par paliers plus importants. Le contrôle du grain fin est toujours " +"possible grâce aux touches haut/bas du clavier." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "Petites améliorations de l'annulateur d'écho." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" +"Les sondes de l'annulateur d'écho n'étaient pas liées à la carte son après " +"le passage à des instances de filtres multiples. Cela devrait être corrigé " +"maintenant." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" +"Il est désormais possible d'ajouter plus d'une instance de filtre au " +"pipeline d'effets." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"Un nouveau greffon Processeur vocal basé sur la bibliothèque Speex a été " +"ajouté. En plus de supprimer le bruit, il peut également détecter l'activité " +"vocale. C'est une alternative décente pour les cas où la bibliothèque " +"rnnoise ne fonctionne pas bien." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" +"Amélioration de la compatibilité avec les greffons Linux Studio (LSP) 1.2.3." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" +"Les préréglages GraphicEQ peuvent être importés dans l'effet Égaliseur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"Le nom de l'application a été changé en Easy Effects afin d'adhérer aux " +"conventions de nommage des directives de l'interface humaine de GNOME." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "La documentation a été mise à jour." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "Chargement automatique des préréglages amélioré." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" +"Le seuil de silence du Gain automatique peut maintenant être configuré par " +"l'utilisateur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" +"Les contrôles du niveau sec et humide ont été ajoutés à l'effet Outils " +"stéréo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" +"L'annulateur d'écho dispose désormais d'un contrôle de suppression du bruit " +"résiduel, également basé sur la bibliothèque Speex." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" +"Lorsque la souris survolait un graphique, la mauvaise valeur de la " +"coordonnée de l'axe x était affichée. Cette régression est corrigée." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"En raison de la nouvelle fonctionnalité d'instances multiples, le format du " +"préréglage a changé, mais l'ancien est toujours compatible pour être chargé. " +"De toute façon, prenez en considération que sauvegarder le préréglage actuel " +"l'écrira toujours dans le nouveau format." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"L'implémentation de Porte Multibande a été transférée de CALF vers Linux " +"Studio Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"La compatibilité du code du chargement automatique des préréglages a été " +"améliorée pour les périphériques bluez5." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "Des contrôles humides/secs ont été ajoutés pour certains greffons" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"L'interface d'effet n'est plus chargée lorsque le greffon lv2 correspondant " +"n'est pas installé sur le système. A sa place, un message d'état destiné à " +"l'utilisateur est affiché." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "La documentation a été mise à jour" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "Amélioration des messages de débogage" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Traductions mises à jour" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Améliorations des traductions" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Correction d'un bug où EasyEffects pouvait planter quand sa fenêtre était " +"fermée pendant qu'un effet était en train d'être appliqué." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" +"L'état de contournement peut être enregistré dans un fichier de préréglages. " +"La raison pour laquelle cela fonctionnait avant est expliquée en détail dans " +"le ticket 1039" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" +"Le code du chargement automatique des préréglages a été amélioré pour les " +"périphériques USB." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"Une boîte de dialogue est affichée à l'utilisateur lorsqu'un préréglage ne " +"se charge pas ou qu'un fichier de préréglage/d'impulsion ne parvient pas à " +"être importé." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"Le greffon Porte de la chaîne latérale de Linux Studio Plugins est " +"maintenant utilisé au lieu de celui de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"EasyEffects ne plantera plus quand le langage de l'utilisateur n'est pas " +"correctement configuré." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"Une solution alternative a été implémenté pour notre icône pour gérer le " +"manque de support du format SVG dans Qt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"Lorsque les effets sont désactivés pour une application, nous définissons " +"désormais ses métadonnées cibles comme étant nulles. Cela permettra à au " +"gestionnaire de session média (wireplumber) de déplacer correctement le flux " +"vers un autre périphérique." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"Une nouvelle option de configuration a été ajoutée. Elle permet à " +"EasyEffects d’ignorer les flux dont l’objectif est de surveiller les " +"périphériques de sortie. Cela aidera à corriger certains problèmes pour les " +"utilisateurs qui utilisent OBS." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "Le code qui affiche le format de l’échantillon de flux a été amélioré" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"La bibliothèque rnnoise est désormais facultative. Cela devrait aider les " +"mainteneurs de paquets à proposer un paquet pour Debian. Voir le ticket 1000 " +"pour plus d'informations." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"Nos journaux (logs) indiquent maintenant la ligne de code source où les " +"messages sont imprimés" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"La case \"activer les effets\" de notre fenêtre n’était pas mise à jour " +"lorsque des programmes tiers comme pavucontrol déplaçait le flux en dehors " +"de nos périphériques virtuels. Cela devrait être maintenant corrigé." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"Correction d’un crash qui pouvait se produire lorsque l’historique maximum " +"du gain automatique était modifié." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "Éviter les plantages lorsque pw-mididump est en cours d’exécution" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "L'interface du greffon Hauteur a été améliorée" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" +"L'icône de notre application est maintenant compatible avec les ordinateurs " +"de bureau qui utilisent QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"Notre liste de blocage utilisera la balise application.id si le flux la " +"définit" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Afin d'éviter les problèmes de défilement de la souris, les entrées de la " +"liste des applications affichées dans notre onglet Lecteurs/Enregistreurs " +"n'affichent plus d'échelle de volume. Vous trouverez plus de détails sur ce " +"problème et sa solution dans les tickets 1211 et 1427" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Lorsque aucune application n’est disponible pour l’affichage dans les " +"Lecteurs/Enregistreurs, un message sera affiché à l’utilisateur" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Nombreuses mises à jour des traductions" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"Correction d’un bug où EasyEffeects plantait lorsque le nombre de points " +"affichés dans le spectre était modifié pendant que le pipeline était actif " +"et que le widget du spectre était visible" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"La valeur de latence du pipeline affichée dans notre fenêtre peut être " +"incorrecte dans certaines situations. Cela a été corrigé." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" +"Un nouveau paramètre permet à l'utilisateur de sélectionner un délai " +"d'inactivité pour le pipeline. Lorsqu'aucun client n'est en train de jouer " +"ou d'enregistrer sur nos appareils, les filtres seront déconnectés une fois " +"le délai atteint. Ceci est fait pour s'assurer que nous ne gaspillons pas la " +"puissance du CPU en traitant le silence." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"Le greffon Gain automatique permet désormais à l'utilisateur de sélectionner " +"laquelle des trois intensités sonores est utilisée pour calculer la moyenne " +"géométrique." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"Le greffon Gain automatique permet désormais de définir l'historique maximal " +"et n'utilise plus le mode histogramme de libebur128. Cela devrait permettre " +"d'éviter les cas où l'intensité sonore intégrée est toujours bloquée à la " +"même valeur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"L'icone EasyEffect a été mise à jour afin d’être visible dans les bureaux QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"L'option de ligne de commande retournant l’état du contournement global " +"fonctionne à nouveau." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Le filtre Flux croisé devrait mieux gérer les changements de latence " +"dynamiques de PipeWire. Les sauts de volume ne devraient plus se produire " +"dans ces situations." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Correction d’un bug qui empêchait les microphones mono de fonctionner " +"correctement avec EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Prise en charge de la prochaine version de PipeWire 0.3.44" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Le filtre Gain automatique devrait mieux gérer les changements de latence " +"dynamiques de PipeWire. Les sauts de volume ne devraient plus se produire " +"dans ces situations." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Nous avons ajouté une option qui permet de réinitialiser le volume et l’état " +"muet de nos périphériques virtuels au démarrage d’EasyEffects. Cela devrait " +"aider dans les cas où nos périphériques sont mis en sourdine par le serveur " +"audio pour des raisons inconnues." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Meilleure prise en charge de la mise en veille de l’ordinateur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Correction d’un bogue où la tentative de créer un profil de chargement " +"automatique sans avoir de préréglages entraînait le plantage de " +"l’application." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"Correction d’un bug où le réglage de la qualité d’une bande de l’égaliseur " +"sur zéro entraînait un plantage de l’application." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita est utilisé pour créer certaines parties de notre fenêtre et pour " +"gérer le passage entre les thèmes sombres et clairs." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" +"Le menu des paramètres a été redessiné en utilisant les widgets LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"La fonction d’importation des préréglages de l’égaliseur APO a été améliorée " +"pour appliquer non seulement le filtre Bell, mais aussi d’autres filtres " +"pris en charge (pour l'instant, seul le filtre Passe-bande n'est pas " +"disponibles dans le greffon LSP)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"La fonction Réinitialiser toutes les options de notre menu devrait " +"fonctionner dans Flatpak maintenant." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Nous avons une nouvelle option qui permet à l'utilisateur de désactiver le " +"masquage automatique de nos menus. Cela peut aider à contourner certains " +"bogues que les menus Popover ont actuellement sur gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Analyse syntaxique plus robuste pour importer les préréglages APO " +"enregistrés avec une virgule comme séparateur des milliers dans la bande de " +"fréquence centrale." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"La bibliothèque fmt est une nouvelle dépendance, du moins tant que les " +"compilateurs c++ n’implémentent pas ses fonctionnalités. Cela devrait " +"arriver dans les prochaines années." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM et GLIBMM ne sont plus des dépendances. Nous utilisons maintenant gtk4 " +"directement." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Il est maintenant possible de combiner des réponses d’impulsions dans " +"l’interface du Convolueur. Un nouveau fichier d’impulsions est généré et il " +"devrait être visible dans la liste des impulsions." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"Amélioration des dessins de l’axe des X dans nos graphiques. Maintenant le " +"nombre d’étiquettes est ajusté dynamiquement en fonction de la largeur de " +"notre fenêtre." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"La documentation a été mise à jour en tenant compte des nouvelles " +"fonctionnalités d’EasyEffects. Les anciennes références à PulseEffects ont " +"été supprimées. Le bouton de la documentation a été ajouté dans le menu." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Lorsqu’un bouton rotatif est rempli avec une valeur hors limites, il est " +"maintenant mis à jour avec la valeur la plus basse/haute plutôt que de " +"revenir à la valeur précédente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"La fenêtre de l’application se souvient désormais de l’état maximisé et le " +"rétablit lors de la prochaine ouverture." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "La bibliothèque tbb est une nouvelle dépendance" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Les greffons Limiteur et Compresseur multibande peuvent désormais utiliser " +"une chaîne latérale optionnel externe." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"Le greffon Gain automatique permet désormais à l’utilisateur de sélectionner " +"la Sonie utilisée comme référence pour la correction du volume." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" +"La fonctionnalité d'importation de profil APO du greffon Égaliseur analyse " +"désormais le paramètre \"Pré-Amplification\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" +"L'option de Volume Cubique peut être activée dans les Paramètres Généraux." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" +"Le greffon Spectre était censé entrer en mode passif lorsqu'il n'était pas " +"visible, mais cela ne se produisait que lorsque notre fenêtre était fermée." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "Amélioration du support aux technologies d'assistance." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" +"Les sondes utilisées dans certains filtres comme le compresseur et le " +"limiteur n'étaient pas reliées après avoir changé l'ordre des greffons dans " +"le pipeline. Cela devrait fonctionner maintenant." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" +"Les flux PipeWire de monitoring sont maintenant exclus et retirés de la " +"liste d’applications." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" +"Les crashs comme celui signalé par le ticket 1172 sont vraisemblablement " +"corrigés." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "Une situation entraînant un plantage du Spectre a été évitée." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"Pavucontrol n’est plus ajouté aux liste d’applications en entrée sur les " +"systèmes ayant une autre langue que l’anglais." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"La compatibilité avec WirePlumber a été améliorée. C'est nécessaire pour les " +"systèmes ayant décidé de l’utiliser à la place du gestionnaire de session " +"PipeWire intégré. Plus d'informations dans le ticket 1144." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"Lors de l'ajout d'un profil de chargement automatique pour un appareil déjà " +"dans la liste, son préréglage cible sera mis à jour. De cette façon, nous " +"pouvons changer le préréglage du profil sans avoir à le supprimer et à le " +"recréer." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"L'implémentation de la prise en charge du chargement automatique des " +"préréglages a encore été repensée. Elle devrait fonctionner sur plus de " +"matériel maintenant. Pour plus d’informations, consultez le ticket 1051." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"Si le limiteur ou le maximiseur sont placés à la dernière position de la " +"liste des greffons, les nouveaux greffons sont ajoutés à l’avant-dernière " +"position afin d’éviter des dommages matériels dû à un niveau de sortie " +"potentiellement élevé." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" +"En retirant une application de la liste de blocage, son état d’activation " +"précédent est restauré." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"Parfois, lors de la suppression de modèles importés du greffon de réduction " +"du bruit, le modèle actuellement utilisé n’était pas correctement mis à " +"jour. Cela devrait être corrigé maintenant." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" +"Lorsque vous modifiez des fichiers de préréglages dans un éditeur externe, " +"les entrées dupliquées n’apparaîtront pas dans notre menu de préréglages." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" +"La liste de blocage est maintenant correctement définie lorsque l'on passe " +"d'un préréglage à l'autre." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" +"L’état du bouton de contournement global est maintenant correctement mis à " +"jour lors du changement de pile d'un greffon." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" +"Les icônes manquantes dans le système ne devraient plus être affichés dans " +"l'interface d'information de l'application (si l'icône d'une application " +"n'est pas affichée même si vous êtes sûr(e) de l'avoir installée, veuillez " +"ouvrir un ticket)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"Certaines icônes qui n’apparaissaient pas dans le DE Plasma avec le thème " +"d’icônes Breeze devraient maintenant apparaître." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Mise à jour de la traduction chinoise." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Mise à jour de la traduction italienne." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "Ajout du support pour le paramètre du compresseur Boost Amount" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"Le greffon de compresseur multibande utilise maintenant le greffon de " +"compresseur multibande stéréo de Linux Studio Plugins au lieu de celui de " +"Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"Le greffon limiteur est désormais celui de Linux Studio Plugins au lieu de " +"celui de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"Les filtres LV2 sont désormais créés dans le graphe PipeWire uniquement " +"lorsqu’ils sont chargés pour la première fois. Une fois chargés, ils restent " +"connectés jusqu’à l’arrêt d’EasyEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" +"Le taux d’échantillonnage de l’annulateur d’écho est maintenant correctement " +"réglé." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" +"Le paramètre de seuil du greffon Déesseur est maintenant enregistré dans le " +"fichier de préréglage." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" +"Division de bandes améliorée pour le cristallisateur avec de nouvelles " +"valeurs d’intensité par défaut." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" +"Selon les valeurs du gain d’entrée ou du gain de sortie, les barres de " +"niveau correspondantes ne pouvaient pas être alignées." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" +"Lorsque vous ajoutez d’autres bandes à l’égaliseur, elles sont réglées sur " +"Bell au lieu de Off." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" +"Le chargement des préréglages de l’Égaliseur APO fonctionne désormais " +"correctement dans les langues autres que C." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" +"Amélioration de la gestion des liens entre les nœuds de filtre de port dans " +"PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" +"L'amplification du signal du plugin Cristallisateur était trop élevée avant. " +"Elle devrait se situer dans des niveaux plus raisonnables maintenant." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" +"Amélioration du ré-échantillonneur utilisé dans les greffons qui en " +"nécessitent un (comme le greffon rnnoise)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" +"La configuration de plusieurs préréglages auto-chargeant devrait être " +"correcte maintenant" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" +"Les fenêtres transitoires sont désormais correctement définies pour " +"certaines boîtes de dialogue des greffons" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"Le menu des réponses impulsionnelles du convolueur a été amélioré pour " +"résoudre un problème où les fichiers impulsionnels n’étaient pas chargés " +"lorsqu’un seul était disponible dans le menu, voir le ticket 1011" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" +"Correction d’un bogue qui pouvait empêcher l’initialisation correcte du " +"greffon Hauteur" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" +"L'avertissement de saturation ne doit plus déplacer les widgets voisins" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "Correction des paramètres régionaux dans quelques widgets" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "Correction d’un mauvais alignement dans quelques widgets" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" +"Le greffon Sonie est utilisé à nouveau pour les raisons décrites dans le " +"ticket 820. Cela signifie qu’il s’agit à nouveau d’une dépendance " +"facultative." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" +"Correction d’un défaut de segmentation qui se produisait lorsque les " +"dépendances facultatives n’étaient pas installées" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "Interface de l’égaliseur améliorée." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" +"Nous utilisons maintenant un compresseur LSP à chaîne latérale qui permet à " +"l'utilisateur de sélectionner une source externe comme entrée de la chaîne " +"latérale." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "Nous supportons maintenant le mode Boosting du compresseur LSP." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" +"Quand split-channels est activé dans l’égaliseur, le préréglage APO importé " +"sera appliqué seulement au canal visualisé dans la fenêtre. Cela permet " +"d’importer des préréglage différents pour chaque canal au lieu de régler les " +"mêmes valeurs pour les deux." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" +"Correction de certaines erreurs de segmentation qui pouvaient survenir lors " +"de la création d’un profil de chargement automatique prédéfini ou de la " +"suppression de préréglages" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" +"C'est l’une des plus grosses versions que j'ai jamais faite. La quantité de " +"changements est si importante qu’il est difficile de parler de tout ici." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" +"Voici les plus importantes d’entre elles. Les personnes intéressées par le " +"voyage qui nous a mené jusqu’ici peuvent analyser les tickets 904 et 874." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" +"L'application et son dépôt ont été renommés de PulseEffects à EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 a été remplacé par gtkmm4" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Gstreamer a été remplacé par des filtres natifs PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" +"De nombreuses fonctionnalités ont été ré-implémentées à partir de zéro. Le " +"chargement automatique des préréglages en est un exemple. Un autre " +"changement remarquable se trouve dans le menu de sélection des greffons. " +"Désormais, l’utilisateur peut afficher dans la fenêtre uniquement les " +"greffons qu’il souhaite utiliser." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" +"Boost n’est plus une dépendance. Le prix à payer pour cela a été un petit " +"changement dans la structure de nos préréglages. Avec un peu de patience, il " +"est possible d’éditer les préréglages PulseEffects avec un éditeur de texte " +"et de les faire fonctionner dans EasyEffects. Quelqu’un proposera peut-être " +"un script pour cela prochainement." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"De nouvelles bibliothèques sont utilisées et certaines d’entre elles, qui " +"étaient auparavant facultatives, sont désormais obligatoires" + +#~ msgid "This release adds the following features:" +#~ msgstr "Cette version ajoute les fonctionnalités suivantes :" + +#~ msgid "manager" +#~ msgstr "gestionnaire" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr "" +#~ "les périphériques puits. Cela aidera à résoudre certains des problèmes " +#~ "rencontrés par nos utilisateurs lors de l’utilisation d’OBS." + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "un paquet Debian. Voir le problème n°1000 pour plus d’informations." + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Cette version corrige les bugs suivants :" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "déplaçait le flux loin de nos appareils virtuels. Cela devrait être " +#~ "maintenant corrigé." + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "Les onglets n’affichent plus d’échelle de volume. Plus de détails sur le " +#~ "problème et sa solution peuvent être trouvés sur la page #1211" + +#~ msgid "and #1427" +#~ msgstr "et #1427" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "notre pipeline était active et le widget spectre était visible" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Il y a une nouvelle option permettant à l’utilisateur de sélectionner un " +#~ "délai d’inactivité pour les effets audio. Quand aucun client n’émet de son" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "ou n’enregistre depuis l’un des appareils, les filtres sont déconnectés " +#~ "une fois le délai atteint. Cela permet d’assurer" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "de ne pas gâcher l’utilisation du CPU sur du silence." + +#~ msgid "mean." +#~ msgstr "moyenne géométrique." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Cela devrait permettre d’éviter les cas où le loudness `Integrated` reste " +#~ "toujours coincé à la même valeur." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Cette version corrige les bugs suivants :" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Cette version ajoute les fonctionnalités suivantes :" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "Le gestionnaire de sessions PipeWire fourni. Plus d’informations dans " +#~ "l’issue [1144](" + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Les icônes manquantes sur le système ne doivent pas être affichées dans " +#~ "l’interface d’information de l’application" + +#~ msgid "a look at and" +#~ msgstr "regarder et" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Égaliseur, Compresseur et autres effets audio" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limiter;compressor;reverberation;equalizer;autovolume;" + +#~ msgid "\"Presets\"" +#~ msgstr "Préréglage" + +#~ msgid "Enable/disable this application" +#~ msgstr "Autoriser/Interdire cette application" + +#~ msgid "Enable" +#~ msgstr "Activer" + +#~ msgid "Excluded App List: Add/remove this application" +#~ msgstr "Liste des applications exclues : ajouter/retirer cette application" + +#~ msgid "Exclude" +#~ msgstr "Exclure" + +#~ msgid "Mute Application" +#~ msgstr "Couper le son de l’application" + +#~ msgid "Change the volume of this application" +#~ msgstr "Modifier le volume de cette application" + +#~ msgid "Application Volume" +#~ msgstr "Volume de l’application" + +#~ msgid "_Preferences" +#~ msgstr "_Préférences" + +#~ msgid "_Manual" +#~ msgstr "_Manuel" + +#~ msgid "_Shortcuts" +#~ msgstr "_Raccourcis" + +#~ msgid "_Reset Settings" +#~ msgstr "_Réinitialiser les paramètres" + +#~ msgid "_About EasyEffects" +#~ msgstr "_À propos de EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Préréglage" + +#~ msgid "Presets Menu" +#~ msgstr "Menu des préréglages" + +#~ msgid "Enable/disable the global bypass" +#~ msgstr "Activer/désactiver le contournement global" + +#~ msgid "Global Bypass" +#~ msgstr "Contournement global" + +#~ msgid "Primary Menu" +#~ msgstr "Menu principal" + +#~ msgid "EasyEffects Window" +#~ msgstr "Fenêtre de EasyEffects" + +#~ msgid "Applications List" +#~ msgstr "Liste des applications" + +#~ msgid "Empty List" +#~ msgstr "Liste vide" + +#~ msgid "No Audio Application Available" +#~ msgstr "Aucune application audio disponible" + +#~ msgid "Target" +#~ msgstr "Cible" + +#~ msgid "Maximum History" +#~ msgstr "Historique maximum" + +#~ msgid "Reference" +#~ msgstr "Référence" + +#~ msgid "Momentary" +#~ msgstr "Temporaire" + +#~ msgid "Short-Term" +#~ msgstr "Court-terme" + +#~ msgid "Integrated" +#~ msgstr "Intégré" + +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Moyenne géométrique (MSI)" + +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Moyenne géométrique (MS)" + +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Moyenne géométrique (MI)" + +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Moyenne géométrique (SI)" + +#~ msgid "Reset History" +#~ msgstr "Réinitialiser l’historique" + +#~ msgid "Relative" +#~ msgstr "Relatif" + +#~ msgid "Range" +#~ msgstr "Intervalle" + +#~ msgid "Loudness" +#~ msgstr "Sonie" + +#~ msgid "Output Gain" +#~ msgstr "Gain de sortie" + +#~ msgid "Input" +#~ msgstr "Entrée" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Gain d’entrée du plugin" + +#~ msgid "Output" +#~ msgstr "Sortie" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Gain de sortie du plugin" + +#~ msgid "Reset" +#~ msgstr "Réinitialiser" + +#~ msgid "Using" +#~ msgstr "Utilise" + +#~ msgid "Device" +#~ msgstr "Périphérique" + +#~ msgid "Name" +#~ msgstr "Nom" + +#~ msgid "Profile" +#~ msgstr "Profil" + +#~ msgid "Preset" +#~ msgstr "Préréglage" + +#~ msgid "Remove this autoload preset" +#~ msgstr "Supprimer ce préréglage auto-chargeant" + +#~ msgid "Listen" +#~ msgstr "Écouter" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mélanger les harmoniques" + +#~ msgid "3rd" +#~ msgstr "3ème" + +#~ msgid "2nd" +#~ msgstr "2ème" + +#~ msgid "Amount" +#~ msgstr "Quantité" + +#~ msgid "Harmonics" +#~ msgstr "Harmoniques" + +#, fuzzy +#~ msgid "Scope" +#~ msgstr "Seuil" + +#~ msgid "Floor" +#~ msgstr "Limite inférieure" + +#~ msgid "Floor Value" +#~ msgstr "Valeur plancher" + +#~ msgid "Link" +#~ msgstr "Lien" + +#~ msgid "Application Name" +#~ msgstr "Nom de l’application" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "Ajouter aux applications exclues" + +#~ msgid "Excluded Applications List" +#~ msgstr "Liste des applications exclues" + +#~ msgid "Show Excluded Applications" +#~ msgstr "Afficher les applications exclues" + +#~ msgid "Compressor" +#~ msgstr "Compresseur" + +#~ msgid "Mode" +#~ msgstr "Mode" + +#~ msgid "Downward" +#~ msgstr "Descendant" + +#~ msgid "Upward" +#~ msgstr "Ascendant" + +#~ msgid "Boosting" +#~ msgstr "Renforcement" + +#~ msgid "Compression Mode" +#~ msgstr "Mode de compression" + +#~ msgid "Boost Threshold" +#~ msgstr "Seuil de renforcement" + +#~ msgid "Boost Amount" +#~ msgstr "Quantité de renforcement" + +#~ msgid "Attack" +#~ msgstr "Attaque" + +#~ msgid "Time" +#~ msgstr "Temps" + +#~ msgid "Threshold" +#~ msgstr "Seuil" + +#~ msgid "Attack Time" +#~ msgstr "Temps d’attaque" + +#~ msgid "Attack Threshold" +#~ msgstr "Seuil d’attaque" + +#~ msgid "Release" +#~ msgstr "Relâ­che­ment" + +#~ msgid "Release Time" +#~ msgstr "Temps de relâ­che­ment" + +#~ msgid "Release Threshold" +#~ msgstr "Seuil de relâ­che­ment" + +#~ msgid "Ratio" +#~ msgstr "Ratio" + +#~ msgid "Knee" +#~ msgstr "Genou" + +#~ msgid "Makeup" +#~ msgstr "Compensation de gain" + +#~ msgid "Sidechain" +#~ msgstr "Chaîne latérale" + +#~ msgid "Peak" +#~ msgstr "Crête" + +#, fuzzy +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Passe-bas" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "Sidechain Mode" +#~ msgstr "Mode chaîne latérale" + +#~ msgid "Source" +#~ msgstr "Source" + +#~ msgid "Middle" +#~ msgstr "Centrale" + +#~ msgid "Side" +#~ msgstr "Latérale" + +#~ msgid "Left" +#~ msgstr "Gauche" + +#~ msgid "Right" +#~ msgstr "Droite" + +#~ msgid "Sidechain Source" +#~ msgstr "Source de la chaîne latérale" + +#~ msgid "Type" +#~ msgstr "Type" + +#, fuzzy +#~ msgid "Feed-forward" +#~ msgstr "Feed-forward" + +#, fuzzy +#~ msgid "Feed-back" +#~ msgstr "Feed-back" + +#~ msgid "External" +#~ msgstr "Externe" + +#~ msgid "Sidechain Type" +#~ msgstr "Type de chaîne latérale" + +#~ msgid "Input Device" +#~ msgstr "Périphérique d’entrée" + +#~ msgid "PreAmplification" +#~ msgstr "Préamplification" + +#~ msgid "Reactivity" +#~ msgstr "Réactivité" + +#~ msgid "Lookahead" +#~ msgstr "Anticipation" + +#~ msgid "Sidechain Filters" +#~ msgstr "Filtres de chaîne latérale" + +#~ msgid "High-Pass" +#~ msgstr "Passe-haut" + +#~ msgid "Frequency" +#~ msgstr "Fréquence" + +#~ msgid "Off" +#~ msgstr "Désactivé" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Mode de filtrage passe-haut" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Fréquence du filtre passe-haut" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Mode de filtre passe-bas" + +#~ msgid "Gain" +#~ msgstr "Gain" + +#~ msgid "Envelope" +#~ msgstr "Enveloppe" + +#~ msgid "Curve" +#~ msgstr "Courbe" + +#~ msgid "L" +#~ msgstr "G" + +#~ msgid "Left Channel" +#~ msgstr "Canal gauche" + +#~ msgid "R" +#~ msgstr "D" + +#~ msgid "Right Channel" +#~ msgstr "Canal droit" + +#~ msgid "Impulses" +#~ msgstr "Réponse impulsionnelle" + +#~ msgid "Combine" +#~ msgstr "Combiner" + +#~ msgid "Stereo Width" +#~ msgstr "Amplitude stéréo" + +#~ msgid "Spectrum" +#~ msgstr "Spectre" + +#~ msgid "Log Scale" +#~ msgstr "Échelle logarithmique" + +#~ msgid "Autogain" +#~ msgstr "Gain automatique" + +#~ msgid "Rate" +#~ msgstr "Taux" + +#~ msgid "Samples" +#~ msgstr "Échantillons" + +#~ msgid "Duration" +#~ msgstr "Durée" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "Combiner les réponses impulsionnelles" + +#~ msgid "First Kernel" +#~ msgstr "Premier noyau" + +#~ msgid "Second Kernel" +#~ msgstr "Deuxième noyau" + +#~ msgid "Output File Name" +#~ msgstr "Nom du fichier de sortie" + +#~ msgid "Combined Kernel Name" +#~ msgstr "Nom du noyau combiné" + +#~ msgid "Import Impulse" +#~ msgstr "Importer une réponse impulsionnelle" + +#~ msgid "Search" +#~ msgstr "Rechercher" + +#~ msgid "Search Impulse File" +#~ msgstr "Rechercher un fichier de réponse impulsionnelle" + +#~ msgid "Impulse Files List" +#~ msgstr "Liste des fichiers de réponse impulsionnelle" + +#~ msgid "Default" +#~ msgstr "Par défaut" + +#~ msgid "Cutoff" +#~ msgstr "Coupure" + +#~ msgid "Feed" +#~ msgstr "Flux" + +#~ msgid "Bypass" +#~ msgstr "Contourner" + +#~ msgid "Mute" +#~ msgstr "Couper le son" + +#~ msgid "Detection" +#~ msgstr "Détection" + +#~ msgid "Wide" +#~ msgstr "Large" + +#~ msgid "Split" +#~ msgstr "Diviser" + +#~ msgid "F1 Split" +#~ msgstr "Division F1" + +#~ msgid "Frequency 1 Split" +#~ msgstr "Division de la fréquence 1" + +#~ msgid "F2 Peak" +#~ msgstr "Crête F2" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "Crête de la fréquence 2" + +#~ msgid "F1 Gain" +#~ msgstr "Gain F1" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "Gain de la Fréquence 1" + +#~ msgid "F2 Level" +#~ msgstr "Niveau F2" + +#~ msgid "Frequency 2 Level" +#~ msgstr "Niveau de la fréquence 2" + +#~ msgid "F2 Peak Q" +#~ msgstr "Crête Q F2" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Crête de la fréquence 2" + +#~ msgid "Laxity" +#~ msgstr "Laxité" + +#~ msgid "Detected" +#~ msgstr "Détecté" + +#~ msgid "Reduction" +#~ msgstr "Réduction" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Frame Size" +#~ msgstr "Taille du cadre" + +#~ msgid "Filter Length" +#~ msgstr "Longueur du filtre" + +#~ msgid "Excluded Apps" +#~ msgstr "Applications exclues" + +#~ msgid "Bands" +#~ msgstr "Bandes" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#, fuzzy +#~ msgid "FIR" +#~ msgstr "FIR" + +#, fuzzy +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Diviser les canaux" + +#~ msgid "Flat Response" +#~ msgstr "Réponse plate" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calculer les fréquences" + +#~ msgid "Load APO Preset" +#~ msgstr "Charger un préréglage APO" + +#~ msgid "Bell" +#~ msgstr "Cloche" + +#~ msgid "High Pass" +#~ msgstr "Passe-haut" + +#~ msgid "Low Pass" +#~ msgstr "Passe-bas" + +#~ msgid "Notch" +#~ msgstr "Réjection de bande" + +#~ msgid "Resonance" +#~ msgstr "Résonance" + +#~ msgid "All Pass" +#~ msgstr "Toutes les passes" + +#~ msgid "Band Type" +#~ msgstr "Type de bande" + +#~ msgid "Band Mode" +#~ msgstr "Mode de la bande" + +#~ msgid "Slope" +#~ msgstr "Pente" + +#~ msgid "Band Slope" +#~ msgstr "Pente de la bande" + +#~ msgid "Width" +#~ msgstr "Largeur" + +#~ msgid "Quality" +#~ msgstr "Qualité" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#~ msgid "Ceil" +#~ msgstr "Plafonner" + +#~ msgid "Ceil Value" +#~ msgstr "Valeur du plafonnement" + +#, fuzzy +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Accéder" + +#~ msgid "Description" +#~ msgstr "Description" + +#~ msgid "Remove this model file" +#~ msgstr "Supprimer ce fichier modèle" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct passe-bas" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct passe-bas" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct passe-bas" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct passe-haut" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct passe-haut" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct passe-haut" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct passe-bande" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct passe-bande" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct passe-bande" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct coupe-bande" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct coupe-bande" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct coupe-bande" + +#~ msgid "Inertia" +#~ msgstr "Inertie" + +#, fuzzy +#~ msgid "Gate" +#~ msgstr "Porte à bruits" + +#~ msgid "Zone" +#~ msgstr "Zone" + +#~ msgid "Hysteresis" +#~ msgstr "hystérèse" + +#~ msgid "Attack Zone Start" +#~ msgstr "Début de la zone d’attaque" + +#~ msgid "Release Zone Start" +#~ msgstr "Début de la zone de relâchement" + +#~ msgid "Internal" +#~ msgstr "Interne" + +#~ msgid "Oversampling" +#~ msgstr "Suréchantillonnage" + +#, fuzzy +#~ msgid "Dither" +#~ msgstr "Dither" + +#, fuzzy +#~ msgid "Herm Thin" +#~ msgstr "Herm Thin" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Herm Wide" + +#, fuzzy +#~ msgid "Herm Tail" +#~ msgstr "Herm Tail" + +#, fuzzy +#~ msgid "Herm Duck" +#~ msgstr "Herm Duck" + +#, fuzzy +#~ msgid "Exp Thin" +#~ msgstr "Exp Thin" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Exp Wide" + +#, fuzzy +#~ msgid "Exp Tail" +#~ msgstr "Exp Tail" + +#, fuzzy +#~ msgid "Exp Duck" +#~ msgstr "Exp Duck" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Line Thin" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Line Wide" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Line Tail" + +#, fuzzy +#~ msgid "Line Duck" +#~ msgstr "Line Duck" + +#~ msgid "None" +#~ msgstr "Aucun" + +#~ msgid "Half x2(2L)" +#~ msgstr "Moitié x2(2L)" + +#~ msgid "Half x2(3L)" +#~ msgstr "Moitié x2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "Moitié x3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "Moitié x3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "Moitié x4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "Moitié x4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "Moitié x6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "Moitié x6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "Moitié x8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "Moitié x8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "Complet x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "Complet x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "Complet x3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "Complet x3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "Complet x4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "Complet x4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "Complet x6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "Complet x6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "Complet x8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "Complet x8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "SC PréAmp" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Préamplification de la chaîne latérale" + +#~ msgid "Boost" +#~ msgstr "Renforcer" + +#~ msgid "Stereo Link" +#~ msgstr "Lien stéréo" + +#~ msgid "External Sidechain" +#~ msgstr "Chaîne latérale externe" + +#~ msgid "External Sidechain Source" +#~ msgstr "Source de la chaîne latérale externe" + +#~ msgid "Auto Leveling" +#~ msgstr "Auto-nivellement" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "Auto-nivellement de l’attaque" + +#~ msgid "Auto Leveling Release" +#~ msgstr "Auto-nivellement du relâ­che­ment" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "Auto-nivellement du genou" + +#~ msgid "Gain Left" +#~ msgstr "Gain à gauche" + +#~ msgid "Gain Right" +#~ msgstr "Gain à droite" + +#~ msgid "Sidechain Left" +#~ msgstr "Chaîne latérale gauche" + +#~ msgid "Sidechain Right" +#~ msgstr "Chaîne latérale droite" + +#~ msgid "Standard" +#~ msgstr "Standard" + +#~ msgid "Flat" +#~ msgstr "Plat" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "FFT Size" +#~ msgstr "Taille FFT" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Taille de la transformation de Fourier rapide" + +#~ msgid "Output Volume" +#~ msgstr "Volume de sortie" + +#~ msgid "Ceiling" +#~ msgstr "Plafonnement" + +#~ msgid "Operating Mode" +#~ msgstr "Mode de fonctionnement" + +#~ msgid "Classic" +#~ msgstr "Classique" + +#~ msgid "Modern" +#~ msgstr "Moderne" + +#~ msgid "Sidechain Boost" +#~ msgstr "Renforcement de la chaîne latérale" + +#~ msgid "Pink BT" +#~ msgstr "Rose BT" + +#~ msgid "Pink MT" +#~ msgstr "Rose MT" + +#~ msgid "Brown BT" +#~ msgstr "Marron BT" + +#~ msgid "Brown MT" +#~ msgstr "Marron MT" + +#~ msgid "Bands List" +#~ msgstr "Liste des bandes" + +#~ msgid "Band 1" +#~ msgstr "Bande 1" + +#~ msgid "Band 2" +#~ msgstr "Bande 2" + +#~ msgid "Band 3" +#~ msgstr "Bande 3" + +#~ msgid "Band 4" +#~ msgstr "Bande 4" + +#~ msgid "Band 5" +#~ msgstr "Bande 5" + +#~ msgid "Band 6" +#~ msgstr "Bande 6" + +#~ msgid "Band 7" +#~ msgstr "Bande 7" + +#~ msgid "Band 8" +#~ msgstr "Bande 8" + +#~ msgid "Band Start" +#~ msgstr "Début de la bande" + +#~ msgid "Band End" +#~ msgstr "Fin de la bande" + +#~ msgid "Band Compression Mode" +#~ msgstr "Mode de compression de la bande" + +#~ msgid "Band Bypass" +#~ msgstr "Contourner bande" + +#~ msgid "Band Sidechain Options" +#~ msgstr "Options de la chaîne latérale de la bande" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtre coupe-bas" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Fréquence du filtre coupe-bas" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filtre coupe-haut" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Fréquence du filtre coupe-haut" + +#~ msgid "PreAmp" +#~ msgstr "PréAmp" + +#~ msgid "Band Gain" +#~ msgstr "Gain de la bande" + +#~ msgid "Band Envelope" +#~ msgstr "Enveloppe de la bande" + +#~ msgid "Band Curve" +#~ msgstr "Courbe de la bande" + +#~ msgid "Split Mode" +#~ msgstr "Mode de division" + +#~ msgid "Split 1/2" +#~ msgstr "Diviser 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Diviser la fréquence 1" + +#~ msgid "Split 2/3" +#~ msgstr "Diviser 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Diviser la fréquence 2" + +#~ msgid "Split 3/4" +#~ msgstr "Diviser 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Diviser la fréquence 3" + +#~ msgid "Sub Band" +#~ msgstr "Sous-bande" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Contournement bande 1" + +#~ msgid "Band 1 Solo" +#~ msgstr "Solo de la bande 1" + +#~ msgid "Band 1 Detection" +#~ msgstr "Détection de la bande 1" + +#~ msgid "Band 1 Attack" +#~ msgstr "Attaque de la bande 1" + +#~ msgid "Band 1 Release" +#~ msgstr "Relâ­che­ment de la bande 1" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Seuil de la bande 1" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Ratio de la bande 1" + +#~ msgid "Band 1 Knee" +#~ msgstr "Genou de la bande 1" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Rattrapage de gain de la bande 1" + +#~ msgid "Max Reduction" +#~ msgstr "Atténuation maximale" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Réduction max de la bande 1" + +#~ msgid "Low Band" +#~ msgstr "Bande inférieure" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Contournement bande 2" + +#~ msgid "Band 2 Solo" +#~ msgstr "Solo de la bande 2" + +#~ msgid "Band 2 Detection" +#~ msgstr "Détection de la bande 2" + +#~ msgid "Band 2 Attack" +#~ msgstr "Attaque de la bande 2" + +#~ msgid "Band 2 Release" +#~ msgstr "Relâ­che­ment de la bande 2" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Seuil de la bande 2" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Ratio de bande 2" + +#~ msgid "Band 2 Knee" +#~ msgstr "Genou de la bande 2" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Compensation de gain de la bande 2" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Réduction max de la bande 2" + +#~ msgid "Mid Band" +#~ msgstr "Bande centrale" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Contournement bande 3" + +#~ msgid "Band 3 Solo" +#~ msgstr "Solo de la bande 3" + +#~ msgid "Band 3 Detection" +#~ msgstr "Détection de la bande 3" + +#~ msgid "Band 3 Attack" +#~ msgstr "Attaque de la bande 3" + +#~ msgid "Band 3 Release" +#~ msgstr "Relâ­che­ment de la bande 3" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Seuil de la bande 3" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Ratio de bande 3" + +#~ msgid "Band 3 Knee" +#~ msgstr "Genou de la bande 3" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Compensation de gain de la bande 3" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Réduction max. de la banda 3" + +#~ msgid "High Band" +#~ msgstr "Bande supérieure" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Contournement bande 4" + +#~ msgid "Band 4 Solo" +#~ msgstr "Solo de la bande 4" + +#~ msgid "Band 4 Detection" +#~ msgstr "Détection de la bande 4" + +#~ msgid "Band 4 Attack" +#~ msgstr "Attaque de la bande 4" + +#~ msgid "Band 4 Release" +#~ msgstr "Relâ­che­ment de la bande 4" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Seuil de la bande 4" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Ratio de la bande 4" + +#~ msgid "Band 4 Knee" +#~ msgstr "Genou de la bande 4" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Compensation de gain de la bande 4" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Réduction max. de la bande 4" + +#~ msgid "General" +#~ msgstr "Général" + +#~ msgid "Device Management" +#~ msgstr "Gestion des périphériques" + +#~ msgid "" +#~ "It's recommended to NOT set EasyEffects Sink/Source as Default Device in " +#~ "external applications (e.g. Gnome Settings and Plasma System Settings)." +#~ msgstr "" +#~ "Il est recommandé de ne PAS définir EasyEffects Sink/Source comme " +#~ "périphérique par défaut dans les applications externes (par exemple, les " +#~ "Paramètres de Gnome et les Paramètres de Plasma)." + +#~ msgid "Use Default Input" +#~ msgstr "Utiliser l’entrée par défaut" + +#~ msgid "Custom Input Device" +#~ msgstr "Périphérique d’entrée personnalisé" + +#~ msgid "Use Default Output" +#~ msgstr "Utiliser la sortie par défaut" + +#~ msgid "Custom Output Device" +#~ msgstr "Périphérique de sortie personnalisé" + +#~ msgid "Server Information" +#~ msgstr "Information du serveur" + +#~ msgid "Header Version" +#~ msgstr "Version de l’en-tête" + +#~ msgid "Library Version" +#~ msgstr "Version de la bibliothèque" + +#~ msgid "Sampling Rate" +#~ msgstr "Taux d’échantillonnage" + +#~ msgid "Minimum Quantum" +#~ msgstr "Quantum minimum" + +#~ msgid "Maximum Quantum" +#~ msgstr "Quantum maximum" + +#~ msgid "Default Quantum" +#~ msgstr "Quantum par défaut" + +#~ msgid "Output Devices" +#~ msgstr "Périphériques de sortie" + +#~ msgid "Output Presets" +#~ msgstr "Préréglages de sortie" + +#~ msgid "Create Association" +#~ msgstr "Créer une association" + +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "Ajouter un préréglage de sortie auto-chargeant" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Liste des préréglages de sortie auto-chargeant" + +#~ msgid "Input Devices" +#~ msgstr "Périphériques d’entrée" + +#~ msgid "Input Presets" +#~ msgstr "Préréglages d’entrée" + +#~ msgid "Add Autoloading Input Preset" +#~ msgstr "Ajouter un préréglage d’entrée auto-chargeant" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Liste des préréglages d’entrée auto-chargeant" + +#~ msgid "Modules" +#~ msgstr "Modules" + +#~ msgid "Modules List" +#~ msgstr "Liste des modules" + +#~ msgid "Clients" +#~ msgstr "Clients" + +#~ msgid "Clients List" +#~ msgstr "Liste des clients" + +#~ msgid "Test Signal" +#~ msgstr "Signal d’essai" + +#~ msgid "State" +#~ msgstr "État" + +#~ msgid "Enabled" +#~ msgstr "Activé" + +#~ msgid "Properties" +#~ msgstr "Propriétés" + +#~ msgid "Channels" +#~ msgstr "Canaux" + +#~ msgid "Both" +#~ msgstr "Tous les deux" + +#~ msgid "Both Channels" +#~ msgstr "Les deux canaux" + +#~ msgid "Waveform" +#~ msgstr "Forme d’onde" + +#~ msgid "Sine Wave" +#~ msgstr "Onde sinusoïdale" + +#~ msgid "White Noise" +#~ msgstr "Bruit blanc" + +#~ msgid "High Speed" +#~ msgstr "Haute vélocité" + +#~ msgid "High Quality" +#~ msgstr "Haute qualité" + +#~ msgid "High Consistency" +#~ msgstr "Haute cohérence" + +#~ msgid "Formant" +#~ msgstr "Formant" + +#~ msgid "Shifted" +#~ msgstr "Altéré" + +#~ msgid "Preserved" +#~ msgstr "Préservé" + +#~ msgid "Transients" +#~ msgstr "Transitoires" + +#~ msgid "Crisp" +#~ msgstr "Net" + +#~ msgid "Mixed" +#~ msgstr "Intermédiaire" + +#~ msgid "Smooth" +#~ msgstr "Progressif" + +#~ msgid "Detector" +#~ msgstr "Détecteur" + +#~ msgid "Compound" +#~ msgstr "Composé" + +#~ msgid "Percussive" +#~ msgstr "Percutant" + +#~ msgid "Soft" +#~ msgstr "Doux" + +#~ msgid "Phase" +#~ msgstr "Phase" + +#~ msgid "Laminar" +#~ msgstr "Laminaire" + +#~ msgid "Independent" +#~ msgstr "Indépendante" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Semitones" +#~ msgstr "Demi-tons" + +#~ msgid "Octaves" +#~ msgstr "Octaves" + +#~ msgid "Remove this effect" +#~ msgstr "Supprimer cet effet" + +#~ msgid "Enable/disable this effect" +#~ msgstr "Activer/désactiver cet effet" + +#~ msgid "Change the position of this effect" +#~ msgstr "Modifier la position de cet effet" + +#~ msgid "Add Effect" +#~ msgstr "Ajouter un effet" + +#~ msgid "Used Plugins List" +#~ msgstr "Liste des plugins utilisés" + +#~ msgid "No Effects" +#~ msgstr "Aucun effet" + +#~ msgid "Audio Stream Not Modified" +#~ msgstr "Flux audio non modifié" + +#~ msgid "Search Plugin" +#~ msgstr "Plugin de recherche" + +#~ msgid "Plugins List" +#~ msgstr "Liste des plugins" + +#~ msgid "_General" +#~ msgstr "_Général" + +#~ msgid "Service" +#~ msgstr "Service" + +#~ msgid "Launch Service at System Startup" +#~ msgstr "Lancer le service au démarrage du système" + +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Arrêter à la fermeture de la fenêtre" + +#~ msgid "Audio" +#~ msgstr "Audio" + +#~ msgid "Process All Output Streams" +#~ msgstr "Traiter tous les flux de sortie" + +#~ msgid "Process All Input Streams" +#~ msgstr "Traiter tous les flux d’entrée" + +#~ msgid "Ignore Streams from Monitor of Devices" +#~ msgstr "Ignorer les flux du moniteur des périphériques" + +#~ msgid "Use Cubic Volume" +#~ msgstr "Utiliser le volume cubique" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "" +#~ "Réinitialiser le volume des périphériques virtuels de EasyEffects au " +#~ "démarrage" + +#~ msgid "Inactivity Timeout" +#~ msgstr "Délai d’inactivité" + +#~ msgid "Style" +#~ msgstr "Style" + +#~ msgid "Use Dark Theme" +#~ msgstr "Utiliser le thème sombre" + +#~ msgid "Hide Menus on Outside Clicks" +#~ msgstr "Masquer les menus en cliquant en dehors" + +#~ msgid "_Spectrum" +#~ msgstr "_Spectre" + +#~ msgid "Shape" +#~ msgstr "Forme" + +#~ msgid "Bars" +#~ msgstr "Barres" + +#~ msgid "Lines" +#~ msgstr "Lignes" + +#~ msgid "Dots" +#~ msgstr "Points" + +#~ msgid "Points" +#~ msgstr "Points" + +#~ msgid "Height" +#~ msgstr "Hauteur" + +#~ msgid "Line Width" +#~ msgstr "Largeur de ligne" + +#~ msgid "Fill" +#~ msgstr "Remplir" + +#~ msgid "Show Bars Border" +#~ msgstr "Afficher les bordures des barres" + +#~ msgid "Rounded Corners" +#~ msgstr "Coins arrondis" + +#~ msgid "Color" +#~ msgstr "Couleur" + +#~ msgid "Lines and Bars" +#~ msgstr "Lignes et barres" + +#~ msgid "Axis Labels" +#~ msgstr "Annotation des axes" + +#~ msgid "Frequency Range" +#~ msgstr "Intervalle de fréquences" + +#~ msgid "Minimum" +#~ msgstr "Minimum" + +#~ msgid "Maximum" +#~ msgstr "Maximum" + +#~ msgid "Load" +#~ msgstr "Charger" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Enregistrer les paramètres actuels dans ce préréglage" + +#~ msgid "Remove this preset file" +#~ msgstr "Supprimer ce préréglage" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nom du préréglage de sortie" + +#~ msgid "Create a new preset" +#~ msgstr "Créer un nouveau préréglage" + +#~ msgid "Import a preset" +#~ msgstr "Importer un préréglage" + +#~ msgid "Search Output Preset" +#~ msgstr "Rechercher un préréglage de sortie" + +#~ msgid "Output Presets List" +#~ msgstr "Liste des préréglages de sortie" + +#~ msgid "New Input Preset Name" +#~ msgstr "Nom du nouveau préréglage d’entrée" + +#~ msgid "Search Input Preset" +#~ msgstr "Rechercher un préréglage d’entrée" + +#~ msgid "Input Presets List" +#~ msgstr "Liste des préréglages d’entrée" + +#~ msgid "High Frequency Damping" +#~ msgstr "Atténuation des hautes fréquences" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Room Size" +#~ msgstr "Taille de la salle" + +#~ msgid "Small" +#~ msgstr "Petite" + +#~ msgid "Medium" +#~ msgstr "Moyenne" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Tunnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/lisse" + +#~ msgid "Experimental" +#~ msgstr "Expérimental" + +#~ msgid "Diffusion" +#~ msgstr "Diffusion" + +#~ msgid "Pre Delay" +#~ msgstr "Pré-retard" + +#~ msgid "Decay Time" +#~ msgstr "Temps de déclin" + +#~ msgid "Wet Amount" +#~ msgstr "Quantité de signaux avec effets" + +#~ msgid "Wet Level" +#~ msgstr "Niveau des signaux avec effet" + +#~ msgid "Dry Amount" +#~ msgstr "Quantité de signaux sans effets" + +#~ msgid "Dry Level" +#~ msgstr "Niveau des signaux sans effets" + +#~ msgid "Bass Cut" +#~ msgstr "Atténuation des basses" + +#~ msgid "Treble Cut" +#~ msgstr "Atténuation des aigües" + +#~ msgid "Ambience" +#~ msgstr "Ambiance" + +#~ msgid "Empty Walls" +#~ msgstr "Murs vides" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Room" +#~ msgstr "Salle" + +#~ msgid "Large Empty Hall" +#~ msgstr "Grande salle vide" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Grande salle occupée" + +#~ msgid "Import Model" +#~ msgstr "Importer un modèle" + +#~ msgid "Models" +#~ msgstr "Modèles" + +#~ msgid "Standard Model" +#~ msgstr "Modèle standard" + +#~ msgid "RNNoise Models List" +#~ msgstr "Liste des modèles RNNoise" + +#~ msgid "Model Not Loaded" +#~ msgstr "Modèle non chargé" + +#~ msgid "Active Model" +#~ msgstr "Modèle actif" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Modèle standard RNNoise" + +#~ msgid "Overview" +#~ msgstr "Vue d’ensemble" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Ouvrir le manuel de EasyEffects" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Plein écran/Restaurer à partir du plein écran" + +#~ msgid "Close the Window" +#~ msgstr "Fermer la fenêtre" + +#~ msgid "Quit EasyEffects" +#~ msgstr "Quitter EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#~ msgid "Input Balance" +#~ msgstr "Balance d’entrée" + +#~ msgid "Softclip" +#~ msgstr "Écrêtage doux" + +#~ msgid "Softclip Level" +#~ msgstr "Niveau de l’écrêtage" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matrice stéréo" + +#~ msgid "Stereo Mode" +#~ msgstr "Mode stéréo" + +#~ msgid "Invert Phase" +#~ msgstr "Inverser la phase" + +#~ msgid "Side Level" +#~ msgstr "Niveau latéral" + +#~ msgid "Side Balance" +#~ msgstr "Balance latérale" + +#~ msgid "Middle Level" +#~ msgstr "Niveau central" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama central" + +#~ msgid "Output Balance" +#~ msgstr "Balance de sortie" + +#~ msgid "Delay L/R" +#~ msgstr "Retard G/D" + +#~ msgid "Delay Left Right" +#~ msgstr "Retard gauche droite" + +#~ msgid "Stereo Base" +#~ msgstr "Base stéréo" + +#~ msgid "Stereo Phase" +#~ msgstr "Phase Stéréo" + +#~ msgid "Running" +#~ msgstr "En cours" + +#~ msgid "Suspended" +#~ msgstr "En pause" + +#~ msgid "Idle" +#~ msgstr "Inactif" + +#~ msgid "Creating" +#~ msgstr "Génération" + +#~ msgid "Error" +#~ msgstr "Erreur" + +#~ msgid "Unknown" +#~ msgstr "Inconnu" + +#~ msgid "channels" +#~ msgstr "Canaux" + +#~ msgid "Output Presets: " +#~ msgstr "Préréglages de sortie : " + +#~ msgid "Input Presets: " +#~ msgstr "Préréglages d’entrée : " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Effets audio pour les applications utilisant PipeWire" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "Quitter EasyEffects. Utile en cas de fonctionnement en mode serveur." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Chargez un préréglage. Exemple : easyeffects -l musique" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Réinitialiser EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Masquer la Fenêtre." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Contournement global. 1 pour activer, 2 pour désactiver et 3 pour obtenir " +#~ "le statut" + +#~ msgid "Show available presets." +#~ msgstr "Afficher les préréglages disponibles." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#~ msgid "The File Is Not Regular" +#~ msgstr "Le fichier est irrégulier" + +#~ msgid "The Impulse File May Be Corrupted or Unsupported" +#~ msgstr "Le fichier d’impulsion peut être corrompu ou non pris en charge" + +#~ msgid "Only Stereo Impulse Files Are Supported" +#~ msgstr "Seuls les fichiers d’impulsion stéréo sont pris en charge" + +#~ msgid "Impulse File Not Imported" +#~ msgstr "Fichier d’impulsion non importé" + +#~ msgid "Import Impulse File" +#~ msgstr "Importer un fichier d’impulsion" + +#~ msgid "Open" +#~ msgstr "Ouvrir" + +#~ msgid "Cancel" +#~ msgstr "Annuler" + +#~ msgid "Impulse Response" +#~ msgstr "Réponse impulsionnelle" + +#~ msgid "Load Impulse" +#~ msgstr "Charger une impulsion" + +#~ msgid "Remove Impulse" +#~ msgstr "Supprimer l’impulsion" + +#~ msgid "No Impulse File Loaded" +#~ msgstr "Aucun fichier d’impulsion chargé" + +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Impossible de charger le fichier d’impulsion" + +#~ msgid "Recorders" +#~ msgstr "Enregistreurs" + +#~ msgid "Players" +#~ msgstr "Lecteurs" + +#~ msgid "Effects" +#~ msgstr "Effets" + +#~ msgid "infinity" +#~ msgstr "infini" + +#~ msgid "Import APO Preset File" +#~ msgstr "Importer un fichier de préréglage APO" + +#~ msgid "APO Presets" +#~ msgstr "Préréglages APO" + +#~ msgid "" +#~ "APO Preset Not Loaded. File Format May Be Wrong. Please Check Its Content." +#~ msgstr "" +#~ "Le préréglage APO n’a pas été chargé. Le format du fichier peut être " +#~ "erroné. Veuillez vérifier son contenu." + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Supprimer le préréglage du chargement automatique" + +#~ msgid "Remove" +#~ msgstr "Supprimer" + +#~ msgid "Output Device" +#~ msgstr "Périphérique de sortie" + +#~ msgid "Add" +#~ msgstr "Ajouter" + +#~ msgid "Import Preset" +#~ msgstr "Importer un préréglage" + +#~ msgid "" +#~ "Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To " +#~ "The Standard Model." +#~ msgstr "" +#~ "Le modèle sélectionné n’a pas été chargé. Son format n’est peut-être pas " +#~ "pris en charge. Retour au modèle standard." + +#~ msgid "Import Model File" +#~ msgstr "Importer un modèle" + +#~ msgid "RNNoise Models" +#~ msgstr "Modèles RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Amélioration des basses" + +#~ msgid "Bass Loudness" +#~ msgstr "Sonie des basses" + +#~ msgid "Convolver" +#~ msgstr "Convolueur" + +#~ msgid "Crossfeed" +#~ msgstr "Flux croisé" + +#~ msgid "Crystalizer" +#~ msgstr "Cristallisateur" + +#~ msgid "Deesser" +#~ msgstr "Déesseur" + +#~ msgid "Delay" +#~ msgstr "Retard" + +#~ msgid "Echo Canceller" +#~ msgstr "Annulateur d’écho" + +#~ msgid "Equalizer" +#~ msgstr "Égaliseur" + +#~ msgid "Exciter" +#~ msgstr "Excitateur" + +#~ msgid "Filter" +#~ msgstr "Filtre" + +#~ msgid "Limiter" +#~ msgstr "Limiteur" + +#~ msgid "Maximizer" +#~ msgstr "Maximiseur" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compresseur multibande" + +#, fuzzy +#~ msgid "Multiband Gate" +#~ msgstr "Porte multibande" + +#, fuzzy +#~ msgid "Pitch" +#~ msgstr "Hauteur" + +#~ msgid "Reverberation" +#~ msgstr "Réverbération" + +#~ msgid "Noise Reduction" +#~ msgstr "Réduction de bruit" + +#~ msgid "Stereo Tools" +#~ msgstr "Outils stéréo" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Fermer (appuyez sur Échap)" + +#~ msgid "Average" +#~ msgstr "Moyenne" + +#~ msgid "Failed" +#~ msgstr "Échec" + +#~ msgid "Use Default" +#~ msgstr "Utiliser la valeur par défaut" + +#~ msgid "Remove this plugin" +#~ msgstr "Supprimer ce plugin" + +#~ msgid "Import Presets" +#~ msgstr "Ouvrir préréglage" + +#~ msgid "Start Service at Login" +#~ msgstr "Lancer le service au démarrage" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Réinitialiser le volume au démarrage" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aucune compression" + +#~ msgid "Add to Blocklist" +#~ msgstr "Ajouter à la liste de blocage" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibration de la correction microphone" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Table sinusoïdale" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Table sinusoïdale" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latence" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Gain d'entrée [dB]" + +#, fuzzy +#~ msgid "Output Effects" +#~ msgstr "Limiteur d'entrée" + +#~ msgid "Settings" +#~ msgstr "Paramètres" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Paramètres" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Calibration" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Signal de test" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Signal de test" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spectromètre" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spectromètre" + +#, fuzzy +#~ msgid "Spectrum Color" +#~ msgstr "Spectromètre" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Réduction de gain" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "Niveau" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Passe-bas" + +#~ msgid "Input Limiter" +#~ msgstr "Limiteur d'entrée" + +#~ msgid "Calibration" +#~ msgstr "Calibration" + +#, fuzzy +#~ msgid "Limit" +#~ msgstr "Limite [dB]" + +#~ msgid "Attenuation" +#~ msgstr "Atténuation" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Effets audio pour applications PulseAudio" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Effets audio pour applications PulseAudio" + +#, fuzzy +#~ msgid "Calibration Microphone" +#~ msgstr "Calibration de la correction microphone" + +#~ msgid "Sine" +#~ msgstr "Sinusoïde" + +#~ msgid "Square" +#~ msgstr "Carrée" + +#~ msgid "Saw" +#~ msgstr "Dent de scie" + +#~ msgid "Triangle" +#~ msgstr "Triangle" + +#, fuzzy +#~ msgid "Silence" +#~ msgstr "Silence" + +#~ msgid "Pink Noise" +#~ msgstr "Bruit rose" + +#~ msgid "Ticks" +#~ msgstr "Ticks" + +#~ msgid "Gaussian Noise" +#~ msgstr "Bruit Gaussien" + +#~ msgid "Red Noise" +#~ msgstr "Bruit rouge" + +#~ msgid "Blue Noise" +#~ msgstr "Bruit bleu" + +#~ msgid "Violet Noise" +#~ msgstr "Bruit violet" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#, fuzzy +#~ msgid "Window" +#~ msgstr "Fenêtre [s]" + +#~ msgid "Measure Noise" +#~ msgstr "Mesurer le bruit" + +#~ msgid "Subtract Noise" +#~ msgstr "Enlever le bruit" + +#, fuzzy +#~ msgid "High" +#~ msgstr "Passe-haut" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Réduction de gain" + +#, fuzzy +#~ msgid "Very High" +#~ msgstr "Passe-haut" + +#, fuzzy +#~ msgid "Noise Suppressor" +#~ msgstr "Compresseur" + +#, fuzzy +#~ msgid "Detection Likelihood" +#~ msgstr "Atténuation" + +#, fuzzy +#~ msgid "Voice Detector" +#~ msgstr "Atténuation" + +#, fuzzy +#~ msgid "Select the impulse Response File" +#~ msgstr "Réponse plane" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Aucune compression" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Calibration" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Paramètres" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Préréglage" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Atténuation" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Fréquence [Hz]" + +#, fuzzy +#~ msgid "Buffer" +#~ msgstr "Latence" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Égaliseur - Sortie" + +# Taking lingual shortcuts to squeeze it in the text box +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Taille pièce" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Ouvrir préréglage" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Réduction de gain" diff --git a/po/news/gl.po b/po/news/gl.po new file mode 100644 index 0000000..ca62cf8 --- /dev/null +++ b/po/news/gl.po @@ -0,0 +1,3482 @@ +# Galician translation for EasyEffects +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# Xosé , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Galician \n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efectos de son para aplicacións PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace (wwmm)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects é unha ferramenta avanzada de manipulación de audio. Inclúe un " +"ecualizador, un limitador, un compresor e unha ferramenta de reverberación, " +"por citar algúns. Para complementar isto, tamén atopará un analizador do " +"espectro incorporado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects é o sucesor de PulseEffects. Easy Effects só admite o servidor " +"de audio de PipeWire. Os usuarios de PulseAudio deberían usar PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Como Easy Effects utiliza o servidor de son predeterminado PipeWire, " +"funcionará coa maioría, se non con todalas, das aplicacións que utilices. " +"Todalas aplicacións compatibles preséntanse na xanela principal, onde cada " +"unha se pode activar individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Ademais de manipular a saída do son, Easy Effects pode aplicar efectos a un " +"dispositivo de entrada, como un micrófono. Isto é, por exemplo, útil na " +"gravación do audio, pero tamén funciona ben durante as conversas de voz." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Cando se inicie Easy Effects, lembrará convenientemente a configuración " +"utilizada na última sesión. Tamén é posible gardar todolos axustes actuais " +"como perfís." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "A páxina principal mostra dúas aplicacións da saída do son" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "A páxina do potenciador de graves que mostra os controis do son" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "A páxina de convolver que mostra os controis do son" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Características:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Corrección dos erros:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Outras notas:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +#, fuzzy +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" +"A advertencia da saturación xa non deberían desprazalos seus widgets veciños" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Traducións actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" +"Agora é posible engadir máis dunha instancia do filtro á canalización dos " +"efectos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +#, fuzzy +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"Engadiuse un novo complemento `Procesador de voz` baseado na biblioteca " +"Speex. Ademais de proporcionar supresión de ruído, tamén pode detectar a " +"actividade da voz. É unha alternativa decente aos casos nos que a biblioteca " +"rnnoise non funciona ben." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +#, fuzzy +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "Compatibilidade mellorada con Linux Studio Plugins `1.2.3`." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "Os presets de GraphicEQ pódense importar ao efecto Ecualizador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +#, fuzzy +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"O nome da aplicación cambiouse a `Easy Effects` para cumprir coas " +"convencións da nomenclatura das directrices da interface humana de GNOME." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "Actualizouse a documentación." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "Carga automática dos presets mellorada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" +"Agora o usuario pode configurar ou limitar o silencio da ganancia automática." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "Engadíronse controis secos e húmidos ao efecto Ferramentas estéreo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" +"O cancelador do eco agora ten un control de supresión do ruído residual " +"tamén baseado na biblioteca de Speex." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" +"Ao pasar o rato sobre un gráfico mostrouse o valor da coordenada x " +"incorrecto. Esta regresión foi corrixida." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"Debido á nova función das instancias múltiples, o formato predefinido " +"cambiou, pero o antigo aínda é compatible para cargarse. De todolos xeitos, " +"teña en conta que ao gardar o preset actual, sempre o escribirá no novo " +"formato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"Migrouse a implementación de Multiband Gate de CALF a Linux Studio Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"Mellorouse a compatibilidade do código de carga automática predefinida cos " +"dispositivos bluez5." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "Engadíronse controis húmido/seco para algúns complementos" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"A interface de efectos xa non se carga cando o complemento lv2 relacionado " +"non está instalado no sistema. No seu lugar móstrase unha mensaxe do estado " +"para o usuario." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "Actualizouse a documentación" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "Mellora nas mensaxes da depuración" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Traducións actualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Traducións melloradas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Corrixiuse un erro no que EasyEffects podía fallar ao pechar a xanela " +"mentres se aplicaban os efectos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" +"O estado de bypass pódese gardar no ficheiro predefinido. As razóns polas " +"que se fixo isto pódense ver no número 1039" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" +"Mellorouse a compatibilidade do código da carga automática predefinida cos " +"dispositivos USB." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"Amosase un diálogo para o usuario cando non se pode cargar un preset ou non " +"se pode importar un ficheiro de preselección/impulso." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +#, fuzzy +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"Agora úsase o complemento SideChain Gate de `Linux Studio Plugins` en lugar " +"do de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"EasyEffects xa non debera fallar cando a configuración rexional do usuario " +"non está configurada correctamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"Implementouse unha solución alternativa na nosa icona para facer fronte á " +"falta de compatibilidade adecuada con SVG en QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"Cando se desactivan os efectos nunha aplicación, agora establecemos os seus " +"metadatos de destino como nulos. Isto permitirá ao xestor das sesións " +"multimedia (wireplumber) mover correctamente o fluxo a un novo dispositivo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"Engadiuse unha nova opción de configuración. Permite que EasyEffects ignore " +"os fluxos cuxo propósito é supervisar os dispositivos de sumidoiro. Isto " +"axudará a solucionar algúns dos problemas que tiñan os nosos usuarios ao " +"usar OBS." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "Mellorouse o código que mostra o formato da mostra do fluxo" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"A biblioteca rnnoise agora é opcional. Isto debería axudar aos mantedores " +"dos paquetes a construír un paquete Debian. Consulte o número 1000 para " +"obter máis información." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"Os nosos rexistros agora mostran a liña do código fonte onde se imprimen as " +"mensaxes" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"A caixa de verificación \"activar efectos\" da nosa xanela non se estaba " +"actualizando cando programas de terceiros como pavucontrol afastaron o fluxo " +"dos nosos dispositivos virtuais. Isto debería solucionarse agora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"Corrixiuse un erro que podía ocorrer cando se cambiaba o historial da " +"ganancia automática máxima." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "Evite erros cando pw-mididump estea en execución" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "Mellorouse a interface do complemento pitch" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" +"A nosa icona da aplicación agora é compatible con escritorios que usan QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +#, fuzzy +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"O noso código da lista de bloqueo usará a etiqueta `application.id` se o " +"fluxo o define" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +#, fuzzy +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Para evitar problemas co desprazamento do rato, as entradas da lista de " +"aplicacións que aparecen na pestana `Reprodutores/Grabadores` xa non mostran " +"unha escala do volume. Pódense atopar máis detalles do erro e a solución no " +"número 1211 e no número 1427" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +#, fuzzy +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Cando non estea dispoñible ningunha aplicación para a súa ollada nos " +"`Reproductores/Grabadores`, mostrarase unha mensaxe ao usuario" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Moitas actualizacións nas traducións" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"Corrixiuse un erro no que EasyEffeects erraba cando se cambiaba o número dos " +"puntos mostrados no espectro mentres a nosa canalización estaba activa e o " +"widget do espectro era visible" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"O valor na latencia da canalización que se amosaba na nosa xanela puido ser " +"incorrecto nalgunhas situacións. Isto foi arranxado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" +"Atoparas unha nova configuración que permite ao usuario seleccionar un tempo " +"de espera de inactividade para a canalización. Cando ningún cliente estea " +"reproducindo ou gravando dende os nosos dispositivos, os filtros " +"desvincularanse unha vez que se alcance o tempo da espera. Isto faise para " +"asegurarnos de que non desperdiciamos o silencio no procesamento da enerxía " +"da CPU." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"O complemento da ganancia automática agora permite ao usuario selecionalas " +"canles dos tres sons e usanse para calcular a media xeométrica." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +#, fuzzy +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"O complemento da ganancia automática agora permite establecelo historial " +"máximo e xa non usa o modo de histograma `libebur128`. Isto debería evitar " +"os casos nos que a sonoridade \"integrada\" quede atascada para sempre no " +"mesmo valor." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"A icona de EasyEffects actualizouse dun xeito que debería facelo visible nos " +"escritorios QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"A opción de liña de comandos que devolve o estado de omisión global está a " +"funcionar de novo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"O filtro da alimentación cruzada debería manexar mellor os interruptores da " +"latencia dinámica de PipeWire. Os saltos no nivel do volume xa non deberían " +"ocorrer nestas situacións." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Corrixiuse un erro que impedía que os micrós mono funcionasen correctamente " +"con EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Soporte para a próxima versión de PipeWire `0.3.44`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"O filtro de ganancia automática debería manexar mellor os interruptores da " +"latencia dinámica de PipeWire. Os saltos co nivel do volume xa non deberían " +"ocorrer nestas situacións." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Engadimos unha opción que che permite restablecelo volume e o estado de " +"silencio nos nosos dispositivos virtuais cando se inicia EasyEffects. Isto " +"debería axudar nos casos en que o servidor do audio silencie os nosos " +"dispositivos por motivos descoñecidos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Mellorouse o soporte para suspendelo ordenador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Corrixiuse un erro no que o tentar crear un perfil de carga automática sen " +"telos axustes preestablecidos provocaba que a aplicación errase." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +#, fuzzy +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"Corrixiuse un erro no que establecer unha banda do ecualizador `calidade` a " +"`cero` provocaba un erro na aplicación." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita úsase para facer algunhas partes da nosa xanela e para xestionalo " +"cambio entre temas escuros e claros." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "O menú de configuración foi redeseñado usando widgets de LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"Mellorouse a función da importación do presets de Equalizer APO para aplicar " +"non só o filtro Bell, senón tamén outros compatibles (polo momento só o " +"filtro de paso de banda non está dispoñible no complemento LSP)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +#, fuzzy +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"A función \"Restablecer todalas configuracións\" do noso menú debería " +"funcionar agora en Flatpak." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +#, fuzzy +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Temos unha nova opción que permite ao usuario desactivar os nosos menús " +"`autohide`. Isto pode axudar a solucionar algúns erros que os menús " +"emergentes teñen actualmente en gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Unha análise máis sólida para importar perfís APO gardados cun separador de " +"miles de comas na banda de frecuencia central." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"A biblioteca fmt é unha nova dependencia Polo menos mentres os compiladores " +"c++ non implementan as súas características. Espérase que isto suceda nos " +"próximos anos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM e GLIBMM xa non son unha dependencia. Agora usamos gtk4 directamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Agora é posible combinar respostas de impulso na interface de Convolver. " +"Xérase un novo ficheiro de impulsos e debería estar visible na lista de " +"impulsos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +#, fuzzy +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"Melloráronse os debuxos do `eixe x` nas nosas parcelas. Agora o número das " +"etiquetas axústase de forma dinámica dependendo do ancho da nosa xanela." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"A documentación actualizouse reflectindo as novas funcións de EasyEffects. " +"Elimináronse as antigas referencias sobre PulseEffects. Engadiuse o botón da " +"documentación na sección do menú." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Cando se enche un botón xiratorio cun valor fóra do intervalo, agora " +"actualízase co valor máis baixo/máis alto en lugar de restablecelo anterior." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"A xanela da aplicación agora lembra o estado maximizado e restableceo no " +"seguinte evento da apertura." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +#, fuzzy +msgid "The tbb library is a new dependency" +msgstr "A biblioteca `tbb` é unha nova dependencia" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Os complementos Limiter e Multiband Compressor agora poden usar unha cadea " +"lateral externa opcional." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"O complemento Autogain agora permite ao usuario seleccionar que Loudness se " +"usa como referencia para a corrección do volume." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" +"A función de importación de perfil APO do complemento Equalizer analiza " +"agora o parámetro \"Pre Amplificación\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "O volume cúbico opcional pódese activar na configuración xeral." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" +"Suponse que o complemento Spectrum entraba en paso sempre que non era " +"visible, pero isto estaba a suceder só cando a nosa xanela estaba pechada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "Melloralo apoio á tecnoloxía de asistencia." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" +"As sondas empregadas nalgúns filtros como o compresor e o limitador non " +"estan sendo religadas despois de cambiala orde dos complementos na " +"canalización. Debería funcionar agora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" +"Os fluxos dos monitores de PipeWire agora están excluídos e eliminados da " +"lista de aplicacións." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "Esperemos que se solucionen os fallos como o informado no número 1172." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "Evitou un caso no que Spectrum tiña erros." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"Pavucontrol xa non se engade á lista das aplicacións de entrada en sistemas " +"con localización diferentes do inglés." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"Compatibilidade mellorada con WirePlumber. Isto é necesario para executalo " +"en sistemas que decidiron usalo en lugar do xestor de sesión PipeWire " +"integrado. Máis información no número 1144." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"Cando se intente engadir un perfil de carga automática para un dispositivo " +"que xa está na lista, o predefinido do destino actualizarase. Deste xeito " +"podemos cambialo perfil predefinido sen ter que eliminalo e recrealo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"A implementación da compatibilidade da carga automática predefinida volveuse " +"a redeseñar. Agora debería funcionar con máis hardware. Para máis " +"información consulte o número 1051." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"Se o limitador ou o maximizador se colocan na última posición da pila dos " +"complementos, engádense novos complementos na penúltima posición para " +"evitala posibilidade de danos no hardware por un nivel de saída " +"eventualmente alto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" +"Ao eliminar unha aplicación da lista de bloqueo, restablecerase o seu estado " +"anterior." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"Ás veces, ao eliminar modelos importados do complemento da redución do " +"ruído, o modelo usado actual non se actualizou correctamente. Isto debería " +"solucionarse agora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" +"Ao editar ficheiros de perfís nun editor externo, as entradas duplicadas non " +"as atoparas no menú dos perfís." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" +"Agora a lista de bloqueo está configurada correctamente ao cambialos do " +"perfil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" +"Agora o estado do botón de derivación global actualízase correctamente ao " +"cambiala pila dos complementos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" +"As iconas que faltan no sistema non deben mostrarse dentro da IU de " +"información da aplicación (se non se pode mostrar unha icona da aplicación " +"aínda que estea seguro de que está instalada correctamente, abra un " +"problema)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"Algunhas iconas que non se mostran en Plasma DE co tema de iconas Breeze " +"deberían aparecer agora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Tradución ao chinés actualizada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Tradución ao italiano actualizada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +#, fuzzy +msgid "Added support for the compressor parameter Boost Amount" +msgstr "Engadiuse compatibilidade para o parámetro do compresor `Boost Amount`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"O complemento do compresor multibanda agora usalo complemento do compresor " +"multibanda estéreo de Linux Studio Plugins en lugar do de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"O complemento limitador agora usa o complemento limitador estéreo de Linux " +"Studio Plugins en lugar do de Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"Agora os filtros LV2 aparecen no gráfico PipeWire só cando se cargan a " +"primeira vez. Unha vez cargados, permanecen conectados ata que se apague " +"EasyEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" +"A frecuencia do mostraxe do cancelador do eco atopase agora correctamente " +"definida." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" +"O parámetro de limiar do complemento deesser agora gárdase no ficheiro " +"predefinido." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" +"División da banda mellorada para o cristalizador cos novos valores de " +"intensidade predeterminados." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" +"Dependendo da ganancia de entrada ou dos valores da ganancia da saída, non " +"se puideron aliñar as barras dos niveis correspondentes." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +#, fuzzy +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" +"Cando se engaden máis bandas do ecualizador, establécense en `Bell` en lugar " +"de `Off`." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" +"A carga dos axustes preestablecidos do Equalizer APO agora atopanse " +"funcionando correctamente en locais diferentes do C." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" +"Mellora a xestión de enlaces entre os nodos de filtro de portos en PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" +"A amplificación do sinal do complemento do cristalizador era demasiado alta " +"antes. Agora debería estar dentro dos niveis máis razoables." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" +"Mellorouse o remuestreador usado nos complementos que requiren un (como o " +"complemento rnnoise)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" +"Agora debería funcionar correctamente a configuración dos varios perfís da " +"carga automática" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" +"Agora as fiestras transitorias atopanse configuradas correctamente para " +"algúns diálogos dos complementos" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"Mellorouse o menú de resposta ao impulso de convolver para solucionar un " +"problema no que non se cargaban os ficheiros de impulso cando só había un " +"dispoñible no menú; consulte o problema 1011" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" +"Corrixiuse un erro que podía facer que o complemento de pitch non se " +"inicializase correctamente" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" +"A advertencia da saturación xa non deberían desprazalos seus widgets veciños" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "Corrixiuse a configuración rexional nalgúns widgets" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "Corrixiuse o aliñamento incorrecto nalgúns widgets" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" +"O complemento Loudness utilízase de novo polos motivos descritos no número " +"820. Isto significa que é unha dependencia opcional de novo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" +"Corrixiuse un fallo de segmentación que se producía cando non se instalaban " +"dependencias opcionais" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "Interface do ecualizador mellorada." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" +"Agora usamos un compresor LSP sidechain que permite ao usuario seleccionar " +"unha fonte externa como entrada sidechain." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +#, fuzzy +msgid "We now support the LSP compressor Boosting mode." +msgstr "Agora admitimolo modo \"Boosting\" do compresor LSP." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +#, fuzzy +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" +"Cando `split-channels` está activado no ecualizador, o preajuste APO " +"importado aplicarase só á canle que se visualiza na xanela. Isto permitirá " +"importar diferentes presets para cada canle en lugar de só configurar os " +"mesmos valores para ambos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" +"Corrixíronse algúns erros de segmentación que podían ocorrer ao crear un " +"perfil de carga automática predefinido ou eliminar a configuración " +"predeterminada" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" +"Este é un dos lanzamentos máis importantes que fixen. A cantidade de cambios " +"é tan grande que é difícil falar de todo aquí." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" +"Os seguintes son só os máis importados. As persoas interesadas na viaxe que " +"nos levou ata aquí poden botar unha ollada ao número 904 e ao número 874." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +#, fuzzy +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" +"A aplicación e o seu repositorio foron renomeados de PulseEffects a " +"'EasyEffects'" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 foi substituído por gtkmm4" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Gstreamer foi substituído polos filtros PipeWire nativos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" +"Moitas características foron reimplementadas desde cero. A carga automática " +"predefinida é un exemplo. Outro cambio notable verase no menú de selección " +"de complementos. Agora o usuario pode mostrar na xanela só os complementos " +"que quere utilizar." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" +"Boost xa non é unha dependencia. O prezo pagado por iso foi un pequeno " +"cambio nas nosas estruturas predefinidas. Con algo de paciencia, é posible " +"editar os presets de PulseEffects nun editor de texto e facelos funcionar en " +"EasyEffects. Esperemos que alguén chegue cun guión para isto na función." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"Empreganse novas bibliotecas e agora son necesarias algunhas das bibliotecas " +"que antes eran opcionais" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta publicación engade as seguintes características:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Esta publicación arranxa os seguintes erros:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bandas" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Hai unha nova configuración que lle permite ao usuario seleccionar un " +#~ "tempo de espera de inactividade para o pipeline. Cando non hai un cliente " +#~ "reproducindo" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "ou gravando desde os seus dispositivos os filtros desligaranse despois " +#~ "dun tempo. Isto faise para asegurarse que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "non gasta enerxía no procesador sen que se entere." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta publicación arranxa o seguinte erro:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esta publicación engade a seguinte característica:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ecualizador, compresor e outros efectos de son" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limitador;compresor;reverberación;ecualizador;volume automático;" + +#~ msgid "\"Presets\"" +#~ msgstr "«Preconfiguracións»" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Activado" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplicacións" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplicacións" + +#~ msgid "_Preferences" +#~ msgstr "_Preferencias" + +#~ msgid "_Manual" +#~ msgstr "_Manual" + +#~ msgid "_Shortcuts" +#~ msgstr "_Atallos de teclado" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Configuración" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Sobre EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Preconfiguracións" + +#~ msgid "Presets Menu" +#~ msgstr "Menú de preconfiguracións" + +#~ msgid "Global Bypass" +#~ msgstr "Desvío global" + +#~ msgid "Primary Menu" +#~ msgstr "Menú primario" + +#~ msgid "EasyEffects Window" +#~ msgstr "Xanela de EasyEffects" + +#~ msgid "Applications List" +#~ msgstr "Lista de aplicacións" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Paredes baleiras" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplicacións" + +#~ msgid "Target" +#~ msgstr "Destino" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Máximo" + +#~ msgid "Reference" +#~ msgstr "Referencia" + +#~ msgid "Momentary" +#~ msgstr "Momentáneo" + +#~ msgid "Short-Term" +#~ msgstr "Curto prazo" + +#~ msgid "Integrated" +#~ msgstr "Integrado" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Empregar media xeométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Empregar media xeométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Empregar media xeométrica" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Empregar media xeométrica" + +#~ msgid "Reset History" +#~ msgstr "Restabelecer historial" + +#~ msgid "Relative" +#~ msgstr "Relativo" + +#~ msgid "Range" +#~ msgstr "Intervalo" + +#~ msgid "Loudness" +#~ msgstr "Sonoridade" + +#~ msgid "Output Gain" +#~ msgstr "Ganancia da saída" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Saída" + +#~ msgid "Output" +#~ msgstr "Saída" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Saída" + +#~ msgid "Reset" +#~ msgstr "Restabelecer" + +#~ msgid "Using" +#~ msgstr "Usando" + +#~ msgid "Device" +#~ msgstr "Dispositivo" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "Profile" +#~ msgstr "Perfíl" + +#~ msgid "Preset" +#~ msgstr "Preconfiguración" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Retirar este ficheiro de preconfiguracións" + +#~ msgid "Listen" +#~ msgstr "Escoitar" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mesturar harmónicos" + +#~ msgid "3rd" +#~ msgstr "3.º" + +#~ msgid "2nd" +#~ msgstr "2.º" + +#~ msgid "Amount" +#~ msgstr "Cantidade" + +#~ msgid "Harmonics" +#~ msgstr "Harmónicos" + +#~ msgid "Scope" +#~ msgstr "Ámbito" + +#~ msgid "Floor" +#~ msgstr "Chan" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Chan" + +#~ msgid "Link" +#~ msgstr "Ligazón" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplicacións" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Mostrar aplicacións bloqueadas na lapela principal" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Aplicacións" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Mostrar aplicacións bloqueadas na lapela principal" + +#~ msgid "Compressor" +#~ msgstr "Compresor" + +#~ msgid "Mode" +#~ msgstr "Modo" + +#~ msgid "Downward" +#~ msgstr "Descendente" + +#~ msgid "Upward" +#~ msgstr "Ascendente" + +#~ msgid "Compression Mode" +#~ msgstr "Modo de compresión" + +#~ msgid "Boost Threshold" +#~ msgstr "Limiar de realce" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Cantidade" + +#~ msgid "Attack" +#~ msgstr "Ataque" + +#~ msgid "Time" +#~ msgstr "Tempo" + +#~ msgid "Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Limiar" + +#~ msgid "Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Limiar da solta relativa" + +#~ msgid "Ratio" +#~ msgstr "Proporción" + +#~ msgid "Knee" +#~ msgstr "Xeonllo" + +#~ msgid "Makeup" +#~ msgstr "Restauración" + +#~ msgid "Sidechain" +#~ msgstr "Cadea lateral" + +#~ msgid "Peak" +#~ msgstr "Pico" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Frecuencias baixas" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Cadea lateral" + +#~ msgid "Source" +#~ msgstr "Fonte" + +#~ msgid "Middle" +#~ msgstr "Medio" + +#~ msgid "Side" +#~ msgstr "Lado" + +#~ msgid "Left" +#~ msgstr "Esquerda" + +#~ msgid "Right" +#~ msgstr "Dereita" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Cadea lateral" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Feed-forward" +#~ msgstr "Remitir" + +#~ msgid "Feed-back" +#~ msgstr "Retroalimentar" + +#~ msgid "External" +#~ msgstr "Externo" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Cadea lateral" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Nivel de entrada" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Preamplificación" + +#~ msgid "Reactivity" +#~ msgstr "Reactividade" + +#~ msgid "Lookahead" +#~ msgstr "Delonga máxima" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Cadea lateral" + +#~ msgid "High-Pass" +#~ msgstr "Paso alto" + +#~ msgid "Frequency" +#~ msgstr "Frecuencia" + +#~ msgid "Off" +#~ msgstr "Desactivado" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Modo de filtro de frecuencias altas" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Frecuencias altas" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Modo de filtro de frecuencias altas" + +#~ msgid "Gain" +#~ msgstr "Ganancia" + +#~ msgid "Curve" +#~ msgstr "Curva" + +#~ msgid "L" +#~ msgstr "E" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Canles" + +#~ msgid "R" +#~ msgstr "D" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Dividir canles" + +#~ msgid "Impulses" +#~ msgstr "Impulsos" + +#~ msgid "Combine" +#~ msgstr "Combinar" + +#~ msgid "Stereo Width" +#~ msgstr "Largura do estéreo" + +#~ msgid "Spectrum" +#~ msgstr "Espectro" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Ganancia automática" + +#~ msgid "Rate" +#~ msgstr "Taxa" + +#~ msgid "Samples" +#~ msgstr "Mostras" + +#~ msgid "Duration" +#~ msgstr "Duración" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Resposta de impulso" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Saída" + +#~ msgid "Import Impulse" +#~ msgstr "Importar impulso" + +#~ msgid "Search" +#~ msgstr "Buscar" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Importar ficheiro de impulso" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Importar ficheiro de impulso" + +#~ msgid "Default" +#~ msgstr "Predeterminado" + +#~ msgid "Cutoff" +#~ msgstr "Corte" + +#~ msgid "Feed" +#~ msgstr "Fonte" + +#~ msgid "Bypass" +#~ msgstr "Desvío" + +#~ msgid "Mute" +#~ msgstr "Silenciar" + +#~ msgid "Detection" +#~ msgstr "Detección" + +#~ msgid "Wide" +#~ msgstr "Amplo" + +#~ msgid "Split" +#~ msgstr "Dividir" + +#~ msgid "F1 Split" +#~ msgstr "División F1" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frecuencia" + +#~ msgid "F2 Peak" +#~ msgstr "Pico F2" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frecuencia" + +#~ msgid "F1 Gain" +#~ msgstr "Ganancia F1" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frecuencia" + +#~ msgid "F2 Level" +#~ msgstr "Nivel F2" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frecuencia" + +#~ msgid "F2 Peak Q" +#~ msgstr "Pico F2 Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frecuencia" + +#~ msgid "Laxity" +#~ msgstr "Laxitude" + +#~ msgid "Detected" +#~ msgstr "Detectado" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Redución" + +#~ msgid "Frame Size" +#~ msgstr "Tamaño de fotograma" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filtro" + +#~ msgid "Bands" +#~ msgstr "Bandas" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "Transformada rápida de Fourier" + +#~ msgid "Split Channels" +#~ msgstr "Dividir canles" + +#~ msgid "Flat Response" +#~ msgstr "Resposta plana" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calcular frecuencias" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Preconfiguracións de APO" + +#~ msgid "Bell" +#~ msgstr "Campaíña" + +#~ msgid "High Pass" +#~ msgstr "Frecuencias altas" + +#~ msgid "High Shelf" +#~ msgstr "Andel alto" + +#~ msgid "Low Pass" +#~ msgstr "Frecuencias baixas" + +#~ msgid "Low Shelf" +#~ msgstr "Andel baixo" + +#~ msgid "Notch" +#~ msgstr "Entalla" + +#~ msgid "Resonance" +#~ msgstr "Resonancia" + +#~ msgid "All Pass" +#~ msgstr "Todos os pasos" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Bandas" + +#~ msgid "Slope" +#~ msgstr "Pendente" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pendente" + +#~ msgid "Width" +#~ msgstr "Largura" + +#~ msgid "Quality" +#~ msgstr "Calidade" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Teito" + +#~ msgid "Access" +#~ msgstr "Acceso" + +#~ msgid "Description" +#~ msgstr "Descrición" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Retirar este ficheiro de preconfiguracións" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Paso baixo 12dB/oct" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Paso baixo 24dB/oct" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Paso baixo 36dB/oct" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Paso alto 12dB/oct" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Paso alto 24dB/oct" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Paso alto 36dB/oct" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Paso de banda 6dB/oct" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Paso de banda 12dB/oct" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Paso de banda 18dB/oct" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Rexeita faixa 6dB/oct" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Rexeita faixa 12dB/oct" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Rexeita faixa 18dB/oct" + +#~ msgid "Inertia" +#~ msgstr "Inercia" + +#~ msgid "Gate" +#~ msgstr "Porta" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Externo" + +#~ msgid "Gating" +#~ msgstr "Limiar dinámico" + +#~ msgid "Oversampling" +#~ msgstr "Sobremostraxe" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Amplo" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Amplo" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Largura de liña" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Largura de liña" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Largura de liña" + +#~ msgid "None" +#~ msgstr "Ningunha" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Preamplificación" + +#~ msgid "Stereo Link" +#~ msgstr "Ligazón estéreo" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Cadea lateral" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Nivelación automática" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Nivelación automática" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Nivelación automática" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Nivelación automática" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Esquerda" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Dereita" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Cadea lateral" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Cadea lateral" + +#~ msgid "Standard" +#~ msgstr "Estándar" + +#~ msgid "Flat" +#~ msgstr "Plano" + +#~ msgid "FFT Size" +#~ msgstr "Tamaño de FFT" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Saída" + +#~ msgid "Ceiling" +#~ msgstr "Teito" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Importar modelo" + +#~ msgid "Classic" +#~ msgstr "Clásico" + +#~ msgid "Modern" +#~ msgstr "Moderno" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Cadea lateral" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Modo de compresión" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Cadea lateral" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Modo de filtro de frecuencias baixas" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Modo de filtro de frecuencias baixas" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro de altas frecuencias" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Filtro de altas frecuencias" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Ganancia F1" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Curva" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Dividir" + +#~ msgid "Split 1/2" +#~ msgstr "Dividir 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecuencia" + +#~ msgid "Split 2/3" +#~ msgstr "Dividir 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecuencia" + +#~ msgid "Split 3/4" +#~ msgstr "Dividir 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecuencia" + +#~ msgid "Sub Band" +#~ msgstr "Sub-banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Restauración" + +#~ msgid "Max Reduction" +#~ msgstr "Redución" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Redución de ganancia" + +#~ msgid "Low Band" +#~ msgstr "Banda baixa" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redución de ganancia" + +#~ msgid "Mid Band" +#~ msgstr "Banda media" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redución de ganancia" + +#~ msgid "High Band" +#~ msgstr "Banda alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Desvío" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redución de ganancia" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Soltar" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redución de ganancia" + +#~ msgid "General" +#~ msgstr "Xeral" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Empregar o predeterminado" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Nivel de entrada" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Empregar o predeterminado" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Saída" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Reverberación" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Taxa da mostraxe predeterminada" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Máximo" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Ganancia máxima" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Saída de son por defecto" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Saída" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Preconfiguracións de saída: " + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Preconfiguracións de saída: " + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Nivel de entrada" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Preconfiguracións de entrada: " + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Preconfiguracións de entrada: " + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Módulos" + +#~ msgid "Clients" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Sinais de proba" + +#~ msgid "State" +#~ msgstr "Estado" + +#~ msgid "Enabled" +#~ msgstr "Activado" + +#~ msgid "Properties" +#~ msgstr "Propiedades" + +#~ msgid "Channels" +#~ msgstr "Canles" + +#~ msgid "Both" +#~ msgstr "Ambos" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Canles" + +#~ msgid "Waveform" +#~ msgstr "Forma de onda" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Táboa de senos" + +#~ msgid "White Noise" +#~ msgstr "Ruído branco" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Andel alto" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calidade" + +#~ msgid "Preserved" +#~ msgstr "Preservado" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Limpidez" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detección" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresión" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Compresión de ganancia" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Semitones" +#~ msgstr "Semitóns" + +#~ msgid "Octaves" +#~ msgstr "Oitavas" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Retirar este ficheiro de preconfiguracións" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Efectos de entrada" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#~ msgid "_General" +#~ msgstr "_Xeral" + +#~ msgid "Service" +#~ msgstr "Servizo" + +#~ msgid "Audio" +#~ msgstr "Audio" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Procesar todas as saí­das" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Procesar todas as entradas" + +#, fuzzy +#~ msgid "Inactivity Timeout" +#~ msgstr "Tempo límite da actividade" + +#~ msgid "Style" +#~ msgstr "Estilo" + +#~ msgid "Use Dark Theme" +#~ msgstr "Empregar tema escuro" + +#~ msgid "_Spectrum" +#~ msgstr "_Espectro" + +#~ msgid "Shape" +#~ msgstr "Forma" + +#~ msgid "Bars" +#~ msgstr "Barras" + +#~ msgid "Lines" +#~ msgstr "Liñas" + +#~ msgid "Dots" +#~ msgstr "Puntos" + +#~ msgid "Points" +#~ msgstr "Puntos" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Line Width" +#~ msgstr "Largura de liña" + +#~ msgid "Fill" +#~ msgstr "Encher" + +#~ msgid "Color" +#~ msgstr "Cor" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frecuencia" + +#~ msgid "Minimum" +#~ msgstr "Mínimo" + +#~ msgid "Maximum" +#~ msgstr "Máximo" + +#~ msgid "Load" +#~ msgstr "Cargar" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Gardar as opcións actuais neste ficheiro de preconfiguracións" + +#~ msgid "Remove this preset file" +#~ msgstr "Retirar este ficheiro de preconfiguracións" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Preconfiguracións de saída: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Sen preconfiguración" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importar preconfiguración" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Preconfiguracións de saída: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Preconfiguracións de saída: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Preconfiguracións de entrada: " + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Preconfiguracións de entrada: " + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Preconfiguracións de entrada: " + +#~ msgid "High Frequency Damping" +#~ msgstr "Amortecemento de frecuencias altas" + +#~ msgid "Room Size" +#~ msgstr "Tamaño da sala" + +#~ msgid "Small" +#~ msgstr "Pequena" + +#~ msgid "Medium" +#~ msgstr "Media" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Túnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/suave" + +#~ msgid "Experimental" +#~ msgstr "Experimental" + +#~ msgid "Diffusion" +#~ msgstr "Difusión" + +#~ msgid "Pre Delay" +#~ msgstr "Delonga previa" + +#~ msgid "Decay Time" +#~ msgstr "Tempo de decaemento" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantidade" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Nivel do destino" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantidade" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Nivel F2" + +#~ msgid "Bass Cut" +#~ msgstr "Paso alto" + +#~ msgid "Treble Cut" +#~ msgstr "Corte de agudos" + +#~ msgid "Ambience" +#~ msgstr "Ambiente" + +#~ msgid "Empty Walls" +#~ msgstr "Paredes baleiras" + +#~ msgid "Room" +#~ msgstr "Sala" + +#~ msgid "Large Empty Hall" +#~ msgstr "Sala de concertos grande baleira" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Sala de concertos grande ocupada" + +#~ msgid "Import Model" +#~ msgstr "Importar modelo" + +#~ msgid "Models" +#~ msgstr "Modelos" + +#, fuzzy +#~ msgid "Standard Model" +#~ msgstr "Modelo RNNoise estándar" + +#, fuzzy +#~ msgid "RNNoise Models List" +#~ msgstr "Modelo RNNoise estándar" + +#~ msgid "Active Model" +#~ msgstr "Modelo activo" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Modelo RNNoise estándar" + +#~ msgid "Overview" +#~ msgstr "Vista xeral" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Restabelecer EasyEffects." + +#, fuzzy +#~ msgid "Close the Window" +#~ msgstr "Agochar a xanela." + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balance" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Balance" + +#~ msgid "Softclip" +#~ msgstr "Compresión de ganancia" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Compresión de ganancia" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matriz estéreo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "DE>DE (Predeterminado de estéreo)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "ED>M (Estéreo a medio)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "M>ED (Medio a estéreo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "ED>EE (Mono canle esquerda)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "ED>DD (Mono canle dereita)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "ED>E+D(Mono suma de E+D)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "ED>DE (Canles estéreo invertidas)" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Base de estéreo" + +#~ msgid "Invert Phase" +#~ msgstr "Inverter fase" + +#~ msgid "Side Level" +#~ msgstr "Nivel lateral" + +#~ msgid "Side Balance" +#~ msgstr "Balance lateral" + +#~ msgid "Middle Level" +#~ msgstr "Nivel medio" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama medio" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Saída" + +#~ msgid "Delay L/R" +#~ msgstr "Delonga E/D" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Delonga E/D" + +#~ msgid "Stereo Base" +#~ msgstr "Base de estéreo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fase estéreo" + +#, fuzzy +#~ msgid "Running" +#~ msgstr "en execución" + +#, fuzzy +#~ msgid "Suspended" +#~ msgstr "suspendido" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "a crear" + +#, fuzzy +#~ msgid "Error" +#~ msgstr "erro" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Canles" + +#~ msgid "Output Presets: " +#~ msgstr "Preconfiguracións de saída: " + +#~ msgid "Input Presets: " +#~ msgstr "Preconfiguracións de entrada: " + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efectos de son para as aplicacións de PulseAudio" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Saír do EasyEffects. É últil cando se executa no modo de servizo." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Cargar unha preconfiguración. Exemplo: pulseefects-l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Restabelecer EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Agochar a xanela." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Desvío global. 1 para activar, 2 para desactivar e 3 para coñecer o estado" + +#~ msgid "Show available presets." +#~ msgstr "Mostrar preoconfiguracións dispoñíbeis." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Importar ficheiro de impulso" + +#~ msgid "Import Impulse File" +#~ msgstr "Importar ficheiro de impulso" + +#~ msgid "Open" +#~ msgstr "Abrir" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Impulse Response" +#~ msgstr "Resposta de impulso" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Resposta de impulso" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Importar impulso" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Importar ficheiro de impulso" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Non foi posíbel cargar o ficheiro de impulso" + +#~ msgid "Recorders" +#~ msgstr "Gravadoras" + +#~ msgid "Players" +#~ msgstr "Reprodutores" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "infinito" + +#~ msgid "Import APO Preset File" +#~ msgstr "Importar ficheiro de preconfiguracións de APO" + +#~ msgid "APO Presets" +#~ msgstr "Preconfiguracións de APO" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Retirar este ficheiro de preconfiguracións" + +#~ msgid "Remove" +#~ msgstr "Eliminar" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Saída" + +#~ msgid "Add" +#~ msgstr "Engadir" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Importar preconfiguración" + +#~ msgid "Import Model File" +#~ msgstr "Importar ficheiro de modelo" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Modelo RNNoise estándar" + +#~ msgid "Bass Enhancer" +#~ msgstr "Mellora de baixos" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Sonoridade" + +#~ msgid "Convolver" +#~ msgstr "Convolución" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Cristalizador" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Delonga" + +#~ msgid "Echo Canceller" +#~ msgstr "Cancelador de cco" + +#~ msgid "Equalizer" +#~ msgstr "Ecualizador" + +#~ msgid "Exciter" +#~ msgstr "Excitación" + +#~ msgid "Filter" +#~ msgstr "Filtro" + +#~ msgid "Limiter" +#~ msgstr "Limitador" + +#~ msgid "Maximizer" +#~ msgstr "Maximizador" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compresor multibanda" + +#~ msgid "Multiband Gate" +#~ msgstr "Porta multibanda" + +#~ msgid "Pitch" +#~ msgstr "Ton" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Reverberación" + +#~ msgid "Noise Reduction" +#~ msgstr "Redución de ruído" + +#~ msgid "Stereo Tools" +#~ msgstr "Ferramentas de estéreo" + +#~ msgid "Average" +#~ msgstr "Media" + +#~ msgid "Failed" +#~ msgstr "Fallou" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Empregar o predeterminado" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Retirar este ficheiro de preconfiguracións" + +#~ msgid "Import Presets" +#~ msgstr "Importar preconfiguración" + +#~ msgid "Start Service at Login" +#~ msgstr "Iniciar automaticamente coa sesión" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modelo activo" + +#~ msgid "Add to Blocklist" +#~ msgstr "Engadir á lista de bloqueo" + +#~ msgid "Blocklist" +#~ msgstr "Lista de bloqueos" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibración do micrófono" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Activar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Activar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latencia" + +#~ msgid "idle" +#~ msgstr "ocioso" + +#~ msgid "Faster" +#~ msgstr "Máis rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Conservar formante" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Saída" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Canles" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Chan" + +#~ msgid "Output Effects" +#~ msgstr "Efectos de saída" + +#~ msgid "Settings" +#~ msgstr "Configuración" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Configuración" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Duración" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Sinais de proba" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Sinais de proba" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar espectro" + +#~ msgid "Border" +#~ msgstr "Bordo" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de espectro" + +#~ msgid "Spectrum Color" +#~ msgstr "Cor do espectro" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Modelo activo" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Redución máxima da ganancia" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Ponderacións" + +#~ msgid "Dry" +#~ msgstr "Seco" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "Short Term" +#~ msgstr "Curto prazo" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Frecuencias baixas" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Fixación do volume e des/activación dos efectos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Inclúe un ecualizador con preconfiguracións incorporadas" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibración" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "Control de suavizado automático" + +#~ msgid "Limit" +#~ msgstr "Límite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Atenuación" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Efectos de son para as aplicacións de PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Efectos de son para as aplicacións de PulseAudio" + +#~ msgid "Help" +#~ msgstr "Axuda" + +#~ msgid "Calibration Microphone" +#~ msgstr "Calibración do micrófono" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Aplicar esta preconfiguración automaticamente sempre que o dispositivo en " +#~ "uso estea conectado ao sistema" + +#~ msgid "Version" +#~ msgstr "Versión" + +#, fuzzy +#~ msgid "Default Devices and Sampling Rate" +#~ msgstr "Taxa da mostraxe predeterminada" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Cadrado" + +#~ msgid "Saw" +#~ msgstr "Serra" + +#~ msgid "Triangle" +#~ msgstr "Triángulo" + +#~ msgid "Silence" +#~ msgstr "Silencio" + +#~ msgid "Pink Noise" +#~ msgstr "Ruído rosa" + +#~ msgid "Ticks" +#~ msgstr "Marcas" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruído gaussiano" + +#~ msgid "Red Noise" +#~ msgstr "Ruído vermello" + +#~ msgid "Blue Noise" +#~ msgstr "Ruído azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruído violeta" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Window" +#~ msgstr "Xanela" + +#~ msgid "Measure Noise" +#~ msgstr "Medir ruído" + +#~ msgid "Subtract Noise" +#~ msgstr "Subtraer ruído" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Provided by" +#~ msgstr "Fornecido por" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro estendido" + +#~ msgid "Low" +#~ msgstr "Baixo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alta" + +#~ msgid "Suppression Level" +#~ msgstr "Nivel de supresión" + +#~ msgid "Delay Agnostic" +#~ msgstr "Agnóstico coa delonga" + +#~ msgid "Very High" +#~ msgstr "Moi alta" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supresión de ruído" + +#~ msgid "Adaptive Digital" +#~ msgstr "Dixital adaptativo" + +#~ msgid "Fixed Digital" +#~ msgstr "Dixital fixo" + +#~ msgid "Gain Controller" +#~ msgstr "Controlador de ganancia" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidade de detección" + +#~ msgid "Very Low" +#~ msgstr "Moi baixa" + +#~ msgid "Voice Detector" +#~ msgstr "Detector de voces" + +#~ msgid "Use Custom Color" +#~ msgstr "Empregar cor personalizada" + +#~ msgid "Use Gradient" +#~ msgstr "Empregar gradación" + +#~ msgid "Gradient Color" +#~ msgstr "Cor de gradación" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importar ficheiro de resposta de impulso" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Seleccione o ficheiro de resposta de impulso" + +#~ msgid "Aggressive Mode" +#~ msgstr "Modo agresivo" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Despois" + +#~ msgid "Loudness Range" +#~ msgstr "Intervalo de sonoridade" + +#~ msgid "Loudness Compensator" +#~ msgstr "Compensador de sonoridade" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#~ msgid "Based on" +#~ msgstr "Baseado en" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar silencio" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Conecte de novo o micrófono para aplicar os cambios feitos na lista de " +#~ "bloqueos" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Reinicie o reprodutor para aplicar os cambios feitos na lista de boqueos" + +#~ msgid "Low-pass Frequency" +#~ msgstr "Frecuencias baixas" + +#~ msgid "Advanced" +#~ msgstr "Avanzado" + +#~ msgid "Apply APO Preset" +#~ msgstr "Aplicar preconfiguración de APO" + +#~ msgid "Muted" +#~ msgstr "Enmudecido" + +#~ msgid "Distant Headphones" +#~ msgstr "Auriculares distantes" + +#~ msgid "Niceness" +#~ msgstr "Prioridade" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de prioridade" + +#~ msgid "Priority" +#~ msgstr "Prioridade" + +#~ msgid "About" +#~ msgstr "Acerca de" + +#~ msgid "Default Source" +#~ msgstr "Fonte predeterminada" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de mostraxe predeterminado" + +#~ msgid "Channel Mapping" +#~ msgstr "Asignación de canles" + +#~ msgid "Server" +#~ msgstr "Servidor" + +#~ msgid "File" +#~ msgstr "Ficheiro" + +#~ msgid "Configuration" +#~ msgstr "Configuración" + +#~ msgid "Resamplers" +#~ msgstr "Resampleadores" + +#~ msgid "Pipeline Input" +#~ msgstr "Entrada de tubaxe" + +#~ msgid "Buffer" +#~ msgstr "Búfer" + +#~ msgid "Pipeline Output" +#~ msgstr "Saída de tubaxe" + +#~ msgid "Block Size" +#~ msgstr "Tamaño do bloque" + +#~ msgid "Sampling" +#~ msgstr "Mostraxe" + +#~ msgid "Minimum Frequency" +#~ msgstr "Frecuencia mínima" + +#~ msgid "Maximum Frequency" +#~ msgstr "Frecuencia máxima" diff --git a/po/news/hr.po b/po/news/hr.po new file mode 100644 index 0000000..7a9ac93 --- /dev/null +++ b/po/news/hr.po @@ -0,0 +1,2943 @@ +# Croatian translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the EasyEffects package. +# gogo , 2017. +# rooty , 2018. +# flipwise , 2018. +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-09-29 07:18+0000\n" +"Last-Translator: Milo Ivir \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.14.1\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Zvučni efekti za PipeWire aplikacije" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects je napredan alat za manipulaciju zvuka. Uključuje ekvalizator, " +"graničnik, kompresor i alat odjeka. Sadrži i ugrađeni analizator spektra." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Zato što EasyEffects koristi zadani PulseAudio zvučni poslužitelj, radit će " +"s većinom, ako ne i sa svim aplikacijama koje koristite. Sve podržane " +"aplikacije su prikazane u glavnom prozoru, gdje se na svaku pojedinačno može " +"omogućiti utjecaj efekata." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Osim manipuliranja izlaza zvuka, EasyEffects može primijeniti efekte i na " +"ulazni uređaj, poput mikrofona. To je na primjer korisno pri snimanju zvuka, " +"ali isto tako funkcionira dobro i tijekom glasovnih razgovora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Kad je EasyEffects pokrenut, upotrijebit će podešavanja od prošlog puta. " +"Također je moguće spremiti sve trenutne postavke kao predloške." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Broj raspona" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ekvalizator, kompresor i drugi audio efekti" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "graničnik;kompresor;odjek;ekvalizator;automatska glasnoća zvuka;" + +#, fuzzy +#~ msgid "\"Presets\"" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Omogući" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplikacije" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplikacije" + +#, fuzzy +#~ msgid "_Shortcuts" +#~ msgstr "Kratkoročno" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Postavke" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Global Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Aplikacije" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Prazna soba" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplikacije" + +#~ msgid "Target" +#~ msgstr "Meta" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Najveće pojačanje" + +#~ msgid "Momentary" +#~ msgstr "Trenutačno" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Kratkoročno" + +#~ msgid "Integrated" +#~ msgstr "Integrirano" + +#, fuzzy +#~ msgid "Reset History" +#~ msgstr "Vrati izvornu kvalitetu" + +#~ msgid "Relative" +#~ msgstr "Relativno" + +#~ msgid "Range" +#~ msgstr "Raspon" + +#~ msgid "Loudness" +#~ msgstr "Glasnoća" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Pojačanje ulaza" + +#~ msgid "Input" +#~ msgstr "Ulaz" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Pojačanje ulaza" + +#~ msgid "Output" +#~ msgstr "Izlaz" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Pojačanje ulaza" + +#~ msgid "Reset" +#~ msgstr "Vrati na tvorničke postavke" + +#, fuzzy +#~ msgid "Device" +#~ msgstr "Ulazni uređaj" + +#~ msgid "Name" +#~ msgstr "Naziv" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Kompresija" + +#~ msgid "Listen" +#~ msgstr "Poslušaj" + +#~ msgid "Blend Harmonics" +#~ msgstr "Spajanje harmonijskog reda" + +#~ msgid "3rd" +#~ msgstr "3." + +#~ msgid "2nd" +#~ msgstr "2." + +#~ msgid "Amount" +#~ msgstr "Jačina" + +#~ msgid "Harmonics" +#~ msgstr "Harmonijski red" + +#~ msgid "Scope" +#~ msgstr "Raspon" + +#~ msgid "Floor" +#~ msgstr "Dno" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Dno" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplikacije" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Aplikacije" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Aplikacije" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Aplikacije" + +#~ msgid "Compressor" +#~ msgstr "Kompresor" + +#~ msgid "Mode" +#~ msgstr "Način" + +#, fuzzy +#~ msgid "Compression Mode" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Jačina" + +#~ msgid "Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Vrijeme opadanja intenziteta signala" + +#~ msgid "Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Prag" + +#~ msgid "Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Prag" + +#~ msgid "Ratio" +#~ msgstr "Omjer" + +#, fuzzy +#~ msgid "Knee" +#~ msgstr "Koljeno" + +#, fuzzy +#~ msgid "Makeup" +#~ msgstr "Dorada" + +#, fuzzy +#~ msgid "Sidechain" +#~ msgstr "Postranični ulaz" + +#~ msgid "Peak" +#~ msgstr "Vrhunac" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#, fuzzy +#~ msgid "Low-Pass" +#~ msgstr "Nizak prolaz" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "Source" +#~ msgstr "Izvor" + +#, fuzzy +#~ msgid "Middle" +#~ msgstr "Srednji nivo" + +#, fuzzy +#~ msgid "Side" +#~ msgstr "Strana" + +#~ msgid "Left" +#~ msgstr "Lijevo" + +#~ msgid "Right" +#~ msgstr "Desno" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "Feed-back" +#~ msgstr "Dovod zvuka" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Ulazni uređaj" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Aplikacije" + +#~ msgid "Lookahead" +#~ msgstr "Preduhvatiti" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Filter visokog prolaza" + +#~ msgid "Frequency" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "12 dB/oct" +#~ msgstr "12dB/oct niski prolaz" + +#, fuzzy +#~ msgid "24 dB/oct" +#~ msgstr "24dB/oct niski prolaz" + +#, fuzzy +#~ msgid "36 dB/oct" +#~ msgstr "36dB/oct niski prolaz" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Filter visokog prolaza" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Prigušivanje visokih frekvencija" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Filter visokog prolaza" + +#~ msgid "Gain" +#~ msgstr "Pojačanje" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Kanali" + +#~ msgid "R" +#~ msgstr "D" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Reakcija impulsa" + +#, fuzzy +#~ msgid "Stereo Width" +#~ msgstr "Stereo širina" + +#~ msgid "Spectrum" +#~ msgstr "Spektar" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Automatsko pojačavanje" + +#~ msgid "Rate" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Samples" +#~ msgstr "Semplovi" + +#, fuzzy +#~ msgid "Duration" +#~ msgstr "Trajanje" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Reakcija impulsa" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Izlaz" + +#, fuzzy +#~ msgid "Import Impulse" +#~ msgstr "Učitaj impuls" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Učitaj impuls datoteku" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Učitaj impuls datoteku" + +#~ msgid "Default" +#~ msgstr "Tvorničke postavke" + +#~ msgid "Cutoff" +#~ msgstr "Prekid" + +#~ msgid "Feed" +#~ msgstr "Dovod zvuka" + +#~ msgid "Bypass" +#~ msgstr "Premosnica" + +#~ msgid "Mute" +#~ msgstr "Bezvučno" + +#~ msgid "Detection" +#~ msgstr "Detekcija" + +#~ msgid "Wide" +#~ msgstr "Široko" + +#, fuzzy +#~ msgid "Split" +#~ msgstr "Razdvojeno" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Razdvojeno" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Vrhunac" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Pojačanje" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Razina" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Vrhunac Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frekvencija" + +#~ msgid "Laxity" +#~ msgstr "Popustljivost" + +#, fuzzy +#~ msgid "Detected" +#~ msgstr "Detektirano" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Smanjenje" + +#~ msgid "Frame Size" +#~ msgstr "Veličina okvira" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filter" + +#~ msgid "Bands" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Split Channels" +#~ msgstr "Kanali" + +#~ msgid "Flat Response" +#~ msgstr "Ravan izlaz" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Izračunaj frekvencije" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "High Pass" +#~ msgstr "Filter visokog prolaza" + +#~ msgid "High Shelf" +#~ msgstr "Visoki shelf" + +#~ msgid "Low Pass" +#~ msgstr "Nizak prolaz" + +#~ msgid "Low Shelf" +#~ msgstr "Niski shelf" + +#~ msgid "Resonance" +#~ msgstr "Rezonancija" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Nizak prolaz" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Broj raspona" + +#~ msgid "Width" +#~ msgstr "Širina" + +#~ msgid "Quality" +#~ msgstr "Kvaliteta" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Vrh" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Detekcija" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Kompresija" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct niski prolaz" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct niski prolaz" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct niski prolaz" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct visoki prolaz" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct visoki prolaz" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct visoki prolaz" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct band prolaz" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct band prolaz" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct band prolaz" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct odbijanje banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct odbijanje banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct odbijanje banda" + +#~ msgid "Inertia" +#~ msgstr "Inercija" + +#~ msgid "Gate" +#~ msgstr "Vrata" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Integrirano" + +#~ msgid "Oversampling" +#~ msgstr "Jači sampling" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Široko" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Široko" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Širina" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Širina" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Širina" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Aplikacije" + +#~ msgid "Stereo Link" +#~ msgstr "Stereo veza" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Automatsko pojačavanje" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Automatsko pojačavanje" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Automatsko pojačavanje" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Automatsko pojačavanje" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Lijevo" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Desno" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Veličina okvira" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Izlaz" + +#~ msgid "Ceiling" +#~ msgstr "Vrh" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Učitaj impuls" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Način" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Postranični ulaz" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filter" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Filter" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filter visokog prolaza" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Filter visokog prolaza" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Pojačanje ulaza" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Razdvojeno" + +#, fuzzy +#~ msgid "Split 1/2" +#~ msgstr "Razdvojeno 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Split 2/3" +#~ msgstr "Razdvojeno 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Split 3/4" +#~ msgstr "Razdvojeno 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Sub Band" +#~ msgstr "Sub band" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Dorada" + +#~ msgid "Max Reduction" +#~ msgstr "Smanjenje" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Low Band" +#~ msgstr "Niski band" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Dorada" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Mid Band" +#~ msgstr "Srednji band" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Dorada" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "High Band" +#~ msgstr "Visoki band" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Premosnica" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Pokretanje" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Vrijeme prijelaza" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Broj raspona" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Dorada" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Ograničenje pojačanja" + +#~ msgid "General" +#~ msgstr "Općenito" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Koristi tvorničke postavke" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Ulazni uređaj" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Koristi tvorničke postavke" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Pojačanje ulaza" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Reverberacija" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Jači sampling" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Najveće pojačanje" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Tvorničke postavke" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Pojačanje ulaza" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Ulazni uređaj" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Clients" +#~ msgstr "Centi" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Centi" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Testni signali" + +#~ msgid "State" +#~ msgstr "Stanje" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Omogući" + +#~ msgid "Channels" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Sinus tablica" + +#~ msgid "White Noise" +#~ msgstr "Bijeli šum" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Visoki shelf" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvaliteta" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Oštrina" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detekcija" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresija" + +#~ msgid "Cents" +#~ msgstr "Centi" + +#~ msgid "Semitones" +#~ msgstr "Polustepeni" + +#~ msgid "Octaves" +#~ msgstr "Oktave" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Ulazni efekti" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "Općenito" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Ulazni uređaj" + +#~ msgid "Use Dark Theme" +#~ msgstr "Koristi tamnu temu" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Spektar" + +#~ msgid "Points" +#~ msgstr "Broj traka" + +#, fuzzy +#~ msgid "Height" +#~ msgstr "Visina" + +#, fuzzy +#~ msgid "Line Width" +#~ msgstr "Širina" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Maksimum" + +#, fuzzy +#~ msgid "Maximum" +#~ msgstr "Maksimum" + +#, fuzzy +#~ msgid "Save current settings to this preset file" +#~ msgstr "Spremi trenutne postavke u predložak" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Stvori predložak" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Učitaj predloške" + +#~ msgid "High Frequency Damping" +#~ msgstr "Prigušivanje visokih frekvencija" + +#~ msgid "Room Size" +#~ msgstr "Veličina sobe" + +#, fuzzy +#~ msgid "Small" +#~ msgstr "Mala" + +#~ msgid "Medium" +#~ msgstr "Osrednja" + +#, fuzzy +#~ msgid "Large" +#~ msgstr "Velika" + +#~ msgid "Tunnel" +#~ msgstr "Tunel" + +#~ msgid "Large/smooth" +#~ msgstr "Velika/glatko" + +#~ msgid "Experimental" +#~ msgstr "Eksperimentalna" + +#~ msgid "Diffusion" +#~ msgstr "Difuzija" + +#, fuzzy +#~ msgid "Pre Delay" +#~ msgstr "Prijevremeno kašnjenje" + +#~ msgid "Decay Time" +#~ msgstr "Vrijeme opadanja intenziteta signala" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Jačina" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Ciljana razina" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Jačina" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Razina" + +#~ msgid "Bass Cut" +#~ msgstr "Odrezivanje basa" + +#~ msgid "Treble Cut" +#~ msgstr "Odrezivanje trebla" + +#, fuzzy +#~ msgid "Ambience" +#~ msgstr "Ambijent" + +#~ msgid "Empty Walls" +#~ msgstr "Prazna soba" + +#, fuzzy +#~ msgid "Room" +#~ msgstr "Soba" + +#~ msgid "Large Empty Hall" +#~ msgstr "Velika prazna dvorana" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Velika popunjena dvorana" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Učitaj impuls" + +#, fuzzy +#~ msgid "Models" +#~ msgstr "Način" + +#, fuzzy +#~ msgid "Active Model" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Overview" +#~ msgstr "Ulazni uređaj" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Ravnoteža" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Ravnoteža" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Stranična razina" + +#, fuzzy +#~ msgid "Stereo Matrix" +#~ msgstr "Stereo matrica" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Stereo baza" + +#~ msgid "Invert Phase" +#~ msgstr "Inverzija faze" + +#, fuzzy +#~ msgid "Side Level" +#~ msgstr "Stranična razina" + +#, fuzzy +#~ msgid "Side Balance" +#~ msgstr "Stranična ravnoteža" + +#, fuzzy +#~ msgid "Middle Level" +#~ msgstr "Srednji nivo" + +#, fuzzy +#~ msgid "Middle Panorama" +#~ msgstr "Srednja panorama" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Pojačanje ulaza" + +#, fuzzy +#~ msgid "Delay L/R" +#~ msgstr "Kašnjenje L/D" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Kašnjenje L/D" + +#, fuzzy +#~ msgid "Stereo Base" +#~ msgstr "Stereo baza" + +#, fuzzy +#~ msgid "Stereo Phase" +#~ msgstr "Stereo faza" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "Postavke" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Output Presets: " +#~ msgstr "Predlošci: " + +#, fuzzy +#~ msgid "Input Presets: " +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Zvučni efekti za Pulseaudio aplikacije" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "Zatvori EasyEffects. Korisno pri upotrebi u servisnom načinu pokretanja." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Učitaj predložak. Primjer: easyeffects -l music" + +#, fuzzy +#~ msgid "Reset EasyEffects." +#~ msgstr "EasyEffects" + +#~ msgid "Show available presets." +#~ msgstr "Prikaži dostupne predloške." + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Učitaj impuls datoteku" + +#, fuzzy +#~ msgid "Import Impulse File" +#~ msgstr "Učitaj impuls datoteku" + +#~ msgid "Open" +#~ msgstr "Otvori" + +#~ msgid "Cancel" +#~ msgstr "Poništi" + +#, fuzzy +#~ msgid "Impulse Response" +#~ msgstr "Reakcija impulsa" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Reakcija impulsa" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Učitaj impuls" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Učitaj impuls datoteku" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Nije bilo moguće učitati impuls datoteku" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Import APO Preset File" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "APO Presets" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Pojačanje ulaza" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "Učitaj impuls datoteku" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Kompresija" + +#~ msgid "Bass Enhancer" +#~ msgstr "Pojačanje basa" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Glasnoća" + +#~ msgid "Convolver" +#~ msgstr "Konvolver" + +#~ msgid "Crossfeed" +#~ msgstr "Križno spajanje" + +#, fuzzy +#~ msgid "Crystalizer" +#~ msgstr "Kristalizator" + +#~ msgid "Deesser" +#~ msgstr "De-esiranje" + +#~ msgid "Delay" +#~ msgstr "Kašnjenje" + +#~ msgid "Echo Canceller" +#~ msgstr "Poništenje jeke" + +#~ msgid "Equalizer" +#~ msgstr "Ekvalizator" + +#~ msgid "Exciter" +#~ msgstr "Uzbuđivač" + +#, fuzzy +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Limiter" +#~ msgstr "Graničnik" + +#~ msgid "Maximizer" +#~ msgstr "Maksimizer" + +#, fuzzy +#~ msgid "Multiband Compressor" +#~ msgstr "Višerasponski kompresor" + +#, fuzzy +#~ msgid "Multiband Gate" +#~ msgstr "Višerasponska vrata" + +#~ msgid "Pitch" +#~ msgstr "Visina" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Reverberacija" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Stereo Tools" +#~ msgstr "Stereo alati" + +#, fuzzy +#~ msgid "Average" +#~ msgstr "Prosjek" + +#~ msgid "Failed" +#~ msgstr "Nije uspjelo" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Koristi tvorničke postavke" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Kompresija" + +#~ msgid "Import Presets" +#~ msgstr "Učitaj predloške" + +#~ msgid "Start Service at Login" +#~ msgstr "Pokreni servis pri pokretanju računala" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Crna lista" + +#~ msgid "Blocklist" +#~ msgstr "Crna lista" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibracija mikrofona" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Omogući" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Omogući" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latencija" + +#~ msgid "Faster" +#~ msgstr "Brže" + +#~ msgid "Preserve Formant" +#~ msgstr "Sačuvaj formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Pojačanje ulaza" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Dno" + +#~ msgid "Output Effects" +#~ msgstr "Izlazni efekti" + +#~ msgid "Settings" +#~ msgstr "Postavke" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Postavke" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Trajanje" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Testni signali" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Testni signali" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spektar" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spektar" + +#, fuzzy +#~ msgid "Spectrum Color" +#~ msgstr "Boja spektra" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Ograničenje pojačanja" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Otežanja" + +#~ msgid "Dry" +#~ msgstr "Suhoća" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "S/C Razina" + +#~ msgid "Short Term" +#~ msgstr "Kratkoročno" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Nizak prolaz" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Postavi razinu zvuka te uključi/isključi efekte" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Uključuje i ekvalizator s ugrađenim predlošcima" + +#~ msgid "Input Limiter" +#~ msgstr "Graničnik ulaza" + +#~ msgid "Calibration" +#~ msgstr "Kalibracija" + +#~ msgid "Limit" +#~ msgstr "Granica" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Prigušenje" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Zvučni efekti za Pulseaudio aplikacije" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Zvučni efekti za Pulseaudio aplikacije" + +#~ msgid "Help" +#~ msgstr "Pomoć" + +#, fuzzy +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibracija mikrofona" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Kvadrat" + +#~ msgid "Saw" +#~ msgstr "Pila" + +#~ msgid "Triangle" +#~ msgstr "Trokut" + +#, fuzzy +#~ msgid "Silence" +#~ msgstr "Tišina" + +#~ msgid "Pink Noise" +#~ msgstr "Rozi šum" + +#~ msgid "Ticks" +#~ msgstr "Otkucaji" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussov šum" + +#~ msgid "Red Noise" +#~ msgstr "Crveni šum" + +#~ msgid "Blue Noise" +#~ msgstr "Plavi šum" + +#~ msgid "Violet Noise" +#~ msgstr "Ljubičasti šum" + +#~ msgid "Volume" +#~ msgstr "Glasnoća" + +#~ msgid "Window" +#~ msgstr "Prozor" + +#~ msgid "Measure Noise" +#~ msgstr "Izmjeri šum" + +#~ msgid "Subtract Noise" +#~ msgstr "Izdvoji šum" + +#~ msgid "Extended Filter" +#~ msgstr "Prošireni filter" + +#~ msgid "Low" +#~ msgstr "Nisko" + +#~ msgid "Moderate" +#~ msgstr "Umjereno" + +#~ msgid "High" +#~ msgstr "Visoko" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Razina supresije" + +#, fuzzy +#~ msgid "Very High" +#~ msgstr "Jako visoko" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supresija buke" + +#~ msgid "Gain Controller" +#~ msgstr "Kontrola pojačanja" + +#~ msgid "Detection Likelihood" +#~ msgstr "Vjerojatnost detekcije" + +#~ msgid "Very Low" +#~ msgstr "Vrlo nisko" + +#~ msgid "Voice Detector" +#~ msgstr "Detektor glasa" + +#~ msgid "Use Custom Color" +#~ msgstr "Koristi vlastitu boju" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Učitaj datoteku reakcije impulsa" + +#, fuzzy +#~ msgid "Select the impulse Response File" +#~ msgstr "Odaberite datoteku reakcije impulsa" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Kompresija" + +#, fuzzy +#~ msgid "Loudness Range" +#~ msgstr "Glasnoća" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Tvorničke postavke" + +#, fuzzy +#~ msgid "Default Source" +#~ msgstr "Tvorničke postavke" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Trajanje" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Izračunaj frekvencije" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Napredne postavke" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Predlošci" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Detekcija" + +#, fuzzy +#~ msgid "Muted" +#~ msgstr "Bezvučno" + +#~ msgid "Distant Headphones" +#~ msgstr "Udaljene slušalice" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frekvencija" + +#, fuzzy +#~ msgid "Channel Mapping" +#~ msgstr "Kanali" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Promjena frekvencije" + +#~ msgid "Buffer" +#~ msgstr "Latencija međuspremnika" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Ekvalizator - Izlaz" + +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Veličina bloka" + +#~ msgid "Resampler" +#~ msgstr "Promjena frekvencije" + +#~ msgid "paused" +#~ msgstr "pauzirano" + +#~ msgid "playing" +#~ msgstr "reprodukcija" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Učitaj predloške" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Ograničenje pojačanja" diff --git a/po/news/id_ID.po b/po/news/id_ID.po new file mode 100644 index 0000000..67fa537 --- /dev/null +++ b/po/news/id_ID.po @@ -0,0 +1,3194 @@ +# This is Indonesia translate file for PE. We are need your help to completely translate this project. You can translate PuleEffect's help file to Indonesian to develop this project. If you any question about translating process, just send email that I have been desribed below. But if you want to support such as reporting any bugs, go ahead to github page @ https://github.com/wwmm/easyeffects/ +# Copyright (C) 2018 +# This file is distributed under the same license as the EasyEffects package. +# Dika Muhamad A. , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-11-04 05:01+0000\n" +"Last-Translator: Reno Sifana Paksi \n" +"Language-Team: Indonesian \n" +"Language: id_ID\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.14.2-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efek Audio untuk Aplikasi PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects merupakan aplikasi pengubah efek suara. Berisi modul-modul " +"seperti ekualiser, pembatas, kompresor, dan modul penggema. Dilengkapi juga " +"dengan Penganalisis Spektrum untuk memantau efek yang diterapkan." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects adalah penerus dari PulseEffects. Easy Effects hanya mendukung " +"server audio PipeWire. Pengguna PulseAudio sebaiknya menggunakan " +"PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"EasyEffects bekerja dengan aplikasi berbasis PulseAudio. Aplikasi yang " +"mendukung EasyEffects akan ditampilkan pada jendela utama aplikasi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Selain mengolah suara yang keluar, EasyEffects dapat mengolah efek suara " +"seperti pada mikrofon dan pengakat masukan lainnya. EasyEffects juga bekerja " +"dengan baik ketika dipakai dalam percakapan suara." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Ketika EasyEffects dijalankan, preset terakhir yang dipakai akan termuat " +"otomatis. Anda juga dapat menyimpan pengaturan yang telah dibuat ke dalam " +"profil tersendiri." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Halaman utama menampilkan dua aplikasi keluaran audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Fitur:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Perbaikan Bug:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Catatan lainnya:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Terjemahan yang diperbarui" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +#, fuzzy +msgid "The documentation has been updated." +msgstr "Dukumentasi telah diperbarui" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Terjemahan yang ditingkatkan" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +#, fuzzy +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"Antarmuka efek tidak lagi termuat ketika plugin lv2 terkait tidak terpasang " +"di sistem." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "Dukumentasi telah diperbarui" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "Pesan debug yang ditingkatkan" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Terjemahan yang diperbarui" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Terjemahan yang ditingkatkan" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Memperbaiki bug dimana EasyEffects bisa macet saat menutup jendelanya " +"sementara efek sedang diterapkan." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +#, fuzzy +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" +"Ikon aplikasi kami sekarang kompatibel dengan desktop yang menggunakan QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Band 1" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Equalizer, Compressor and Other Audio Effects" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limiter;compressor;reverberation;equalizer;autovolume;" + +#~ msgid "\"Presets\"" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Hidupkan" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplikasi" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplikasi" + +#, fuzzy +#~ msgid "_Shortcuts" +#~ msgstr "Waktu Singkat" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Setelan" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Global Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Aplikasi" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Tembok Kosong" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplikasi" + +#~ msgid "Target" +#~ msgstr "Target" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Angkatan Maksimal" + +#~ msgid "Momentary" +#~ msgstr "Efek Sejenak" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Waktu Singkat" + +#~ msgid "Integrated" +#~ msgstr "Terintegrasi" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Terapkan Gradien warna" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Terapkan Gradien warna" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Terapkan Gradien warna" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Terapkan Gradien warna" + +#~ msgid "Relative" +#~ msgstr "Relatif" + +#~ msgid "Range" +#~ msgstr "Rentang" + +#~ msgid "Loudness" +#~ msgstr "Kelantangan" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Gain Input" + +#~ msgid "Input" +#~ msgstr "Masukan" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Gain Input" + +#~ msgid "Output" +#~ msgstr "Output" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Gain Input" + +#~ msgid "Reset" +#~ msgstr "Atur Ulang" + +#, fuzzy +#~ msgid "Device" +#~ msgstr "Pembatas Masukan" + +#~ msgid "Name" +#~ msgstr "Nama" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Hapus Preset Pemuatan Otomatis" + +#~ msgid "Listen" +#~ msgstr "Uji Pengaturan" + +#~ msgid "Blend Harmonics" +#~ msgstr "Pencampuran Harmonik" + +#~ msgid "3rd" +#~ msgstr "Ketiga" + +#~ msgid "2nd" +#~ msgstr "Kedua" + +#~ msgid "Amount" +#~ msgstr "Besaran" + +#~ msgid "Harmonics" +#~ msgstr "Harmonik" + +#~ msgid "Scope" +#~ msgstr "Frekuensi Target Bass" + +#~ msgid "Floor" +#~ msgstr "Monitor Lantai" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Monitor Lantai" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplikasi" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Aplikasi" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Aplikasi" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Aplikasi" + +#~ msgid "Compressor" +#~ msgstr "Kompresor" + +#~ msgid "Mode" +#~ msgstr "Modus" + +#~ msgid "Downward" +#~ msgstr "Kompresi Menekan" + +#~ msgid "Upward" +#~ msgstr "Kompresi Mengangkat" + +#, fuzzy +#~ msgid "Compression Mode" +#~ msgstr "Modus Kompresi" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Besaran" + +#~ msgid "Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Waktu Real Time" + +#~ msgid "Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Ambang Batas" + +#~ msgid "Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Ambang Batas" + +#~ msgid "Ratio" +#~ msgstr "Rasio" + +#~ msgid "Knee" +#~ msgstr "Knee" + +#~ msgid "Makeup" +#~ msgstr "Penguatan" + +#~ msgid "Sidechain" +#~ msgstr "Sidechain" + +#~ msgid "Peak" +#~ msgstr "Peak" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#, fuzzy +#~ msgid "Low-Pass" +#~ msgstr "Band Rendah" + +#~ msgid "Uniform" +#~ msgstr "Uniform" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Sidechain" + +#~ msgid "Source" +#~ msgstr "Sumber" + +#, fuzzy +#~ msgid "Middle" +#~ msgstr "Volume Kanal Tengah" + +#~ msgid "Side" +#~ msgstr "Volume Kanal Sisi" + +#~ msgid "Left" +#~ msgstr "Kiri" + +#~ msgid "Right" +#~ msgstr "Kanan" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Sidechain" + +#~ msgid "Type" +#~ msgstr "Tipe" + +#~ msgid "Feed-forward" +#~ msgstr "Feed-forward" + +#, fuzzy +#~ msgid "Feed-back" +#~ msgstr "Volume Penyuapan" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Sidechain" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Pembatas Masukan" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Pra-Amplifikasi" + +#~ msgid "Reactivity" +#~ msgstr "Pengaktifan Ulang" + +#~ msgid "Lookahead" +#~ msgstr "Lookahead" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Sidechain" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "High Pass" + +#~ msgid "Frequency" +#~ msgstr "Frekuensi" + +#~ msgid "Off" +#~ msgstr "Mati" + +#, fuzzy +#~ msgid "12 dB/oct" +#~ msgstr "Lowpass 12dB/oktaf" + +#, fuzzy +#~ msgid "24 dB/oct" +#~ msgstr "Lowpass 24dB/oktaf" + +#, fuzzy +#~ msgid "36 dB/oct" +#~ msgstr "Lowpass 36dB/oktaf" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Filter High Pass" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Frekuensi Tinggi" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Filter High Pass" + +#~ msgid "Gain" +#~ msgstr "Besar Gain" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Besar Lembah" + +#~ msgid "Curve" +#~ msgstr "Bentuk Kurva" + +#~ msgid "L" +#~ msgstr "Kiri" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Total Kanal" + +#~ msgid "R" +#~ msgstr "Kanan" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Pisahkan Kanal" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Respons Impuls" + +#~ msgid "Stereo Width" +#~ msgstr "Lebar Stereo" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Log Scale" +#~ msgstr "Skala" + +#~ msgid "Autogain" +#~ msgstr "Autogain" + +#~ msgid "Rate" +#~ msgstr "Rataan Frekuensi" + +#~ msgid "Samples" +#~ msgstr "Jumlah Sampel" + +#~ msgid "Duration" +#~ msgstr "Durasi" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Respons Impuls" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Output" + +#~ msgid "Import Impulse" +#~ msgstr "Muat Impuls" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Muat Berkas Impuls" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Muat Berkas Impuls" + +#~ msgid "Default" +#~ msgstr "Aturan Bawaan" + +#~ msgid "Cutoff" +#~ msgstr "Frekuensi Potong" + +#~ msgid "Feed" +#~ msgstr "Volume Penyuapan" + +#~ msgid "Bypass" +#~ msgstr "Bypass" + +#~ msgid "Mute" +#~ msgstr "Bungkam" + +#~ msgid "Detection" +#~ msgstr "Deteksi" + +#~ msgid "Wide" +#~ msgstr "Luas" + +#~ msgid "Split" +#~ msgstr "Pisah" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Pisah" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frekuensi" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Peak" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frekuensi" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Besar Gain" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frekuensi" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Level" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frekuensi" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Peak Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frekuensi" + +#~ msgid "Laxity" +#~ msgstr "Laksitas" + +#~ msgid "Detected" +#~ msgstr "Terlacak" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Pengurangan" + +#~ msgid "Frame Size" +#~ msgstr "Ukuran Bingkai" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filter" + +#~ msgid "Bands" +#~ msgstr "Jumlah Band" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "Split Channels" +#~ msgstr "Pisahkan Kanal" + +#~ msgid "Flat Response" +#~ msgstr "Respons Datar" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Hitung Frekuensi" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Preset" + +#~ msgid "Bell" +#~ msgstr "Bell" + +#, fuzzy +#~ msgid "High Pass" +#~ msgstr "High Pass" + +#~ msgid "High Shelf" +#~ msgstr "High Shelf" + +#, fuzzy +#~ msgid "Low Pass" +#~ msgstr "Pass Rendah" + +#~ msgid "Low Shelf" +#~ msgstr "Low Shelf" + +#~ msgid "Resonance" +#~ msgstr "Resonansi" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Pass Rendah" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Jumlah Band" + +#~ msgid "Slope" +#~ msgstr "Besar Lembah" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Besar Lembah" + +#~ msgid "Width" +#~ msgstr "Lebar" + +#~ msgid "Quality" +#~ msgstr "Kualitas" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Langit-langit" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Deteksi" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Hapus Berkas Preset Ini" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Lowpass 12dB/oktaf" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Lowpass 24dB/oktaf" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Lowpass 36dB/oktaf" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Highpass 12dB/oktaf" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Highpass 24dB/oktaf" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Highpass 36dB/oktaf" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Bandpass 6dB/oktaf" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Bandpass 12dB/oktaf" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Bandpass 18dB/oktaf" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Bandreject 6dB/oktaf" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Bandpass 12dB/oktaf" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Bandpass 18dB/oktaf" + +#~ msgid "Inertia" +#~ msgstr "Kelembaman" + +#~ msgid "Gate" +#~ msgstr "Gate" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Terintegrasi" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "Oversampling" +#~ msgstr "Peningkat Sampling" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Luas" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Luas" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Lebar" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Lebar" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Lebar" + +#~ msgid "None" +#~ msgstr "Biarkan" + +#~ msgid "Half x2(3L)" +#~ msgstr "Setengah x2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "Setengah x3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "Setengah x3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "Setengah x4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "Setengah x4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "Setengah x6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "Setengah x6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "Setengah x8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "Setengah x8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "Penuh x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "Penuh x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "Penuh x3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "Penuh x3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "Penuh x4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "Penuh x4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "Penuh x6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "Penuh x6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "Penuh x8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "Penuh x8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "SC PreAmp" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Pra-Amplifikasi Sidechain" + +#~ msgid "Stereo Link" +#~ msgstr "Penautan Stereo" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Sidechain" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Gain Otomatis" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Gain Otomatis" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Gain Otomatis" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Gain Otomatis" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Kiri" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Kanan" + +#~ msgid "Sidechain Left" +#~ msgstr "Sidechain Kiri" + +#~ msgid "Sidechain Right" +#~ msgstr "Sidechain Kanan" + +#~ msgid "Standard" +#~ msgstr "Standar" + +#~ msgid "Flat" +#~ msgstr "Datar" + +#~ msgid "FFT Size" +#~ msgstr "Ukuran FFT" + +#~ msgid "Output Volume" +#~ msgstr "Volume Keluaran" + +#~ msgid "Ceiling" +#~ msgstr "Langit-langit" + +#~ msgid "Operating Mode" +#~ msgstr "Mode Operasi" + +#~ msgid "Classic" +#~ msgstr "Klasik" + +#~ msgid "Modern" +#~ msgstr "Modern" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Sidechain" + +#~ msgid "Pink BT" +#~ msgstr "BT Pink" + +#~ msgid "Pink MT" +#~ msgstr "MT Pink" + +#~ msgid "Brown BT" +#~ msgstr "BT Coklat" + +#~ msgid "Brown MT" +#~ msgstr "MT Coklat" + +#~ msgid "Bands List" +#~ msgstr "Daftar Band" + +#~ msgid "Band 1" +#~ msgstr "Band 1" + +#~ msgid "Band 2" +#~ msgstr "Band 2" + +#~ msgid "Band 3" +#~ msgstr "Band 3" + +#~ msgid "Band 4" +#~ msgstr "Band 4" + +#~ msgid "Band 5" +#~ msgstr "Band 5" + +#~ msgid "Band 6" +#~ msgstr "Band 6" + +#~ msgid "Band 7" +#~ msgstr "Band 7" + +#~ msgid "Band 8" +#~ msgstr "Band 8" + +#~ msgid "Band Start" +#~ msgstr "Mulai Band" + +#~ msgid "Band End" +#~ msgstr "Akhir Band" + +#~ msgid "Band Compression Mode" +#~ msgstr "Mode Kompresi Band" + +#~ msgid "Band Bypass" +#~ msgstr "Bypass Band" + +#~ msgid "Band Sidechain Options" +#~ msgstr "Opsi Sidechain Band" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filter Low-Cut" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Frekuensi Filter Low-Cut" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filter High-Cut" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Frekuensi Filter High-Cut" + +#~ msgid "PreAmp" +#~ msgstr "PreAmp" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Gain Input" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Bentuk Kurva" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Pisah" + +#~ msgid "Split 1/2" +#~ msgstr "Split 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frekuensi" + +#~ msgid "Split 2/3" +#~ msgstr "Split 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frekuensi" + +#~ msgid "Split 3/4" +#~ msgstr "Split 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frekuensi" + +#~ msgid "Sub Band" +#~ msgstr "Band Sub" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Penguatan" + +#~ msgid "Max Reduction" +#~ msgstr "Pengurangan" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "Low Band" +#~ msgstr "Band Rendah" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Penguatan" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "Mid Band" +#~ msgstr "Band Tengah" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Penguatan" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "High Band" +#~ msgstr "Band Tinggi" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Bypass" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Attack" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Rilis" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Ambang Batas" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Jumlah Band" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Penguatan" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "General" +#~ msgstr "Umum" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Gunakan Aturan Bawaan" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Pembatas Masukan" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Gunakan Aturan Bawaan" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Gain Input" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Penggemaan" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Atur Sampling" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Frekuensi" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Angkatan Maksimal" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Aturan Bawaan" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Gain Input" + +#~ msgid "Output Presets" +#~ msgstr "Preset Output" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Daftar Keluaran Preset Otomatis" + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Pembatas Masukan" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Preset Input" + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Preset Input" + +#, fuzzy +#~ msgid "Clients" +#~ msgstr "Sen" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Sen" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Uji Sinyal" + +#~ msgid "State" +#~ msgstr "Status" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Hidupkan" + +#~ msgid "Channels" +#~ msgstr "Total Kanal" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Total Kanal" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Tabel Sinus" + +#~ msgid "White Noise" +#~ msgstr "Derau Putih" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "High Shelf" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kualitas" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format Resampling" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Kerenyahan" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Deteksi" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresi" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Kliping Lunak" + +#~ msgid "Cents" +#~ msgstr "Sen" + +#~ msgid "Semitones" +#~ msgstr "Seminada" + +#~ msgid "Octaves" +#~ msgstr "Oktav" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Hapus Berkas Preset Ini" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Efek Input" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#~ msgid "Plugins List" +#~ msgstr "Daftar Plugin" + +#~ msgid "_General" +#~ msgstr "_Umum" + +#~ msgid "Service" +#~ msgstr "Layanan" + +#, fuzzy +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Shutdown pada Penutupan Jendela" + +#~ msgid "Audio" +#~ msgstr "Audio" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Proses Semua Output" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Proses Semua Input" + +#~ msgid "Use Cubic Volume" +#~ msgstr "Gunakan Volume Kubik" + +#~ msgid "Style" +#~ msgstr "Gaya" + +#~ msgid "Use Dark Theme" +#~ msgstr "Gunakan Tema Gelap" + +#~ msgid "Hide Menus on Outside Clicks" +#~ msgstr "Sembunyikan Menu di Klik Luar" + +#~ msgid "_Spectrum" +#~ msgstr "_Spektrum" + +#~ msgid "Shape" +#~ msgstr "Rupa" + +#~ msgid "Bars" +#~ msgstr "Batang" + +#~ msgid "Lines" +#~ msgstr "Garis" + +#~ msgid "Dots" +#~ msgstr "Titik" + +#~ msgid "Points" +#~ msgstr "Titik" + +#~ msgid "Height" +#~ msgstr "Tinggi" + +#~ msgid "Line Width" +#~ msgstr "Lebar Garis" + +#~ msgid "Fill" +#~ msgstr "Spektrum Batangan" + +#~ msgid "Show Bars Border" +#~ msgstr "Tampilkan batar bar" + +#~ msgid "Rounded Corners" +#~ msgstr "Sudut Bulat" + +#~ msgid "Color" +#~ msgstr "Warna" + +#~ msgid "Lines and Bars" +#~ msgstr "Garis dan Bar" + +#~ msgid "Axis Labels" +#~ msgstr "Label Sumbu" + +#~ msgid "Frequency Range" +#~ msgstr "Rentang Frekuensi" + +#~ msgid "Minimum" +#~ msgstr "Minimum" + +#~ msgid "Maximum" +#~ msgstr "Maksimal" + +#~ msgid "Load" +#~ msgstr "Muat" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Simpan Setelan Saat Ini Ke Berkas Preset" + +#~ msgid "Remove this preset file" +#~ msgstr "Hapus Berkas Preset Ini" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nama Preset Keluaran Baru" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Buat Preset" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Impor Preset" + +#~ msgid "Search Output Preset" +#~ msgstr "Cari Preset Keluaran" + +#~ msgid "Output Presets List" +#~ msgstr "Daftar Preset Keluaran" + +#~ msgid "New Input Preset Name" +#~ msgstr "Nama Preset Input Baru" + +#~ msgid "Search Input Preset" +#~ msgstr "Cari Preset Input" + +#~ msgid "Input Presets List" +#~ msgstr "Daftar Preset Input" + +#~ msgid "High Frequency Damping" +#~ msgstr "Pembasahan Frekuensi Tinggi" + +#~ msgid "Room Size" +#~ msgstr "Ukuran Ruangan" + +#~ msgid "Small" +#~ msgstr "Kecil" + +#~ msgid "Medium" +#~ msgstr "Sedang" + +#~ msgid "Large" +#~ msgstr "Besar" + +#~ msgid "Tunnel" +#~ msgstr "Terowongan" + +#~ msgid "Large/smooth" +#~ msgstr "Besar/Halus" + +#~ msgid "Experimental" +#~ msgstr "Eksperimental" + +#~ msgid "Diffusion" +#~ msgstr "Difusi" + +#~ msgid "Pre Delay" +#~ msgstr "Pra Tunda" + +#~ msgid "Decay Time" +#~ msgstr "Waktu Decay" + +#~ msgid "Wet Amount" +#~ msgstr "Besaran Wet" + +#~ msgid "Wet Level" +#~ msgstr "Tingkat Wet" + +#~ msgid "Dry Amount" +#~ msgstr "Besaran Dry" + +#~ msgid "Dry Level" +#~ msgstr "Tingkat Dry" + +#~ msgid "Bass Cut" +#~ msgstr "Potong Bass" + +#~ msgid "Treble Cut" +#~ msgstr "Potong Treble" + +#~ msgid "Ambience" +#~ msgstr "Suasana" + +#~ msgid "Empty Walls" +#~ msgstr "Tembok Kosong" + +#~ msgid "Room" +#~ msgstr "Ruangan" + +#~ msgid "Large Empty Hall" +#~ msgstr "Aula Besar Kosong" + +#~ msgid "Disco" +#~ msgstr "Disko" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Aula Besar Terisi Penuh" + +#~ msgid "Import Model" +#~ msgstr "Impor Model" + +#~ msgid "Models" +#~ msgstr "Model" + +#~ msgid "Standard Model" +#~ msgstr "Model Standar" + +#~ msgid "RNNoise Models List" +#~ msgstr "Daftar Model RNNoise" + +#~ msgid "Active Model" +#~ msgstr "Model Aktif" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Model RNNoise Standar" + +#~ msgid "Overview" +#~ msgstr "Ringkasan" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Buka Manual EasyEffects" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Layar penuh/Pulihkan dari layar penuh" + +#~ msgid "Close the Window" +#~ msgstr "Tutup jendela" + +#~ msgid "Quit EasyEffects" +#~ msgstr "Keluar EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Keseimbangan" + +#~ msgid "Input Balance" +#~ msgstr "Masukan Keseimbangan" + +#~ msgid "Softclip" +#~ msgstr "Kliping Lunak" + +#~ msgid "Softclip Level" +#~ msgstr "Tingkat Softclip" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matriks Stereo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "Kiri-Kanan > Kiri-Kanan (Stereo Standar)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "Kiri-Kanan > Tengah (Stereo ke Sisi Tengah)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "Tengah > Kiri-Kanan (Sisi Tengah ke Stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "Kiri-Kanan > Kiri-Kiri (Kanal Kiri Mono)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "Kiri-Kanan > Kanan-kanan (Kanal Kanan Mono)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "Kiri-Kanan > Kiri+Kanan (Kiri Mono + Kanan Mono)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "Kiri-Kanan > Kanan-Kiri (Pembalikan Setereo)" + +#~ msgid "Stereo Mode" +#~ msgstr "Mode Stereo" + +#~ msgid "Invert Phase" +#~ msgstr "Balikkan Phase" + +#~ msgid "Side Level" +#~ msgstr "Volume Kanal Sisi" + +#~ msgid "Side Balance" +#~ msgstr "Keseimbangan Sisi" + +#~ msgid "Middle Level" +#~ msgstr "Volume Kanal Tengah" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama Kanal Tengah" + +#~ msgid "Output Balance" +#~ msgstr "Keluaran Balance" + +#~ msgid "Delay L/R" +#~ msgstr "Penundaan Kiri/Kanan" + +#~ msgid "Delay Left Right" +#~ msgstr "Penundaan Kiri Kanan" + +#~ msgid "Stereo Base" +#~ msgstr "Basis Stereo" + +#~ msgid "Stereo Phase" +#~ msgstr "Phase Stereo" + +#, fuzzy +#~ msgid "Running" +#~ msgstr "berjalan" + +#, fuzzy +#~ msgid "Suspended" +#~ msgstr "Ditangguhkan" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "membuat" + +#, fuzzy +#~ msgid "Error" +#~ msgstr "error" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "tidak dikenal" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Total Kanal" + +#~ msgid "Output Presets: " +#~ msgstr "Preset Keluaran: " + +#~ msgid "Input Presets: " +#~ msgstr "Preset Input: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efek Suara untuk Aplikasi PipeWire" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Tutup EasyEffects. Berguna Ketika Berjalan dalam Modus Layanan." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Muat Preset. Misalkan: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Atur Ulang EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Sembunyikan jendela." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Bypass global. 1 untuk mengaktifkan, 2 untuk menonaktifkan dan 3 untuk " +#~ "mendapatkan status" + +#~ msgid "Show available presets." +#~ msgstr "Tampilkan Preset Tersedia." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Muat Berkas Impuls" + +#~ msgid "Import Impulse File" +#~ msgstr "Impor File Impuls" + +#~ msgid "Open" +#~ msgstr "Buka" + +#~ msgid "Cancel" +#~ msgstr "Batal" + +#~ msgid "Impulse Response" +#~ msgstr "Respons Impuls" + +#~ msgid "Load Impulse" +#~ msgstr "Muat Impuls" + +#~ msgid "Remove Impulse" +#~ msgstr "Hapus Impuls" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Muat Berkas Impuls" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Tidak dapat Memuat Berkas Impuls" + +#~ msgid "Recorders" +#~ msgstr "Perekam" + +#~ msgid "Players" +#~ msgstr "Pemain" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "Tak Terbatas" + +#~ msgid "Import APO Preset File" +#~ msgstr "Impor File Preset APO" + +#~ msgid "APO Presets" +#~ msgstr "Preset APO" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Hapus Preset Pemuatan Otomatis" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Gain Input" + +#~ msgid "Add" +#~ msgstr "Tambah" + +#~ msgid "Import Preset" +#~ msgstr "Impor Preset" + +#~ msgid "Import Model File" +#~ msgstr "Impor file Model" + +#~ msgid "RNNoise Models" +#~ msgstr "Model RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Penguat Bass" + +#~ msgid "Bass Loudness" +#~ msgstr "Kenyaringan Bass" + +#~ msgid "Convolver" +#~ msgstr "Konvolver" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Pengkristal Suara" + +#~ msgid "Deesser" +#~ msgstr "Penghilang Desis" + +#~ msgid "Delay" +#~ msgstr "Penundaan" + +#~ msgid "Echo Canceller" +#~ msgstr "Penghilang Gema" + +#~ msgid "Equalizer" +#~ msgstr "Ekualiser" + +#~ msgid "Exciter" +#~ msgstr "Penguat Frekuensi Tinggi" + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Limiter" +#~ msgstr "Pembatas" + +#~ msgid "Maximizer" +#~ msgstr "Pemaksimal Gain" + +#~ msgid "Multiband Compressor" +#~ msgstr "Kompresor Multiband" + +#~ msgid "Multiband Gate" +#~ msgstr "Multiband Gate" + +#~ msgid "Pitch" +#~ msgstr "Nada" + +#~ msgid "Reverberation" +#~ msgstr "Penggemaan" + +#~ msgid "Noise Reduction" +#~ msgstr "Pengurangan Noise" + +#~ msgid "Stereo Tools" +#~ msgstr "Pengolah Stereo" + +#~ msgid "Average" +#~ msgstr "Rata-Rata" + +#~ msgid "Failed" +#~ msgstr "Gagal" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Gunakan Aturan Bawaan" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Hapus Berkas Preset Ini" + +#~ msgid "Import Presets" +#~ msgstr "Muat Preset" + +#~ msgid "Start Service at Login" +#~ msgstr "Mulai Layanan Saat Startup" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Setel Ulang Volume Perangkat Kami saat Memulai" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Model Aktif" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "Daftar Blokir" + +#~ msgid "Blocklist" +#~ msgstr "Daftar Blokir" + +#~ msgid "Speakers" +#~ msgstr "Speaker" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Plugin" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Hidupkan" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Hidupkan" + +#~ msgid "Format" +#~ msgstr "Format Resampling" + +#~ msgid "Latency" +#~ msgstr "Besar Latensi" + +#~ msgid "idle" +#~ msgstr "siaga" + +#~ msgid "Faster" +#~ msgstr "Lebih Cepat" + +#~ msgid "Preserve Formant" +#~ msgstr "Jaga Bentuk" + +#~ msgid "Cmoy" +#~ msgstr "C. Moy" + +#~ msgid "Jmeier" +#~ msgstr "J. Meier" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Gain Input" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Total Kanal" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Monitor Lantai" + +#~ msgid "Output Effects" +#~ msgstr "Efek Luaran" + +#~ msgid "Settings" +#~ msgstr "Setelan" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Setelan" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Durasi" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Uji Sinyal" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Uji Sinyal" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spektrum" + +#~ msgid "Spectrum Color" +#~ msgstr "Warna Spektrum" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Modus Agresif" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Pengurangan Kuatan" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Tinggi" + +#~ msgid "Dry" +#~ msgstr "Dry" + +#~ msgid "S/C Level" +#~ msgstr "Level Sisi/Tengah" + +#~ msgid "Short Term" +#~ msgstr "Waktu Singkat" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Band Rendah" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Atur Volume dan hidupkan/matikan Efek" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Dilengkapi dengan Ekualiser dengan Preset Bawaan" + +#~ msgid "Input Limiter" +#~ msgstr "Pembatas Masukan" + +#~ msgid "Calibration" +#~ msgstr "Kalibrasi" + +#~ msgid "Limit" +#~ msgstr "Batas" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Atenuasi" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Penerap Efek Suara untuk Aplikasi Berbasis Pulseaudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Terapkan Efek Suara via PulseAudio" + +#~ msgid "Help" +#~ msgstr "Bantuan" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrasikan Mikrofon" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Kotak" + +#~ msgid "Saw" +#~ msgstr "Gergaji" + +#~ msgid "Triangle" +#~ msgstr "Segitiga" + +#~ msgid "Silence" +#~ msgstr "Diam" + +#~ msgid "Pink Noise" +#~ msgstr "Derau Merah Muda" + +#~ msgid "Ticks" +#~ msgstr "Ketukan per Detik" + +#~ msgid "Gaussian Noise" +#~ msgstr "Derau Gaussia" + +#~ msgid "Red Noise" +#~ msgstr "Derau Merah" + +#~ msgid "Blue Noise" +#~ msgstr "Derau Biru" + +#~ msgid "Violet Noise" +#~ msgstr "Derau Ungu" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Window" +#~ msgstr "Jendela" + +#~ msgid "Measure Noise" +#~ msgstr "Ukur Derau" + +#~ msgid "Subtract Noise" +#~ msgstr "Kurangi Derau" + +#~ msgid "Extended Filter" +#~ msgstr "Filter Diperluas" + +#~ msgid "Low" +#~ msgstr "Rendah" + +#~ msgid "Moderate" +#~ msgstr "Sedang" + +#~ msgid "High" +#~ msgstr "Tinggi" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Tingkat Supresi" + +#~ msgid "Delay Agnostic" +#~ msgstr "Penundaan Agnosti" + +#~ msgid "Very High" +#~ msgstr "Sangat Tinggi" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supresor Derau" + +#~ msgid "Adaptive Digital" +#~ msgstr "Digital Adaptif" + +#~ msgid "Fixed Digital" +#~ msgstr "Digital Tetap" + +#~ msgid "Gain Controller" +#~ msgstr "Pengatur Angkatan" + +#~ msgid "Detection Likelihood" +#~ msgstr "Lacak Keberadaan Vokal" + +#~ msgid "Very Low" +#~ msgstr "Sangat Rendah" + +#~ msgid "Voice Detector" +#~ msgstr "Pelacak Vokal" + +#~ msgid "Use Custom Color" +#~ msgstr "Gunakan Warna Kustom" + +#~ msgid "Use Gradient" +#~ msgstr "Terapkan Gradien warna" + +#~ msgid "Gradient Color" +#~ msgstr "Warna Gradien" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Muat Berkas Respons Impuls" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Pilih Berkas Repons Impuls" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Modus Agresif" + +#~ msgid "Before" +#~ msgstr "Sebelum" + +#~ msgid "After" +#~ msgstr "Sesudah" + +#, fuzzy +#~ msgid "Loudness Range" +#~ msgstr "Rentang Kelantangan" + +#~ msgid "Apply" +#~ msgstr "Terapkan" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Aturan Bawaan" + +#, fuzzy +#~ msgid "Default Source" +#~ msgstr "Aturan Bawaan" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Durasi" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Frekuensi Terendah" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Preset" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Deteksi" + +#~ msgid "Muted" +#~ msgstr "Dibungkam" + +#~ msgid "Distant Headphones" +#~ msgstr "Headphone Berjarak" + +#~ msgid "Priority Type" +#~ msgstr "Atur Prioritas" + +#~ msgid "Niceness" +#~ msgstr "Proritas Sempurna" + +#~ msgid "Priority" +#~ msgstr "Atur Prioritas" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frekuensi" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frekuensi" + +#~ msgid "About" +#~ msgstr "Tentang EasyEffects" + +#, fuzzy +#~ msgid "Channel Mapping" +#~ msgstr "Total Kanal" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Modus Penyampling" + +#~ msgid "Buffer" +#~ msgstr "Ukuran Penyangga" + +#~ msgid "Block Size" +#~ msgstr "Ukuran Blok" + +#~ msgid "Resampler" +#~ msgstr "Modus Penyampling" + +#~ msgid "paused" +#~ msgstr "terjeda" + +#~ msgid "playing" +#~ msgstr "memutar" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Muat Preset" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Pengurangan Kuatan" + +#~ msgid "Exponent" +#~ msgstr "Eksponen" diff --git a/po/news/it_IT.po b/po/news/it_IT.po new file mode 100644 index 0000000..5d865b9 --- /dev/null +++ b/po/news/it_IT.po @@ -0,0 +1,3383 @@ +# Italian translation file for EasyEffects +# Copyright (C) 2018 +# This file is distributed under the same license as the EasyEffects package. +# Matteo Iervasi , 2018. +# Gianluca Boiano , 2018. +# Albano Battistella , 2021. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-09-14 03:21+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Italian \n" +"Language: it_IT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0.1-dev\n" +"Translator: Albano Battistella \n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Effetti Audio per Applicazioni Pipewire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects è un'applicazione specifica per la manipolazione dei flussi " +"audio. Tra i diversi moduli contenuti, include un equalizzatore, un limiter, " +"un compressore e uno strumento per il riverbero. In aggiunta è anche " +"disponibile un analizzatore dello spettro delle frequenze." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects è il successore di PulseEffects. Easy Effects supporta " +"esclusivamente il server audio PipeWire. Gli utenti su PulseAudio possono " +"continuare a usare PulseEffects in alternativa." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Eseguito in simultanea al server PipeWire, Easy Effects funzionerà con la " +"quasi totalità, se non tutte, le applicazioni disponibili sul sistema. Le " +"applicazioni supportate sono mostrate nella finestra principale e ognuna può " +"essere abilitata individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Oltre alla manipolazione dei flussi in uscita, Easy Effects è in grado di " +"applicare effetti anche a dispositivi in ingresso, per esempio un microfono. " +"Una funzionalità utile sia durante le registrazioni che nelle conversazioni " +"di gruppo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Easy Effects all'avvio presenta la configurazione utilizzata nella sessione " +"precedente. Tuttavia è possibile salvare i parametri attuali in uno " +"specifico profilo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" +"La scheda principale che mostra il flusso in uscita di due applicazioni" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Il modulo di Enfasi Bassi con i propri parametri" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "Il modulo Convolver con i propri parametri" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Funzionalità:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Bug corretti:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" +"Risolto un piccolo bug che impediva la corretta inizializzazione della " +"soglia di attività vocale di riduzione del rumore." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Altre note:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" +"Aggiunto un nuovo controllo al plugin di riduzione del rumore che consente " +"di disabilitare il rilevamento vocale." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" +"L'effetto Filtro è stato migliorato con nuovi parametri da quando è stato " +"portato da Calf Studio ai plugin di Linux Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" +"La riduzione del rumore tramite RNNoise è stata migliorata con l'aggiunta " +"dei controlli Release e Soglia VAD." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" +"La riduzione del rumore tramite RNNoise ora può mescolare i segnali " +"originali e quelli denoizzati per evitare che l'uscita suoni troppo " +"\"secca\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" +"Questa versione è progettata per funzionare con versioni dei plugin di Linux " +"Studio uguali o successive a \"1.2.10\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "EasyEffects è ora compilabile anche con libc++." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" +"L'Expander dei plugin di Linux Studio può essere utilizzato in Easy Effects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" +"Le bande dell'equalizzatore ora dispongono di un ulteriore controllo del " +"guadagno che consente un inserimento più efficiente di valori difficili da " +"impostare nella scala. Maggiori dettagli sui problemi al numero 1383." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" +"Aggiunta la possibilità di selezionare e caricare più di un file alla volta " +"per i profili, gli impulsi del Convolver e i modelli di RNNoise." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" +"Corretto il funzionamento del bottone Solo all'interno delle configurazioni " +"di banda dell'Equalizzatore." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" +"Le cartelle di Easy Effects in /etc sono d'ora in poi deprecate e i profili " +"presenti al loro interno non saranno più caricati. Al momento soltanto i " +"profili in ~/.config/easyeffects sono caricati automaticamente nell'apposito " +"Menu. In futuro implementeremo un nuovo sistema per installare, gestire e " +"importare i Profili della Community." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" +"La sezione \"Funzionalità Sperimentali\" è stata aggiunta alla finestra " +"della preferenze." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" +"Ora si può visualizzare l'interfaccia nativa dei plugin LSP. Questa è una " +"funzionalità sperimentale adatta solo per gli utenti avanzati. Ci potrebbero " +"essere dei bug." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" +"Valori frazionali dei semitoni possono essere selezionati nell'effetto " +"Intonazione." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" +"Il menu a tendina dei dispositivi di input/output nella scheda PipeWire è " +"correttamente aggiornato quando cambia il dispositivo predefinito del " +"sistema e l'opzione Usa Predefinito è abilitata. Risolto il bug 1989." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" +"È stato aggiunto un nuovo plugin Misuratore di Livello basato su libebur128." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" +"L'effetto Intonazione adesso usa la libreria SoundTouch piuttosto che " +"Rubberband. Si spera che alcuni misteriosi crash che occorrevano con " +"Rubberband non si ripresentino più." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" +"Migliorata la compatibilità con le più recenti versioni di PipeWire. " +"Maggiori informazioni su" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" +"I filtri abilitati dell'Equalizzatore non sono più impostati sul tipo Bell " +"quando il numero delle bande viene modificato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" +"Rabberband non è più una dipendenza dato che è stato sostituito da " +"SoundTouch." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" +"Il menu dei profili adesso richiede una conferma prima di salvare/eliminare " +"un file." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" +"Il comando di reset degli effetti rendeva ineffettivi i controlli. Questo " +"problema dovrebbe essere stato risolto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" +"Speex non è più erroneamente elencato come una dipendenza di compilazione " +"(speexdsp invece è ancora una dipendenza di compilazione)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" +"RNNoise non è più un autodipendenza. Adesso è richiesto in via predefinita " +"e, se non disponibile, deve essere esplicitamente disabilitato con Denable-" +"rnnoise=false" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "Traduzioni aggiornate." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" +"Si è verificato un piccolo errore nella precedente release. Questa nuova " +"release assicura che gli utenti abbiano la versione corretta nel proprio " +"pacchetto" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" +"La funzione \"ordina bande\" dell'Equalizzatore adesso riordina le bande su " +"GSettings, dunque la configurazione può essere salvata nei profili." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "Performance migliorate sul reset delle impostazioni degli effetti." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" +"Corretta la selezione del profilo \"Grande Sala Vuota\" dell'effetto di " +"Riverbero." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" +"Corretti alcuni errori nell'utilizzo delle API di Pipewire che potrebbero " +"evitare alcuni problemi che gli utenti stanno avendo nell'ultimo periodo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" +"Stiamo rimuovendo delle porzioni di codice deprecato da GTK 4.10, dunque la " +"versione minima di GTK è stata incrementata." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" +"La frequenza di aggiornamento dello spettro è stata migliorata. L'uso di " +"diverse frequenze di campionamento non dovrebbe influire sulla modalità di " +"aggiornamento dello spettro." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" +"Il tempo di aggiornamento dello spettro e dei misuratori di livello può " +"essere personalizzato dall'utente nelle impostazioni." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" +"Il valore di guadagno delle bande dell'equalizzatore può essere modificato " +"con step più ampi. Una regolazione più precisa con step ristretti è comunque " +"possibile tramite i tasti su/giù della tastiera." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "Piccoli miglioramenti all'effetto di riduzione dell'eco." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" +"I sensori di monitoraggio dell'effetto di riduzione dell'eco non erano stati " +"correttamente collegati alla scheda audio in seguito la transizione alle " +"istanze multiple. Questo problema è stato risolto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" +"È adesso possibile aggiungere più istanze dello stesso effetto alla pipeline." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"Un nuovo effetto di Miglioramento Voce basato sulla libreria Speex è stato " +"aggiunto. Oltre a offrire funzionalità di soppressione del rumore, tale " +"filtro può anche rilevare e processare la voce umana. Rappresenta una buona " +"alternativa ai casi in cui la libreria rnnoise non sia soddisfacente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "Migliorata la compatibilità con Linux Studio Plugins 1.2.3." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "I profili GraphicEQ possono essere importati nell'Equalizer." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"Il nome dell'applicazione è stato modificato in Easy Effects per aderire " +"alle specifiche della GNOME Human Interface Guidelines." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "La documentazione è stata aggiornata." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "Migliorato il caricamento automatico dei profili." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" +"La soglia del silenzio nell'Autogain può essere ora configurata dall'utente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" +"I controlli Dry e Wet sono stati aggiunti all'effetto Strumenti Stereo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" +"L'effetto di cancellazione dell'eco possiede ora un controllo di " +"soppressione del rumore basato sulla libreria Speex." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" +"Quando il mouse era sopra un diagramma, il valore dell'asse x visualizzato " +"era errato. Questo problema è stato risolto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"A causa delle istanze multiple di un singolo effetto, il formato dei profili " +"ha dovuto subire una modifica, ma quello precedente è rimasto comunque " +"compatibile per l'importazione. Si tenga presente in ogni caso che il " +"salvataggio delle impostazioni correnti sarà comunque effettuato nel nuovo " +"formato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"L'implementazione del Gate Multibanda è stata migrata da CALF a Linux Studio " +"Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"La compatibilità del codice di autocaricamento dei profili con i dispositivi " +"bluez5 è stato migliorato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "I controlli wet/dry sono stati aggiunti per alcuni effetti" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"L'interfaccia degli effetti non è più caricata quando il relativo plugin lv2 " +"non è istallato sul sistema. Al suo postò verrà mostrato un messaggio di " +"stato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "La documentazione è stata aggiornata" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "Migliorati i messaggi di debug" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Traduzioni aggiornate" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Traduzioni migliorate" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Corretto un bug per il quale EasyEffects andava in crash quando la finestra " +"veniva chiusa mentre gli effetti stavano per essere applicati." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" +"Lo stato di bypass per gli effetti può essere salvato nei file di profilo. " +"Le ragioni di questa scelta sono riportate nel ticket 1039" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" +"Il codice per l'autocaricamento dei profili con i dispositivi usb è stato " +"migliorato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"Un messaggio di dialogo viene mostrato quando fallisce il caricamento di un " +"profilo o di un file Impulso." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"Il Sidechain Gate di Linux Studio Plugins è stato aggiunto per rimpiazzare " +"quello di Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"EasyEffects non dovrebbe più andare in crash quando la localizzazione non è " +"correttamente configurata." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"È stata implementata una soluzione nella nostra icona per aggirare lo scarso " +"supporto del formato SVG nei sistemi QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"Quando gli effetti sono disabilitati per un'applicazione, adesso impostiamo " +"il suo target metadata a null. Questo permetterà al gestore delle sessioni " +"(wireplumber) di reindirizzare correttamente il flusso verso un nuovo " +"dispositivo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"Aggiunta una nuova configurazione. EasyEffects adesso può essere impostato " +"per ignorare i flussi dei monitor dei dispositivi. Questo aiuterà a " +"risolvere alcuni problemi che gli utenti avevano con l'utilizzo di OBS." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "Il codice che mostra il formato di campionamento è stato migliorato" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"La libreria rnnoise è adesso opzionale. Questo può aiutare a realizzare un " +"pacchetto Debian. Consultare il ticket 1000 per maggiori informazioni." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"I nostri log ora mostrano il numero di linea del codice sorgente dove il " +"messaggio viene stampato" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"Il checkbox di abilitazione degli effetti nella finestra non era aggiornato " +"quando programmi esterni come pavucontrol reindirizzavano i flussi lontano " +"dai nostri dispositivi virtuali. Questo problema dovrebbe essere risolto ora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"Corretto un bug che poteva capitare quando la cronologia dell'Auto Guadagno " +"veniva modificata." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "Evitato il crash quando pw-mididump è in esecuzione" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "L'interfaccia del plugin pitch è stata migliorata" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" +"La nostra icona dell'applicazione è ora compatibile con i desktop che " +"utilizzano QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"Il nostro codice blocklist utilizzerà il tag application.id se lo stream lo " +"imposta" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Per evitare problemi con lo scroll del mouse, le voci della lista delle " +"applicazioni nelle schede Riproduttori/Registratori non mostrano più uno " +"slider orizzontale per regolare il volume. Maggiori dettagli su questa " +"soluzione possono essere consultati nei ticket 1211 e 1427" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Quando non sono presenti applicazioni nelle schede Riproduttori/" +"Registratori, sarà visualizzato un messaggio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Molti aggiornamenti di traduzione" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"Corretto un bug per il quale EasyEffects andava in crash quando il numero di " +"punti mostrati nello spettro veniva cambiato mentre la nostra pipeline era " +"attiva e la sezione dello spettro era visibile" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"Il valore di latenza della pipeline visualizzato nella nostra finestra " +"poteva essere errato in alcune situazioni. Questo è stato risolto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" +"Presente una nuova impostazione per configurare un timeout di inattività per " +"la pipeline. Quando nessun client sta riproducendo o registrando, i filtri " +"vengono sconnessi dopo aver superato il timeout di inattività. Questo è " +"stato realizzato per non sprecare risorse CPU nel processare un segnale muto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"Il plugin di Auto Guadagno adesso permette di selezionare quale dei tre tipi " +"di Loudness usare per calcolare la media geometrica." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"Il plugin di Auto Guadagno adesso permette l'impostazione della massima " +"cronologia e non utilizza più l'istogramma libebur128. Questo dovrebbe " +"evitare i casi in cui la Loudness Integrata rimaneva blocca allo stesso " +"valore." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"L'icona di EasyEffects è stata aggiornata in modo da essere visibile anche " +"nei desktop QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"L'opzione della riga di comando che restituisce lo stato di bypass globale " +"funziona di nuovo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Migliorata la gestione della latenza dinamica di PipeWire da parte del " +"modulo di Crossfeed. Non si dovrebbero più verificare anomali cambi di " +"volume." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Risolto un bug che non permetteva la corretta gestione dei microfoni mono da " +"parte di EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Supporto per la prossima versione di PipeWire 0.3.44" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Migliorata la gestione della latenza dinamica di PipeWire da parte del " +"modulo di Auto Guadagno. Non si dovrebbero più verificare anomali cambi di " +"volume." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Aggiunta un'opzione per reimpostare il volume del nostro dispositivo " +"virtuale all'avvio di EasyEffects. Ciò dovrebbe essere d'aiuto nei casi in " +"cui il nostro dispositivo venga mutato dal server per ragioni ignote." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Migliore supporto per la sospensione del computer." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Risolto un bug per cui il tentativo di creare un profilo di caricamento " +"automatico senza preimpostazioni causava l'arresto anomalo dell'applicazione." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"Risolto un bug in cui impostando a zero la qualità di una banda " +"dell'Equalizzatore, l'intera applicazione andava in crash." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita è usata per creare alcune parti della nostra interfaccia e la " +"modifica dei temi chiaro/scuro." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" +"Il menu delle impostazioni è stato ridisegnato con gli oggetti di LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"L'importazione dei profili Equalizer APO è stata migliorata per applicare " +"non solo i filtri a Campana, ma anche gli altri supportati (al momento " +"soltanto il filtro Passabanda non è disponibile nel plugin LSP)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "L'opzione Reset Preferenze nel menu adesso funziona anche in Flatpak." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Abbiamo una nuova opzione che permette di disabilitare l'autohide dei nostri " +"menu. Questo permette di aggirare alcuni bug dei menu Popover attualmente " +"presenti in gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Migliorata l'analisi dell'importazione APO con profili che hanno la virgola " +"come separatore delle migliaia." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"La libreria fmt è una nuova dipendenza, almeno fin quando i compilatori c++ " +"non la implementeranno in predefinito. Ciò è previsto nei prossimi anni." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM e GLIBMM non sono più una dipendenza. Adesso usiamo gtk4 direttamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Adesso è possibile combinare più Impulsi nell'interfaccia del Convolver. Un " +"nuovo file di Impulso viene generato e il suo nome è aggiunto nella lista." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"Migliorato il disegno della asse x nei nostri grafici. Adesso il numero " +"delle etichette si adatta in base alla larghezza della finestra." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"La documentazione è stata aggiornata con le nuove funzionalità di " +"EasyEffects. I vecchi riferimenti a PulseEffects sono stati rimossi. Il " +"bottone per consultare la documentazione è stato aggiunto nel menu." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Inserendo un valore fuori scala nello spinbutton, adesso il parametro viene " +"aggiornato al valore minimo/massimo, invece che resettarlo a quello " +"precedente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"La finestra principale adesso ricorda lo stato di massimizzazione e lo " +"ripristina alla nuova apertura." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "La libreria tbb è una nuova dipendenza" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Il Limiter e il Compressore Multibanda adesso possono usare una sidechain " +"esterna." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"Il modulo di Auto Guadagno adesso permette all'utente di selezionare quale " +"tipologia di Loudness usare come riferimento per la correzione del volume." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" +"La funzionalità di importazione dei profili APO nell'Equalizzatore adesso " +"analizza anche il parametro di \"Pre Amplificazione\"." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "Il Volume Cubico può essere abilitato dalle impostazioni generali." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" +"Il plugin dello Spettro doveva essere nella fase di passthrough quando non " +"era visibile, ma ciò accadeva soltanto quando la finestra era chiusa." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "Migliorato il supporto alle Tecnologie Assistive." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" +"Le sonde usate in alcuni filtri come il Compressore e il Limiter non erano " +"ricollegati quando l'ordine degli effetti veniva modificato. Questo problema " +"dovrebbe essere risolto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" +"I flussi monitor di PipeWire adesso dovrebbero essere esclusi e rimossi " +"dalla lista delle applicazioni." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" +"Crash come quelli riportati nel ticket 1172 dovrebbero essere stati corretti." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "Risolto un caso in cui lo Spettro andava in crash." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"Pavucontrol non è più aggiunto alla lista delle applicazioni in ingresso su " +"sistemi con localizzazione diversa da quella inglese." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"Migliorata la compatibilità con WirePlumber. Questo è necessario per i " +"sistemi che hanno deciso di utilizzarlo al posto del gestore delle sessioni " +"integrato in PipeWire. Maggiori informazioni nel ticket 1144." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"All'aggiunta di un profilo di autocaricamento per uno specifico dispositivo " +"già presente in lista, ora il profilo viene aggiornato. In questo modo non " +"c'è bisogno di rimuovere lo stesso dispositivo e riaggiungerlo per vederlo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"La funzionalità dell'autocaricamento dei profili è stata nuovamente " +"riprogettata. Adesso dovrebbe funzionare su più tipologie di dispositivi. " +"Per maggiori informazioni, consultare il ticket 1051." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"Se il Limiter e il Maximizer sono posizionati alla fine della lista, i nuovi " +"moduli sono aggiunti nella penultima posizione in modo da evitare eventuali " +"danneggiamenti agli altoparlanti in caso di volume troppo alto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" +"Alla rimozione di un flusso dalle App Escluse, il precedente stato dovrebbe " +"essere ripristinato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"Talvolta alla rimozione dei modelli nel modulo di riduzione del rumore, il " +"modello utilizzato non veniva aggiornato. Questo problema è stato risolto." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" +"Alla modifica dei profili in un editor esterno, adesso non saranno più " +"mostrate voci multiple nella lista dei profili." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" +"Adesso i flussi nelle App Escluse vengono correttamente disabilitati allo " +"switch dei profili." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" +"Adesso lo stato del Bypass globale dovrebbe essere correttamente aggiornato " +"quando i moduli cambiano." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" +"Le icone mancanti sul sistema non dovrebbero essere più mostrate nella " +"sezione delle informazioni delle applicazioni (se un'icona non è visibile " +"nonostante siate sicuri che sia correttamente installata, vi preghiamo di " +"segnalarcelo aprendo un nuovo ticket)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"Alcune icone non visualizzate in Plasma con il tema Breeze adesso dovrebbero " +"essere visibili." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Traduzione Cinese aggiornata." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Traduzione Italiana aggiornata." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "Aggiunto il supporto al parametro Quantità Incremento del Compressore" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"Il Compressore Multibanda adesso implemento lo stereo multiband compressor " +"sviluppato da Linux Studio Plugins invece di quello di Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"Il Limiter adesso implementa lo stereo limiter sviluppato da Linux Studio " +"Plugins invece di quello di Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"I filtri LV2 adesso sono generati nel diagramma PipeWire soltanto quando " +"sono caricati per la prima volta. Tuttavia, una volta caricati, rimangono " +"connessi fin quando EasyEffects non viene terminato." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" +"Il modulo di Riduzione Eco adesso imposta correttamente il campionamento." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" +"Il parametro soglia del Deesser adesso è salvato correttamente nel profilo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" +"Migliorata la suddivisione delle bande nel Crystalizer con nuovi valori di " +"default delle Intensità." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" +"In base al guadagno di input/output, le corrispondenti barre non erano " +"allineate correttamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" +"All'aggiunta di nuove bande nell'Equalizzatore, la modalità è impostata su " +"Campana invece che Off." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" +"L'importazione degli Equalizer APO adesso funziona correttamente su " +"localizzazioni differenti da C." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" +"Migliorata la gestione delle connessioni tra le porte dei nodi in PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" +"L'amplificazione del Crystalizer era troppo alta. Adesso dovrebbe essere " +"impostata a livelli ragionevoli." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" +"Migliorato il resampler usato nei moduli che lo richiedono (come RNNoise)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" +"L'impostazione di profili di autocaricamento multipli adesso dovrebbe " +"funzionare" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" +"La translazione dell'interfaccia per alcuni moduli è stata correttamente " +"impostata" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"Il menu dei file di Impulso del Convolver è stato migliorato aggirando un " +"problema per cui i file non erano caricati quando soltanto uno era " +"disponibile nel menu, consultare il ticket 1011" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" +"Corretto un bug che non inizializzava correttamente il modulo di Intonazione" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" +"L'icona di allarma saturazione adesso non sposta più gli oggetti adiacenti" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "Aggiustati i locale in alcuni oggetti" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "Corretti gli allineamenti in alcuni oggetti" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" +"Il plugin di Loudness è stato nuovamente reimplementato per le ragioni " +"descritte nel ticket 820. Questo significa che è di nuovo una dipendenza " +"opzionale." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" +"Risolto un errore di segmentazione che accadeva quando delle dipendenze " +"opzionali non erano installate" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "Migliorata l'interfaccia dell'equalizzatore." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" +"Adesso usiamo un Compressore Sidechain LSP che permette di selezionare una " +"sorgente esterna come sidechain di ingresso." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "Adesso supportiamo la modalità Incremento del Compressore LSP." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" +"Quando separa canali è abilitato nell'Equalizzatore, i profili APO importati " +"saranno applicati soltanto al canale visualizzato. Questo permette di " +"importare profili differenti per i diversi canali invece che gli stessi per " +"entrambi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" +"Risolti alcuni errori di segmentazione quando si creavano o rimuovevano i " +"profili di autocaricamento" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" +"Questa è una delle più grandi release che io abbia mai fatto. Il numero dei " +"cambiamenti è cosi elevato che è difficile descriverle tutte qui." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" +"Le seguenti sono soltanto le più importanti. Gli utenti interessati a questa " +"fase possono consultare i ticket 904 e 874." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "L'applicazione è stata rinominata da PulseEffects a EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 è stato rimpiazzato da gtkmm4" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Gstreamer è stato rimpiazzato dai filtri nativi PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" +"Molte funzionalità sono state riscritte da zero. L'autocaricamento dei " +"preset ne è un esempio. Un'altra modifica importante è presente nel menu di " +"selezione dei moduli. Adesso sono mostrati nella finestra soltanto i plugin " +"aggiunti alla lista." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" +"Boost non è più una dipendenza. Il prezzo da pagare per questa scelta è il " +"cambiamento della struttura dei profili. Con un po' di pazienza è possibile " +"modificare i profili di PulseEffects in un editor di testo per renderli " +"compatibili con EasyEffects. Magari qualcuno realizzerà uno script per " +"questa operazione." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"Nuove librerie sono state aggiunte e altre che erano opzionali adesso sono " +"necessarie" + +#~ msgid "This release adds the following features:" +#~ msgstr "Questa release aggiunge le seguenti funzionalità:" + +#~ msgid "manager" +#~ msgstr "manager" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr "" +#~ "sink. Questo potrà risolvere alcune anomalie che gli utenti avevano con " +#~ "OBS." + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "su Debian. Consultare il ticket #1000 per maggiori informazioni." + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Questa release risolve i seguenti bug:" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "rimuovevano gli stream dai nostri dispositivi virtuali. Questo problema " +#~ "dovrebbe essere risolto." + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "la scheda non mostra più una scala del volume. Maggiori dettagli sul " +#~ "problema e la soluzione per esso possono essere trovati su #1211" + +#~ msgid "and #1427" +#~ msgstr "e #1427" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "" +#~ "la nostra pipeline era attiva e il widget dello spettro era visibile" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Aggiunta una nuova opzione che permette di selezionare un periodo di " +#~ "inattività per la pipeline. Quando nessun client" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "o registrando dai nostri dispositivi i filtri verranno scollegati al " +#~ "raggiungimento del timeout. Questo è fatto per essere sicuro" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "non sprechiamo il silenzio di elaborazione della potenza della CPU." + +#~ msgid "mean." +#~ msgstr "la media geometrica." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Ciò eviterà i casi in cui la Loudness `Integrata` rimanga fissa " +#~ "costantemente sullo stesso valore." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Questa release corregge i seguenti bug:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Questa release aggiunge le seguenti funzionalità:" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "al posto del session manager integrato in PipeWire. Maggiori informazioni " +#~ "in [1144](" + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Le icone non presenti sul sistema adesso non dovrebbero essere " +#~ "visualizzate nell'interfaccia delle applicazioni" + +#~ msgid "a look at and" +#~ msgstr "possono dare un'occhiata e" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Equalizzatore, Compressore e Altri Effetti Audio" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limiter;compressore;riverbero;equalizzatore;autovolume;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Profili\"" + +#~ msgid "Enable/disable this application" +#~ msgstr "Abilita/disabilita questa applicazione" + +#~ msgid "Enable" +#~ msgstr "Abilita" + +#~ msgid "Excluded App List: Add/remove this application" +#~ msgstr "Lista App Escluse: Aggiungi/rimuovi questa applicazione" + +#~ msgid "Exclude" +#~ msgstr "Escludi" + +#~ msgid "Mute Application" +#~ msgstr "Silenzia Applicazione" + +#~ msgid "Change the volume of this application" +#~ msgstr "Modifica il volume di questa applicazione" + +#~ msgid "Application Volume" +#~ msgstr "Volume Applicazione" + +#~ msgid "_Preferences" +#~ msgstr "_Preferenze" + +#~ msgid "_Manual" +#~ msgstr "_Manuale" + +#~ msgid "_Shortcuts" +#~ msgstr "_Scorciatoie" + +#~ msgid "_Reset Settings" +#~ msgstr "_Reset Preferenze" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Info su EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Profili" + +#~ msgid "Presets Menu" +#~ msgstr "Menu Profili" + +#~ msgid "Enable/disable the global bypass" +#~ msgstr "Abilita/disabilita il bypass globale" + +#~ msgid "Global Bypass" +#~ msgstr "Bypass Globale" + +#~ msgid "Primary Menu" +#~ msgstr "Menu Principale" + +#~ msgid "EasyEffects Window" +#~ msgstr "Finestra di EasyEffects" + +#~ msgid "Applications List" +#~ msgstr "Lista Applicazioni" + +#~ msgid "Empty List" +#~ msgstr "Elenco Vuoto" + +#~ msgid "No Audio Application Available" +#~ msgstr "Nessuna Applicazione Audio Disponibile" + +#~ msgid "Target" +#~ msgstr "Livello" + +#~ msgid "Maximum History" +#~ msgstr "Cronologia Massima" + +#~ msgid "Reference" +#~ msgstr "Riferimento" + +#~ msgid "Momentary" +#~ msgstr "Momentaneo" + +#~ msgid "Short-Term" +#~ msgstr "Breve-Termine" + +#~ msgid "Integrated" +#~ msgstr "Integrato" + +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Media Geometrica (MBI)" + +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Media Geometrica (MB)" + +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Media Geometrica (MI)" + +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Media Geometrica (BI)" + +#~ msgid "Reset History" +#~ msgstr "Reset Cronologia" + +#~ msgid "Relative" +#~ msgstr "Relativo" + +#~ msgid "Range" +#~ msgstr "Gamma" + +#~ msgid "Loudness" +#~ msgstr "Loudness" + +#~ msgid "Output Gain" +#~ msgstr "Guadagno Uscita" + +#~ msgid "Input" +#~ msgstr "Ingresso" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Guadagno in Ingresso del Plugin" + +#~ msgid "Output" +#~ msgstr "Uscita" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Guadagno in Uscita del Plugin" + +#~ msgid "Reset" +#~ msgstr "Reset" + +#~ msgid "Using" +#~ msgstr "Utilizzo" + +#~ msgid "Device" +#~ msgstr "Dispositivo Audio" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "Profile" +#~ msgstr "Profilo Dispositivo" + +#~ msgid "Preset" +#~ msgstr "Profilo EasyEffects" + +#~ msgid "Remove this autoload preset" +#~ msgstr "Rimuovi questo profilo di auto-caricamento" + +#~ msgid "Listen" +#~ msgstr "Ascolta" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mix Armoniche" + +#~ msgid "3rd" +#~ msgstr "3a" + +#~ msgid "2nd" +#~ msgstr "2a" + +#~ msgid "Amount" +#~ msgstr "Quantità" + +#~ msgid "Harmonics" +#~ msgstr "Armoniche" + +#~ msgid "Scope" +#~ msgstr "Soglia" + +#~ msgid "Floor" +#~ msgstr "Limite Inferiore" + +#~ msgid "Floor Value" +#~ msgstr "Valore Limite Inferiore" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Application Name" +#~ msgstr "Nome Applicazione" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "Aggiungi alle Applicazioni Escluse" + +#~ msgid "Excluded Applications List" +#~ msgstr "Lista delle Applicazioni Escluse" + +#~ msgid "Show Excluded Applications" +#~ msgstr "Mostra Applicazioni Escluse" + +#~ msgid "Compressor" +#~ msgstr "Compressore" + +#~ msgid "Mode" +#~ msgstr "Modalità" + +#~ msgid "Downward" +#~ msgstr "Riduttiva" + +#~ msgid "Upward" +#~ msgstr "Espansiva" + +#~ msgid "Boosting" +#~ msgstr "Incrementale" + +#~ msgid "Compression Mode" +#~ msgstr "Modalità Compressione" + +#~ msgid "Boost Threshold" +#~ msgstr "Soglia Incremento" + +#~ msgid "Boost Amount" +#~ msgstr "Quantità Incremento" + +#~ msgid "Attack" +#~ msgstr "Attacco" + +#~ msgid "Time" +#~ msgstr "Tempo" + +#~ msgid "Threshold" +#~ msgstr "Soglia" + +#~ msgid "Attack Time" +#~ msgstr "Tempo di Attacco" + +#~ msgid "Attack Threshold" +#~ msgstr "Soglia di Attacco" + +#~ msgid "Release" +#~ msgstr "Rilascio" + +#~ msgid "Release Time" +#~ msgstr "Tempo di Rilascio" + +#~ msgid "Release Threshold" +#~ msgstr "Soglia di Rilascio" + +#~ msgid "Ratio" +#~ msgstr "Rapporto" + +#~ msgid "Knee" +#~ msgstr "Curvatura" + +#~ msgid "Makeup" +#~ msgstr "Guadagno" + +#~ msgid "Sidechain" +#~ msgstr "Sidechain" + +#~ msgid "Peak" +#~ msgstr "Picco" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Passa-Basso" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "Sidechain Mode" +#~ msgstr "Modalità Sidechain" + +#~ msgid "Source" +#~ msgstr "Sorgente" + +#~ msgid "Middle" +#~ msgstr "Medio" + +#~ msgid "Side" +#~ msgstr "Lato" + +#~ msgid "Left" +#~ msgstr "Sinistro" + +#~ msgid "Right" +#~ msgstr "Destro" + +#~ msgid "Sidechain Source" +#~ msgstr "Sorgente Sidechain" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Feed-forward" +#~ msgstr "Feed-forward" + +#~ msgid "Feed-back" +#~ msgstr "Feed-back" + +#~ msgid "External" +#~ msgstr "Esterna" + +#~ msgid "Sidechain Type" +#~ msgstr "Tipo Sidechain" + +#~ msgid "Input Device" +#~ msgstr "Dispositivo Ingresso" + +#~ msgid "PreAmplification" +#~ msgstr "PreAmplificazione" + +#~ msgid "Reactivity" +#~ msgstr "Reattività" + +#~ msgid "Lookahead" +#~ msgstr "Lookahead" + +#~ msgid "Sidechain Filters" +#~ msgstr "Filtri Sidechain" + +#~ msgid "High-Pass" +#~ msgstr "Passa-Alto" + +#~ msgid "Frequency" +#~ msgstr "Frequenza" + +#~ msgid "Off" +#~ msgstr "Off" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/ott" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/ott" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/ott" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Modalità Filtro Passa-Alto" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Frequenza Filtro Passa-Alto" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Modalità Filtro Passa-Basso" + +#~ msgid "Gain" +#~ msgstr "Guadagno" + +#~ msgid "Envelope" +#~ msgstr "Envelope" + +#~ msgid "Curve" +#~ msgstr "Curva" + +#~ msgid "L" +#~ msgstr "S" + +#~ msgid "Left Channel" +#~ msgstr "Canale Sinistro" + +#~ msgid "R" +#~ msgstr "D" + +#~ msgid "Right Channel" +#~ msgstr "Canale Destro" + +#~ msgid "Impulses" +#~ msgstr "Impulsi" + +#~ msgid "Combine" +#~ msgstr "Combina" + +#~ msgid "Stereo Width" +#~ msgstr "Ampiezza Stereo" + +#~ msgid "Spectrum" +#~ msgstr "Spettro" + +#~ msgid "Log Scale" +#~ msgstr "Scala Logaritmica" + +#~ msgid "Autogain" +#~ msgstr "Auto Guadagno" + +#~ msgid "Rate" +#~ msgstr "Frequenza" + +#~ msgid "Samples" +#~ msgstr "Campioni" + +#~ msgid "Duration" +#~ msgstr "Durata" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "Combina Risposte Impulso" + +#~ msgid "First Kernel" +#~ msgstr "Primo Kernel" + +#~ msgid "Second Kernel" +#~ msgstr "Secondo Kernel" + +#~ msgid "Output File Name" +#~ msgstr "Nome File Combinato" + +#~ msgid "Combined Kernel Name" +#~ msgstr "Nome File Combinato" + +#~ msgid "Import Impulse" +#~ msgstr "Importa Impulso" + +#~ msgid "Search" +#~ msgstr "Cerca" + +#~ msgid "Search Impulse File" +#~ msgstr "Cerca File di Impulso" + +#~ msgid "Impulse Files List" +#~ msgstr "Lista File di Impulso" + +#~ msgid "Default" +#~ msgstr "Predefinito" + +#~ msgid "Cutoff" +#~ msgstr "Taglio" + +#~ msgid "Feed" +#~ msgstr "Feed" + +#~ msgid "Bypass" +#~ msgstr "Bypass" + +#~ msgid "Mute" +#~ msgstr "Silenzia" + +#~ msgid "Detection" +#~ msgstr "Rilevamento" + +#~ msgid "Wide" +#~ msgstr "Banda Larga" + +#~ msgid "Split" +#~ msgstr "Split" + +#~ msgid "F1 Split" +#~ msgstr "F1 Split" + +#~ msgid "Frequency 1 Split" +#~ msgstr "Frequenza 1 Split" + +#~ msgid "F2 Peak" +#~ msgstr "F2 Picco" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frequenza 2 Picco" + +#~ msgid "F1 Gain" +#~ msgstr "F1 Guadagno" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frequenza 1 Guadagno" + +#~ msgid "F2 Level" +#~ msgstr "F2 Livello" + +#~ msgid "Frequency 2 Level" +#~ msgstr "Frequenza 2 Livello" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2 Picco Q" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frequenza 2 Picco Q" + +#~ msgid "Laxity" +#~ msgstr "Lassità" + +#~ msgid "Detected" +#~ msgstr "Rilevato" + +#~ msgid "Reduction" +#~ msgstr "Riduzione" + +#~ msgid "Frame Size" +#~ msgstr "Dimensione Frame" + +#~ msgid "Filter Length" +#~ msgstr "Lunghezza Filtro" + +#~ msgid "Excluded Apps" +#~ msgstr "App Escluse" + +#~ msgid "Bands" +#~ msgstr "Bande" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Separa Canali" + +#~ msgid "Flat Response" +#~ msgstr "Risposta Piatta" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calcola Frequenze" + +#~ msgid "Load APO Preset" +#~ msgstr "Carica Profilo APO" + +#~ msgid "Bell" +#~ msgstr "Campana" + +#~ msgid "High Pass" +#~ msgstr "Passa Alto" + +#~ msgid "High Shelf" +#~ msgstr "Sopra Soglia" + +#~ msgid "Low Pass" +#~ msgstr "Passa Basso" + +#~ msgid "Low Shelf" +#~ msgstr "Sotto Soglia" + +#~ msgid "Notch" +#~ msgstr "Notch" + +#~ msgid "Resonance" +#~ msgstr "Risonanza" + +#~ msgid "All Pass" +#~ msgstr "Passa Tutto" + +#~ msgid "Band Type" +#~ msgstr "Tipo Banda" + +#~ msgid "Band Mode" +#~ msgstr "Modalità Banda" + +#~ msgid "Slope" +#~ msgstr "Pendenza" + +#~ msgid "Band Slope" +#~ msgstr "Pendenza della Banda" + +#~ msgid "Width" +#~ msgstr "Ampiezza" + +#~ msgid "Quality" +#~ msgstr "Qualità" + +#~ msgid "Solo" +#~ msgstr "Isola" + +#~ msgid "Ceil" +#~ msgstr "Limite Superiore" + +#~ msgid "Ceil Value" +#~ msgstr "Valore Limite Superiore" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Accesso" + +#~ msgid "Description" +#~ msgstr "Descrizione" + +#~ msgid "Remove this model file" +#~ msgstr "Rimuovi questo profilo" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Passa Basso" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Passa Basso" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Passa Basso" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Passa Alto" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Passa Alto" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Passa Alto" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Passa Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Passa Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Passa Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Elimina Banda" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Elimina Banda" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Elimina Banda" + +#~ msgid "Inertia" +#~ msgstr "Inerzia" + +#~ msgid "Gate" +#~ msgstr "Gate" + +#~ msgid "Zone" +#~ msgstr "Zona" + +#~ msgid "Hysteresis" +#~ msgstr "Isteresi" + +#~ msgid "Attack Zone Start" +#~ msgstr "Inizio Zona Attacco" + +#~ msgid "Release Zone Start" +#~ msgstr "Inizio Zona Rilascio" + +#~ msgid "Internal" +#~ msgstr "Interna" + +#~ msgid "Gating" +#~ msgstr "Gate" + +#~ msgid "Oversampling" +#~ msgstr "Sovracampionamento" + +#~ msgid "Dither" +#~ msgstr "Dither" + +#~ msgid "Herm Thin" +#~ msgstr "Herm Thin" + +#~ msgid "Herm Wide" +#~ msgstr "Herm Wide" + +#~ msgid "Herm Tail" +#~ msgstr "Herm Tail" + +#~ msgid "Herm Duck" +#~ msgstr "Herm Duck" + +#~ msgid "Exp Thin" +#~ msgstr "Exp Thin" + +#~ msgid "Exp Wide" +#~ msgstr "Exp Wide" + +#~ msgid "Exp Tail" +#~ msgstr "Exp Tail" + +#~ msgid "Exp Duck" +#~ msgstr "Exp Duck" + +#~ msgid "Line Thin" +#~ msgstr "Line Thin" + +#~ msgid "Line Wide" +#~ msgstr "Line Wide" + +#~ msgid "Line Tail" +#~ msgstr "Line Tail" + +#~ msgid "Line Duck" +#~ msgstr "Line Duck" + +#~ msgid "None" +#~ msgstr "Off" + +#~ msgid "Half x2(2L)" +#~ msgstr "Parziale x2(2L)" + +#~ msgid "Half x2(3L)" +#~ msgstr "Parziale x2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "Parziale x3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "Parziale x3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "Parziale x4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "Parziale x4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "Parziale x6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "Parziale x6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "Parziale x8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "Parziale x8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "Intero x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "Intero x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "Intero x3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "Intero x3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "Intero x4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "Intero x4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "Intero x6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "Intero x6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "Intero x8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "Intero x8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "SC PreAmp" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "PreAmplificazione Sidechain" + +#~ msgid "Boost" +#~ msgstr "Incremento" + +#~ msgid "Stereo Link" +#~ msgstr "Relazione Canali" + +#~ msgid "External Sidechain" +#~ msgstr "Sidechain Esterna" + +#~ msgid "External Sidechain Source" +#~ msgstr "Sorgente Sidechain Esterna" + +#~ msgid "Auto Leveling" +#~ msgstr "Auto Regolazione" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "Auto Regolazione Attacco" + +#~ msgid "Auto Leveling Release" +#~ msgstr "Auto Regolazione Rilascio" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "Auto Regolazione Curvatura" + +#~ msgid "Gain Left" +#~ msgstr "Guadagno Sinistro" + +#~ msgid "Gain Right" +#~ msgstr "Guadagno Destro" + +#~ msgid "Sidechain Left" +#~ msgstr "Sidechain Sinistro" + +#~ msgid "Sidechain Right" +#~ msgstr "Sidechain Destro" + +#~ msgid "Standard" +#~ msgstr "Standard" + +#~ msgid "Flat" +#~ msgstr "Flat" + +#~ msgid "FFT Size" +#~ msgstr "Dimensione FFT" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Dimensione della Trasformata di Fourier Veloce" + +#~ msgid "Output Volume" +#~ msgstr "Volume Uscita" + +#~ msgid "Ceiling" +#~ msgstr "Limite Superiore" + +#~ msgid "Operating Mode" +#~ msgstr "Modalità Operativa" + +#~ msgid "Classic" +#~ msgstr "Classica" + +#~ msgid "Modern" +#~ msgstr "Moderna" + +#~ msgid "Sidechain Boost" +#~ msgstr "Incremento Sidechain" + +#~ msgid "Pink BT" +#~ msgstr "Rumore Rosa BT" + +#~ msgid "Pink MT" +#~ msgstr "Rumore Rosa MT" + +#~ msgid "Brown BT" +#~ msgstr "Rumore Marrone BT" + +#~ msgid "Brown MT" +#~ msgstr "Rumore Marrone MT" + +#~ msgid "Bands List" +#~ msgstr "Lista Bande" + +#~ msgid "Band 1" +#~ msgstr "Banda 1" + +#~ msgid "Band 2" +#~ msgstr "Banda 2" + +#~ msgid "Band 3" +#~ msgstr "Banda 3" + +#~ msgid "Band 4" +#~ msgstr "Banda 4" + +#~ msgid "Band 5" +#~ msgstr "Banda 5" + +#~ msgid "Band 6" +#~ msgstr "Banda 6" + +#~ msgid "Band 7" +#~ msgstr "Banda 7" + +#~ msgid "Band 8" +#~ msgstr "Banda 8" + +#~ msgid "Band Start" +#~ msgstr "Inizio Banda" + +#~ msgid "Band End" +#~ msgstr "Fine Banda" + +#~ msgid "Band Compression Mode" +#~ msgstr "Banda Modalità Compressione" + +#~ msgid "Band Bypass" +#~ msgstr "Bypass Banda" + +#~ msgid "Band Sidechain Options" +#~ msgstr "Opzioni Sidechain Banda" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro Passa-Basso" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Frequenza Filtro Passa-Basso" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro Passa-Alto" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Frequenza Filtro Passa-Alto" + +#~ msgid "PreAmp" +#~ msgstr "PreAmp" + +#~ msgid "Band Gain" +#~ msgstr "Guadagno Banda" + +#~ msgid "Band Envelope" +#~ msgstr "Envelope Banda" + +#~ msgid "Band Curve" +#~ msgstr "Curva Banda" + +#~ msgid "Split Mode" +#~ msgstr "Modalità Split" + +#~ msgid "Split 1/2" +#~ msgstr "Split 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Frequenza Split 1" + +#~ msgid "Split 2/3" +#~ msgstr "Split 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Frequenza Split 2" + +#~ msgid "Split 3/4" +#~ msgstr "Split 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Frequenza Split 3" + +#~ msgid "Sub Band" +#~ msgstr "Sottobanda" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Banda 1 Bypass" + +#~ msgid "Band 1 Solo" +#~ msgstr "Banda 1 Isola" + +#~ msgid "Band 1 Detection" +#~ msgstr "Banda 1 Rilevamento" + +#~ msgid "Band 1 Attack" +#~ msgstr "Banda 1 Attacco" + +#~ msgid "Band 1 Release" +#~ msgstr "Banda 1 Rilascio" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Banda 1 Soglia" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Banda 1 Rapporto" + +#~ msgid "Band 1 Knee" +#~ msgstr "Banda 1 Curvatura" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Banda 1 Guadagno" + +#~ msgid "Max Reduction" +#~ msgstr "Max Riduzione" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Banda 1 Massima Riduzione" + +#~ msgid "Low Band" +#~ msgstr "Banda Bassa" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Banda 2 Bypass" + +#~ msgid "Band 2 Solo" +#~ msgstr "Banda 2 Isola" + +#~ msgid "Band 2 Detection" +#~ msgstr "Banda 2 Rilevamento" + +#~ msgid "Band 2 Attack" +#~ msgstr "Banda 2 Attacco" + +#~ msgid "Band 2 Release" +#~ msgstr "Banda 2 Rilascio" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Banda 2 Soglia" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Banda 2 Rapporto" + +#~ msgid "Band 2 Knee" +#~ msgstr "Banda 2 Curvatura" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Banda 2 Guadagno" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Banda 2 Massima Riduzione" + +#~ msgid "Mid Band" +#~ msgstr "Banda Media" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Banda 3 Bypass" + +#~ msgid "Band 3 Solo" +#~ msgstr "Banda 3 Isola" + +#~ msgid "Band 3 Detection" +#~ msgstr "Banda 3 Rilevamento" + +#~ msgid "Band 3 Attack" +#~ msgstr "Banda 3 Attacco" + +#~ msgid "Band 3 Release" +#~ msgstr "Banda 3 Rilascio" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Banda 3 Soglia" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Banda 3 Rapporto" + +#~ msgid "Band 3 Knee" +#~ msgstr "Banda 3 Curvatura" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Banda 3 Guadagno" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Banda 3 Massima Riduzione" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Banda 4 Bypass" + +#~ msgid "Band 4 Solo" +#~ msgstr "Banda 4 Isola" + +#~ msgid "Band 4 Detection" +#~ msgstr "Banda 4 Rilevamento" + +#~ msgid "Band 4 Attack" +#~ msgstr "Banda 4 Attacco" + +#~ msgid "Band 4 Release" +#~ msgstr "Banda 4 Rilascio" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Banda 4 Soglia" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Banda 4 Rapporto" + +#~ msgid "Band 4 Knee" +#~ msgstr "Banda 4 Curvatura" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Banda 4 Guadagno" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Banda 4 Massima Riduzione" + +#~ msgid "General" +#~ msgstr "Generale" + +#~ msgid "Device Management" +#~ msgstr "Gestione Dispositivi" + +#~ msgid "" +#~ "It's recommended to NOT set EasyEffects Sink/Source as Default Device in " +#~ "external applications (e.g. Gnome Settings and Plasma System Settings)." +#~ msgstr "" +#~ "Si raccomanda di NON impostare EasyEffects Sink/Source come Dispositivo " +#~ "Predefinito in applicazioni esterne (per esempio Gnome Settings e Plasma " +#~ "System Settings)." + +#~ msgid "Use Default Input" +#~ msgstr "Usa Ingresso Predefinito" + +#~ msgid "Custom Input Device" +#~ msgstr "Dispositivo Ingresso Personalizzato" + +#~ msgid "Use Default Output" +#~ msgstr "Usa Uscita Predefinita" + +#~ msgid "Custom Output Device" +#~ msgstr "Dispositivo Uscita Personalizzato" + +#~ msgid "Server Information" +#~ msgstr "Informazioni Server" + +#~ msgid "Header Version" +#~ msgstr "Versione Header" + +#~ msgid "Library Version" +#~ msgstr "Versione Libreria" + +#~ msgid "Sampling Rate" +#~ msgstr "Frequenza di Campionamento" + +#~ msgid "Minimum Quantum" +#~ msgstr "Quantum Minimo" + +#~ msgid "Maximum Quantum" +#~ msgstr "Quantum Massimo" + +#~ msgid "Default Quantum" +#~ msgstr "Quantum Predefinito" + +#~ msgid "Output Devices" +#~ msgstr "Dispositivi di Uscita" + +#~ msgid "Output Presets" +#~ msgstr "Profili di Uscita" + +#~ msgid "Create Association" +#~ msgstr "Crea Associazione" + +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "Aggiungi Profilo di Auto Caricamento in Uscita" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Profili di Auto Caricamento in Uscita" + +#~ msgid "Input Devices" +#~ msgstr "Dispositivi di Ingresso" + +#~ msgid "Input Presets" +#~ msgstr "Profili di Ingresso" + +#~ msgid "Add Autoloading Input Preset" +#~ msgstr "Aggiungi Profilo di Auto Caricamento in Ingresso" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Profili di Auto Caricamento in Ingresso" + +#~ msgid "Modules" +#~ msgstr "Moduli" + +#~ msgid "Modules List" +#~ msgstr "Lista Moduli" + +#~ msgid "Clients" +#~ msgstr "Client" + +#~ msgid "Clients List" +#~ msgstr "Lista Client" + +#~ msgid "Test Signal" +#~ msgstr "Segnale di Test" + +#~ msgid "State" +#~ msgstr "Stato" + +#~ msgid "Enabled" +#~ msgstr "Abilitato" + +#~ msgid "Properties" +#~ msgstr "Proprietà" + +#~ msgid "Channels" +#~ msgstr "Canali" + +#~ msgid "Both" +#~ msgstr "Entrambi" + +#~ msgid "Both Channels" +#~ msgstr "Entrambi i Canali" + +#~ msgid "Waveform" +#~ msgstr "Tipo Onda" + +#~ msgid "Sine Wave" +#~ msgstr "Sinusoidale" + +#~ msgid "White Noise" +#~ msgstr "Rumore Bianco" + +#~ msgid "High Speed" +#~ msgstr "Alta Velocità" + +#~ msgid "High Quality" +#~ msgstr "Alta Qualità" + +#~ msgid "High Consistency" +#~ msgstr "Alta Consistenza" + +#~ msgid "Formant" +#~ msgstr "Formante" + +#~ msgid "Shifted" +#~ msgstr "Alterata" + +#~ msgid "Preserved" +#~ msgstr "Preservata" + +#~ msgid "Transients" +#~ msgstr "Transienti" + +#~ msgid "Crisp" +#~ msgstr "Netti" + +#~ msgid "Mixed" +#~ msgstr "Intermedi" + +#~ msgid "Smooth" +#~ msgstr "Tenui" + +#~ msgid "Detector" +#~ msgstr "Rilevazione" + +#~ msgid "Compound" +#~ msgstr "Composto" + +#~ msgid "Percussive" +#~ msgstr "Percussivo" + +#~ msgid "Soft" +#~ msgstr "Soft" + +#~ msgid "Phase" +#~ msgstr "Fase" + +#~ msgid "Laminar" +#~ msgstr "Laminare" + +#~ msgid "Independent" +#~ msgstr "Indipendente" + +#~ msgid "Cents" +#~ msgstr "Centesimi" + +#~ msgid "Semitones" +#~ msgstr "Semitoni" + +#~ msgid "Octaves" +#~ msgstr "Ottave" + +#~ msgid "Remove this effect" +#~ msgstr "Rimuovi questo effetto" + +#~ msgid "Enable/disable this effect" +#~ msgstr "Abilita/disabilita questo effetto" + +#~ msgid "Change the position of this effect" +#~ msgstr "Cambia la posizione di questo effetto" + +#~ msgid "Add Effect" +#~ msgstr "Aggiungi Effetto" + +#~ msgid "Used Plugins List" +#~ msgstr "Lista Moduli Utilizzati" + +#~ msgid "No Effects" +#~ msgstr "Nessun Effetto" + +#~ msgid "Audio Stream Not Modified" +#~ msgstr "Flusso Audio Non Alterato" + +#~ msgid "Search Plugin" +#~ msgstr "Cerca Modulo" + +#~ msgid "Plugins List" +#~ msgstr "Lista dei Moduli" + +#~ msgid "_General" +#~ msgstr "_Generale" + +#~ msgid "Service" +#~ msgstr "Servizio" + +#~ msgid "Launch Service at System Startup" +#~ msgstr "Inizia come Servizio all'Avvio del Sistema" + +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Termina alla Chiusura della Finestra" + +#~ msgid "Audio" +#~ msgstr "Audio" + +#~ msgid "Process All Output Streams" +#~ msgstr "Processa Tutto i Flussi in Uscita" + +#~ msgid "Process All Input Streams" +#~ msgstr "Processa Tutti i Flussi in Ingresso" + +#~ msgid "Ignore Streams from Monitor of Devices" +#~ msgstr "Ignora i Flussi dai Monitor dei Dispositivi" + +#~ msgid "Use Cubic Volume" +#~ msgstr "Usa Volume Cubico" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "" +#~ "Reimposta il Volume dei Dispositivi Virtuali di EasyEffects all'Avvio" + +#~ msgid "Inactivity Timeout" +#~ msgstr "Tempo Inattività" + +#~ msgid "Style" +#~ msgstr "Stile" + +#~ msgid "Use Dark Theme" +#~ msgstr "Usa Tema Scuro" + +#~ msgid "Hide Menus on Outside Clicks" +#~ msgstr "Chiudi Menu con Click Esterno" + +#~ msgid "_Spectrum" +#~ msgstr "_Spettro" + +#~ msgid "Shape" +#~ msgstr "Forma" + +#~ msgid "Bars" +#~ msgstr "Barre" + +#~ msgid "Lines" +#~ msgstr "Linee" + +#~ msgid "Dots" +#~ msgstr "Punti" + +#~ msgid "Points" +#~ msgstr "Punti" + +#~ msgid "Height" +#~ msgstr "Altezza" + +#~ msgid "Line Width" +#~ msgstr "Spessore Linea" + +#~ msgid "Fill" +#~ msgstr "Riempi" + +#~ msgid "Show Bars Border" +#~ msgstr "Mostra Bordo" + +#~ msgid "Rounded Corners" +#~ msgstr "Angoli Arrotondati" + +#~ msgid "Color" +#~ msgstr "Colore" + +#~ msgid "Lines and Bars" +#~ msgstr "Linee e Barre" + +#~ msgid "Axis Labels" +#~ msgstr "Etichette sull'Asse" + +#~ msgid "Frequency Range" +#~ msgstr "Gamma Frequenze" + +#~ msgid "Minimum" +#~ msgstr "Minima" + +#~ msgid "Maximum" +#~ msgstr "Massima" + +#~ msgid "Load" +#~ msgstr "Carica" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Salva impostazioni attuali in questo profilo" + +#~ msgid "Remove this preset file" +#~ msgstr "Rimuovi questo profilo" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nome Nuovo Profilo di Uscita" + +#~ msgid "Create a new preset" +#~ msgstr "Crea un nuovo profilo" + +#~ msgid "Import a preset" +#~ msgstr "Importa un profilo" + +#~ msgid "Search Output Preset" +#~ msgstr "Cerca Profilo di Uscita" + +#~ msgid "Output Presets List" +#~ msgstr "Lista Profili di Uscita" + +#~ msgid "New Input Preset Name" +#~ msgstr "Nome Nuovo Profilo di Ingresso" + +#~ msgid "Search Input Preset" +#~ msgstr "Cerca Profilo di Ingresso" + +#~ msgid "Input Presets List" +#~ msgstr "Lista Profili di Ingresso" + +#~ msgid "High Frequency Damping" +#~ msgstr "Smorza Alte Frequenze" + +#~ msgid "Room Size" +#~ msgstr "Dimensione Stanza" + +#~ msgid "Small" +#~ msgstr "Piccola" + +#~ msgid "Medium" +#~ msgstr "Media" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Tunnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/liscia" + +#~ msgid "Experimental" +#~ msgstr "Sperimentale" + +#~ msgid "Diffusion" +#~ msgstr "Diffusione" + +#~ msgid "Pre Delay" +#~ msgstr "Pre Ritardo" + +#~ msgid "Decay Time" +#~ msgstr "Tempo Decay" + +#~ msgid "Wet Amount" +#~ msgstr "Quantità Dry" + +#~ msgid "Wet Level" +#~ msgstr "Livello Wet" + +#~ msgid "Dry Amount" +#~ msgstr "Quantità Wet" + +#~ msgid "Dry Level" +#~ msgstr "Livello Dry" + +#~ msgid "Bass Cut" +#~ msgstr "Taglio Bassi" + +#~ msgid "Treble Cut" +#~ msgstr "Taglio Alti" + +#~ msgid "Ambience" +#~ msgstr "Ambiente" + +#~ msgid "Empty Walls" +#~ msgstr "Mura Vuote" + +#~ msgid "Room" +#~ msgstr "Stanza" + +#~ msgid "Large Empty Hall" +#~ msgstr "Sala Grande Vuota" + +#~ msgid "Disco" +#~ msgstr "Discoteca" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Sala Grande Occupata" + +#~ msgid "Import Model" +#~ msgstr "Importa Modello" + +#~ msgid "Models" +#~ msgstr "Modelli" + +#~ msgid "Standard Model" +#~ msgstr "Modello Standard" + +#~ msgid "RNNoise Models List" +#~ msgstr "Lista Modelli RNNoise" + +#~ msgid "Model Not Loaded" +#~ msgstr "Modello Non Caricato" + +#~ msgid "Active Model" +#~ msgstr "Modello Attivo" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Modello RNNoise Standard" + +#~ msgid "Overview" +#~ msgstr "Sommario" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Apri il Manuale di EasyEffects" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Attiva/Disattiva Schermo Intero" + +#~ msgid "Close the Window" +#~ msgstr "Chiudi la Finestra" + +#~ msgid "Quit EasyEffects" +#~ msgstr "Termina EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Bilanciamento" + +#~ msgid "Input Balance" +#~ msgstr "Bilanciamento Ingresso" + +#~ msgid "Softclip" +#~ msgstr "Softclip" + +#~ msgid "Softclip Level" +#~ msgstr "Livello Softclip" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matrice Stereo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "SD > SD (Predefinito Stereo)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "SD > MS (Stereo a Medio-Lato)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > SD (Medio-Lato a Stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "SD > SS (Canale Sinistro Mono)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "SD > DD (Canale Destro Mono)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "SD > S+D (Mono Somma S+D)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "SD > DS (Inverti Canali Stereo)" + +#~ msgid "Stereo Mode" +#~ msgstr "Modalità Stereo" + +#~ msgid "Invert Phase" +#~ msgstr "Inverti Fase" + +#~ msgid "Side Level" +#~ msgstr "Livello Lato" + +#~ msgid "Side Balance" +#~ msgstr "Bilanciamento Lato" + +#~ msgid "Middle Level" +#~ msgstr "Livello Medio" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama Medio" + +#~ msgid "Output Balance" +#~ msgstr "Bilanciamento in Uscita" + +#~ msgid "Delay L/R" +#~ msgstr "Delay S/D" + +#~ msgid "Delay Left Right" +#~ msgstr "Ritardo Sinistro Destro" + +#~ msgid "Stereo Base" +#~ msgstr "Base Stereo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fase Stereo" + +#~ msgid "Running" +#~ msgstr "In esecuzione" + +#~ msgid "Suspended" +#~ msgstr "Sospeso" + +#~ msgid "Idle" +#~ msgstr "Inattivo" + +#~ msgid "Creating" +#~ msgstr "In creazione" + +#~ msgid "Error" +#~ msgstr "Errore" + +#~ msgid "Unknown" +#~ msgstr "Sconosciuto" + +#~ msgid "channels" +#~ msgstr "Canali" + +#~ msgid "Output Presets: " +#~ msgstr "Profili Uscita: " + +#~ msgid "Input Presets: " +#~ msgstr "Profili Ingresso: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Effetti Audio per Applicazioni PipeWire" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Esci da EasyEffects. Utile in esecuzione come servizio." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Carica un profilo. Esempio: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Reset EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Nascondi la Finestra." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Bypass globale. 1 per abilitare, 2 per disabilitare e 3 per ottenere lo " +#~ "stato" + +#~ msgid "Show available presets." +#~ msgstr "Mostra profili disponibili." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#~ msgid "The File Is Not Regular" +#~ msgstr "Il File È Irregolare" + +#~ msgid "The Impulse File May Be Corrupted or Unsupported" +#~ msgstr "Il File di Risposta Impulsiva Può Essere Corrotto o Non Supportato" + +#~ msgid "Only Stereo Impulse Files Are Supported" +#~ msgstr "" +#~ "Sono Supportati Soltanto File di Risposta Impulsiva in Formato Stereo" + +#~ msgid "Impulse File Not Imported" +#~ msgstr "File di Risposta Impulsiva Non Importato" + +#~ msgid "Import Impulse File" +#~ msgstr "Importa File di Impulso" + +#~ msgid "Open" +#~ msgstr "Apri" + +#~ msgid "Cancel" +#~ msgstr "Annulla" + +#~ msgid "Impulse Response" +#~ msgstr "Risposta Impulso" + +#~ msgid "Load Impulse" +#~ msgstr "Carica Impulso" + +#~ msgid "Remove Impulse" +#~ msgstr "Rimuovi Impulso" + +#~ msgid "No Impulse File Loaded" +#~ msgstr "Nessun File di Risposta Impulsiva Caricato" + +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Impossibile Caricare il File di Risposta Impulsiva" + +#~ msgid "Recorders" +#~ msgstr "Registratori" + +#~ msgid "Players" +#~ msgstr "Riproduttori" + +#~ msgid "Effects" +#~ msgstr "Effetti" + +#~ msgid "infinity" +#~ msgstr "infinito" + +#~ msgid "Import APO Preset File" +#~ msgstr "Importa File Profilo APO" + +#~ msgid "APO Presets" +#~ msgstr "Profili APO" + +#~ msgid "" +#~ "APO Preset Not Loaded. File Format May Be Wrong. Please Check Its Content." +#~ msgstr "" +#~ "Profilo APO Non Caricato. Il Formato Può Essere Errato. Si Prega di " +#~ "Controllare il Contenuto." + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Rimuovi Profilo di Auto Caricamento" + +#~ msgid "Remove" +#~ msgstr "Rimuovi" + +#~ msgid "Output Device" +#~ msgstr "Dispositivo Uscita" + +#~ msgid "Add" +#~ msgstr "Aggiungi" + +#~ msgid "Import Preset" +#~ msgstr "Importa Profilo" + +#~ msgid "" +#~ "Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To " +#~ "The Standard Model." +#~ msgstr "" +#~ "Il Modello Selezionato Non È Stato Caricato. Il Formato Potrebbe Essere " +#~ "Non Supportato. Il Modello Standard È Stato Ripristinato." + +#~ msgid "Import Model File" +#~ msgstr "Importa File Modello" + +#~ msgid "RNNoise Models" +#~ msgstr "Modelli RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Enfasi Bassi" + +#~ msgid "Bass Loudness" +#~ msgstr "Loudness Bassi" + +#~ msgid "Convolver" +#~ msgstr "Convolver" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Crystalizer" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Delay" + +#~ msgid "Echo Canceller" +#~ msgstr "Rimozione Eco" + +#~ msgid "Equalizer" +#~ msgstr "Equalizzatore" + +#~ msgid "Exciter" +#~ msgstr "Exciter" + +#~ msgid "Filter" +#~ msgstr "Filtro" + +#~ msgid "Limiter" +#~ msgstr "Limiter" + +#~ msgid "Maximizer" +#~ msgstr "Maximizer" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compressore Multibanda" + +#~ msgid "Multiband Gate" +#~ msgstr "Gate Multibanda" + +#~ msgid "Pitch" +#~ msgstr "Intonazione" + +#~ msgid "Reverberation" +#~ msgstr "Riverbero" + +#~ msgid "Noise Reduction" +#~ msgstr "Riduzione Rumore" + +#~ msgid "Stereo Tools" +#~ msgstr "Strumenti Stereo" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Chiudi (Premi ESC)" + +#~ msgid "Average" +#~ msgstr "Media" + +#~ msgid "Failed" +#~ msgstr "Errore" + +#~ msgid "Use Default" +#~ msgstr "Usa Predefinito" + +#~ msgid "Remove this plugin" +#~ msgstr "Rimuovi questo profilo" + +#~ msgid "Import Presets" +#~ msgstr "Importa Profili" + +#~ msgid "Start Service at Login" +#~ msgstr "Esegui Servizio all'Avvio" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Reimposta il Volume di EasyEffects all'Avvio" + +#~ msgid "Shutdown on Window Close" +#~ msgstr "Termina alla Chiusura della Finestra" + +#~ msgid "Process All Outputs" +#~ msgstr "Processa Tutto in Uscita" + +#~ msgid "Process All Inputs" +#~ msgstr "Processa Tutto in Ingresso" + +#~ msgid "Exclude Device Monitor Streams" +#~ msgstr "Escludi i flussi di monitoraggio del dispositivo" + +#~ msgid "Activate" +#~ msgstr "Abilita" + +#~ msgid "Add to Blocklist" +#~ msgstr "Aggiungi ad App Escluse" + +#~ msgid "Blocklist" +#~ msgstr "App Escluse" + +#~ msgid "Add Plugin" +#~ msgstr "Aggiungi Modulo" + +#~ msgid "Speakers" +#~ msgstr "Altoparlanti" + +#~ msgid "Microphone" +#~ msgstr "Microfono" + +#~ msgid "Plugins" +#~ msgstr "Moduli" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Attivato" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Attivato" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latenza" + +#~ msgid "idle" +#~ msgstr "inattivo" + +#~ msgid "Faster" +#~ msgstr "Più Veloce" + +#~ msgid "Preserve Formant" +#~ msgstr "Preserva Formante" + +#~ msgid "Crispness" +#~ msgstr "Chiarezza" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not" +#~ msgstr "" +#~ "Il filtro di guadagno automatico dovrebbe gestire meglio gli interruttori " +#~ "di latenza dinamica di PipeWire. I salti nel livello del volume non " +#~ "dovrebbe" + +#~ msgid "happen anymore in these situations." +#~ msgstr "succedere più in queste situazioni." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts." +#~ msgstr "" +#~ "Abbiamo aggiunto un'opzione che consente di ripristinare il volume e lo " +#~ "stato muto dei nostri dispositivi virtuali all'avvio di EasyEffects." + +#~ msgid "" +#~ "It should help with the cases were our devices are muted by the audio " +#~ "server for unknown reasons." +#~ msgstr "" +#~ "Dovrebbe aiutare con i casi in cui i nostri dispositivi sono silenziati " +#~ "dal server audio per ragioni sconosciute." + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" diff --git a/po/news/ja.po b/po/news/ja.po new file mode 100644 index 0000000..c69b645 --- /dev/null +++ b/po/news/ja.po @@ -0,0 +1,3224 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-03-23 03:22+0000\n" +"Last-Translator: \"R.Suga\" <21r.suga@gmail.com>\n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.16.2-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "PipeWire アプリケーション用オーディオエフェクト" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects は、高度なオーディオ操作ツールです。イコライザー、リミッター、コ" +"ンプレッサー、リバーブツールなどが含まれています。さらに、スペクトラムアナラ" +"イザーもあります。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects は、PulseEffects の後継版です。Easy Effects は PipeWire のオー" +"ディオサーバーのみ対応しています。PulseAudio をお使いの場合、代わりに " +"PulseEffects をお使いください。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Easy Effects はデフォルトの PipeWire サウンドサーバーを使用しているので、ほと" +"んどのアプリケーションで動作します。サポートされているすべてのアプリケーショ" +"ンは、メインウィンドウに表示され、それぞれ個別に有効にすることができます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Easy Effects は、音の出力を操作するだけでなく、マイクなどの入力デバイスにもエ" +"フェクトをかけることができます。例えば、音声録音の時に便利ですが、音声会話の" +"時にも効果を発揮します。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Easy Effects を起動すると、前回のセッションで使用した設定を適用します。また、" +"現在のすべての設定をプロファイルとして保存することもできます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "2 つのオーディオ出力アプリを表示するメインページ" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "オーディオコントロールを表示するベースエンハンサーページ" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "オーディオコントロールを表示するコンボルバーのページ" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "機能:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "不具合修正:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "その他の注意事項:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +#, fuzzy +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" +"サチュレーション警告は、もう隣のウィジェットの位置を変えることはありません" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "翻訳の更新" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" +"スペクトラムプラグインの更新頻度を改善しました。サンプリングレートの違いによ" +"り、視覚的に同様の周波数に更新されるはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" +"レベルメーターとスペクトラムが使用する更新間隔は、カスタマイズすることができ" +"ます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" +"イコライザーバンドゲインのスライダー値を、より大きなステップで更新することが" +"できます。キーボードのアップ/ダウンキーによる細かいコントロールも可能です。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "エコーキャンセラーの小さな改善。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" +"マルチフィルターインタンスに移行した後、エコーキャンセラープローブがサウンド" +"カードにリンクされていませんでした。これは現在修正されているはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" +"エフェクトパイプラインに複数のフィルターインスタンスを追加することができるよ" +"うになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"Speex ライブラリをベースにしたスピーチプロセッサープラグインを新たに追加しま" +"した。ノイズの抑制に加え、音声のアクティビティを検出することができます。" +"rnnoise ライブラリがうまく動作しない場合の代替品となります。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "Linux Studio プラグイン 1.2.3 との互換性が向上しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "GraphicEQ プリセットは、イコライザーエフェクトにインポートできます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"GNOME Human Interface Guidelines の命名規則に準拠するため、アプリケーション名" +"は Easy Effects に変更されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "ドキュメントが更新されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "プリセットの自動読み込みが改善されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "オートゲイン無音しきい値をユーザーが設定できるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" +"ドライコントロールとウェットコントロールがステレオツールエフェクトに追加され" +"ました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" +"エコーキャンセラーに、Speex ライブラリを用いたノイズ抑制制御機能が追加されま" +"した。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" +"カーソルをグラフの上に合わせると、X軸座標の間違った値が表示されていました。こ" +"の問題は修正されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"新しい複数インスタンス機能のため、プリセットの形式が変更されましたが、古いプ" +"リセットを読み込むことは可能です。ただし、現在のプリセットを保存すると、常に" +"新しいフォーマットで書き込まれます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"マルチバンドゲートの実装が CALF から Linux Studio Plugins に移行されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"bluez5 デバイスとのプリセットオートロードコードの互換性が改善されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "一部のプラグインにウェット/ドライコントロールが追加されました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"関連する lv2 プラグインがシステムにインストールされていない場合、エフェクトイ" +"ンターフェースがロードされないようになりました。その代わりに、ユーザーへのス" +"テータスメッセージが表示されます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "ドキュメントが更新されました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "デバッグメッセージの改善" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "翻訳の更新" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "翻訳の改善" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"エフェクトの適用中にウィンドウを閉じると EasyEffects がクラッシュする不具合を" +"修正しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" +"バイパス状態はプリセットファイルに保存できます。これが行われた理由は、issue " +"1039 で見ることができます" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "USB デバイスとのプリセットオートロードコードの互換性が向上しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"プリセットの読み込みに失敗したときや、プリセット/インパルスファイルのインポー" +"トに失敗したときに、ダイアログを表示するようにしました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"Linux Studio Plugins の サイドチェーンゲートプラグインが Calf Studio プラグイ" +"ンの代わりに使われるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"ユーザーロケールが適切に設定されていない時に EasyEffects がクラッシュしないよ" +"うになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"QT での適切な SVG サポートの欠如に対処するために、回避策がアイコンに実装され" +"ました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"アプリケーションへのエフェクトが無効の場合、そのターゲットメタデータを NULL " +"に設定するようになりました。これにより、メディアセッションマネージャー " +"(wireplumber) がストリームを新しいデバイスに適切に移動できます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"新しい設定オプションが追加されました。これは、EasyEffects がシンクデバイスを" +"モニタすることを目的としたストリームを無視することを可能にします。OBS を使用" +"する際にユーザが抱えていた問題のいくつかを解決するのに役立ちます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "ストリームのサンプル形式を表示するコードが改善されました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"rnnoise ライブラリがオプションになりました。これはパッケージメンテナが " +"Debian パッケージをビルドするのに役立ちます。詳細は issue 1000を参照してくだ" +"さい。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"ログにメッセージが出力されるソースコードの行が表示されるようになりました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"pavucontrol のようなサードパーティプログラムがストリームを仮想デバイスから遠" +"ざけると、ウィンドウの「エフェクトを有効にする」チェックボックスが更新されな" +"い問題がありました。これは現在修正されているはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"オートゲインの最大履歴を変更すると、クラッシュすることがある問題を修正しまし" +"た。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "pw-mididump 実行時のクラッシュを回避" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "ピッチプラグインのインターフェースが改善されました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "アプリケーションアイコンが QT を使用するデスクトップに対応しました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"ブロックリストのコードは、ストリームが application.id タグを設定した場合、そ" +"れを使用します" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"マウススクロールの問題を避けるために、プレーヤー/レコーダータブに表示されるア" +"プリケーションリストのエントリーは音量スケールを表示しないようになりました。" +"この問題の詳細と解決策は、issue 1211 と issue 1427 を参照してください" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"プレーヤー/レコーダーに表示できるアプリケーションがない場合、メッセージが表示" +"されます" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "多くの翻訳の更新" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"パイプラインがアクティブで、スペクトルウィジェットが表示されているときに、ス" +"ペクトルの表示ポイント数を変更すると EasyEffeects がクラッシュする不具合を修" +"正しました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"ウィンドウに表示されるパイプラインの待機時間の値は、状況によっては間違ってい" +"る可能性があります。この問題は修正されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" +"パイプラインの非アクティブ時のタイムアウトを選択できる新しい設定が追加されま" +"した。クライアントがデバイスで再生または録音していない場合、タイムアウトに達" +"するとフィルターのリンクが解除されます。これは、CPU パワーを無駄なく利用する" +"ために行われます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"オートゲインプラグインでは、幾何平均を計算するために3つのラウドネスのうちどれ" +"を使用するか選択できるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"オートゲインプラグインで最大履歴を設定できるようになり、libebur128 ヒストグラ" +"ムモードは使われなくなりました。これにより、統合されたラウドネスが常に同じ値" +"で止まってしまうことを避けることができます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"EasyEffects のアイコンは、QT デスクトップで見えるように更新されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"グローバルバイパスの状態を返すコマンドラインオプションが再び動作するようにな" +"りました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"クロスフィードフィルターは、PipeWire の動的遅延スイッチにうまく対応するように" +"なりました。これで、音量レベルのジャンプが起こらなくなるはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "モノラルマイクが EasyEffects で正しく動作しない不具合を修正しました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "PipeWire の次期リリース 0.3.44 のサポート" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"オートゲインフィルターは、PipeWire の動的遅延スイッチにうまく対応するようにな" +"りました。これで、音量レベルのジャンプが起こらなくなるはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"EasyEffects の起動時に、バーチャルデバイスのボリュームとミュートの状態をリ" +"セットできるオプションを追加しました。これは、謎の理由でオーディオサーバーに" +"よってデバイスがミュートされている場合に役立ちます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "コンピュータのサスペンドのサポートが強化されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"プリセットを持たない自動読み込みプロファイルを作成しようとすると、アプリケー" +"ションがクラッシュする不具合を修正しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"イコライザーのバンド品質を 0 に設定するとアプリケーションがクラッシュする不具" +"合を修正しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita は、ウィンドウの一部を作成したり、ダークテーマとライトテーマを切り" +"替えるために使用されます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "設定メニューは、LibAdwaita ウィジェットを使用して再設計されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"イコライザー APO のプリセットインポート機能を改良し、ベルフィルターだけでな" +"く、他の対応するフィルターも適用できるようになりました(現時点ではLSPプラグイ" +"ンではバンドパスフィルターのみ利用できません)。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"メニューの「すべての設定をリセット」が Flatpak でも動作するようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"メニューを自動的に非表示にすることができる新しいオプションが追加されました。" +"これにより、現在 gtk4 で抱えているポップオーバーメニュー関連の不具合を回避で" +"きる可能性があります。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"中央の周波数帯でカンマを千の区切りとして保存された APO プリセットを読み込むた" +"めの解析がより強力になりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"fmt ライブラリは、少なくとも c++ コンパイラがその機能を実装していない間は新し" +"い依存関係にあります。これは今後数年のうちに実現すると思われます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM と GLIBMM はもう依存関係にありません。現在は gtk4 を直接使用していま" +"す。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"コンボルバーインターフェースでインパルスレスポンスを組み合わせることができる" +"ようになりました。新しいインパルスファイルが生成され、インパルスリストに表示" +"されます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"プロットのX軸描画が改善されました。これにより、ウィンドウの幅に応じてラベルの" +"数が動的に調整されるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"ドキュメントが EasyEffects の新機能を反映して更新されました。PulseEffects に" +"関する古い文献は削除されました。メニューセクションにドキュメントボタンが追加" +"されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"スピンボタンに範囲外の値が入力されたときに、前の値にリセットされるのではな" +"く、最低/最高の値に更新されるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"アプリケーションウィンドウは最大化された状態を記憶し、次回の起動時に反映しま" +"す。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "tbb ライブラリは新しい依存関係です" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"リミッターとマルチバンドコンプレッサーのプラグインで、オプションの外部サイド" +"チェーンを使用できるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"オートゲインプラグインで、音量補正の基準となるラウドネスを選択できるようにな" +"りました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" +"イコライザープラグインの APO プロファイルインポート機能で、\"Pre " +"Amplification\" パラメータを解析するようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" +"オプションのキュービックボリュームは一般設定で有効にすることができます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" +"スペクトラムプラグインは、表示されていないときはいつでもパススルーになるはず" +"ですが、ウィンドウが閉じられたときだけ発生していました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "支援技術のサポートが改善されました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" +"パイプラインのプラグインの順番を変更した後、コンプレッサーやリミッターなどの" +"いくつかのフィルターで使用されているプローブが再リンクされないという問題があ" +"りました。現在は動作しているはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" +"PipeWire のモニターストリームがアプリケーションリストから除外され、削除される" +"ようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "issue 1172 で報告されたクラッシュが修正されることを期待します。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "スペクトラムがクラッシュするのを防ぎました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"英語以外の言語を使用しているシステムでは、Pavucontrol は入力アプリケーション" +"リストに追加されません。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"WirePlumber との互換性を改善しました。これは、内蔵の PipeWire セッションマ" +"ネージャの代わりにこれを使うシステムで動作させるために必要です。詳細は issue " +"1144 を参照してください。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"すでにリストにあるデバイスに自動読み込みプロファイルを追加しようとすると、そ" +"のターゲットプリセットが更新されます。これにより、プロファイルを削除して再度" +"作成せずにプロファイルのプリセットを変更することができます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"プリセットの自動読み込みサポートの実装を再設計しました。これにより、多くの" +"ハードウェアで動作するようになりました。詳しくは issue 1051 を参照してくださ" +"い。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"プラグインスタックの最後にリミッターやマキシマイザーが設定されている場合、高" +"い出力レベルでハードウェアが損傷するのを防ぐために、新しいプラグインは最後か" +"ら2番目の位置に追加されます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "ブロックリストからアプリケーションを削除すると、有効な状態に戻ります。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"ノイズ除去プラグインからインポートしたモデルを削除すると、現在使用しているモ" +"デルが正しく更新されないことがありました。これは現在修正されているはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" +"外部エディタでプリセットファイルを編集すると、重複したエントリーがプリセット" +"メニューに表示されなくなります。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" +"プリセットを切り替えたときに、ブロックリストが正しく設定されるようになりまし" +"た。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" +"プラグインのスタックを変更したときに、グローバルバイパスボタンの状態が正しく" +"更新されるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" +"システム上に存在しないアイコンは、アプリケーション情報 UI に表示されないよう" +"にする(正しくインストールされているにもかかわらず、アプリケーションのアイコン" +"が表示されない場合は、問題をご報告ください)。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"Breeze アイコンテーマを使用した Plasma DE で表示されなかった一部のアイコンが" +"表示されるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "中国語の翻訳を更新しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "イタリア語の翻訳を更新しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "コンプレッサーのパラメーター Boost Amount に対応しました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"マルチバンドコンプレッサープラグインは、Calf Studio のものから Linux Studio " +"Plugins のステレオマルチバンドコンプレッサープラグインを使用するようになりま" +"した。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"リミッタープラグインは、Calf Studio のものから Linux Studio Plugins のステレ" +"オリミッタープラグインを使用するようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"LV2 フィルターは、最初に読み込まれたときのみ PipeWire グラフに生成されるよう" +"になりました。一度読み込まれると、EasyEffects がシャットダウンするまで接続さ" +"れたままになります。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" +"エコーキャンセラーのサンプリングレートが正しく設定されるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" +"ディエッサープラグインのしきい値パラメーターがプリセットファイルに保存される" +"ようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" +"クリスタライザーのバンドスプリットを改善し、新しいデフォルトの強度値を追加し" +"ました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" +"入力ゲインや出力ゲインの値によっては、対応するレベルバーが揃わないことがあり" +"ました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "イコライザーバンドを追加すると、オフではなくベルに設定されます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" +"イコライザー APO のプリセットの読み込みが、C 以外のロケールで正しく動作するよ" +"うになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "PipeWire のポートフィルターノード間のリンク管理を改善しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" +"以前は、クリスタライザープラグインの信号増幅が高すぎました。今は、より合理的" +"なレベルになっているはずです。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" +"リサンプラーを必要とするプラグイン (rnnoise プラグインなど) で使用されるリザ" +"ンプラーの改善" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "複数の自動読み込みプリセットを設定しても正常に動作するようになりました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" +"一部のプラグインのダイアログで、一時的なウィンドウが適切に設定されるようにな" +"りました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"コンボルバーのインパルス応答メニューで、インパルスファイルが1つしかない場合に" +"読み込まれないという問題を改善しました。issue 1011を参照してください" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "ピッチプラグインが正しく初期化されない不具合を修正しました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" +"サチュレーション警告は、もう隣のウィジェットの位置を変えることはありません" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "いくつかのウィジェットのロケールを修正" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "いくつかのウィジェットで誤った配置になっていたのを修正" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" +"ラウドネスプラグインは、issue 820 で説明されている理由により、再び使用されて" +"います。つまり、再びオプションの依存関係になりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" +"オプションの依存パッケージがインストールされていない場合に発生するセグメン" +"テーションフォールトを修正しました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "イコライザーのインターフェースを改善しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" +"現在は、サイドチェーン入力として外部ソースを選択できるサイドチェーン LSP コン" +"プレッサーを使用しています。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "LSP コンプレッサーのブーストモードに対応しました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" +"イコライザーでスプリットチャンネルが有効になっている場合、インポートされた " +"APO プリセットは、ウィンドウに表示されているチャンネルのみに適用されます。こ" +"れにより、両方に同じ値を設定するのではなく、チャンネルごとに異なるプリセット" +"をインポートすることができます。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" +"プリセットの自動読み込みプロファイル作成時やプリセットの削除時に発生するセグ" +"メンテーションフォールトを修正" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" +"今回のリリースは、これまでのリリースの中でも最も大きなもののひとつです。変更" +"点が多すぎて、ここですべてを話すことはできません。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" +"以下は、最も重要なものだけです。ここに至るまでの道のりに興味がある方は、" +"issue 904 と issue 874 をご覧ください。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" +"アプリケーションとそのリポジトリの名称が PulseEffects から EasyEffects に変更" +"されました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 は gtkmm4 に置き換えられました" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Gstreamer は、ネイティブの PipeWire フィルターに置き換えられました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" +"多くの機能がゼロから再実装されました。プリセットの自動読み込みはその一例で" +"す。また、プラグイン選択メニューも大きく変化しました。ユーザーは、使用したい" +"プラグインだけをウィンドウに表示できるようになりました。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" +"Boost は依存関係でなくなりました。そのため、プリセットの構造に少し変更があり" +"ました。根気があれば、PulseEffects のプリセットをテキストエディタで編集して、" +"EasyEffects で動作させることができます。誰かがこの機能のためのスクリプトを開" +"発してくれることを期待しています。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"新しいライブラリーが使われるようになり、以前はオプションであったライブラリー" +"の一部が必須になりました" + +#~ msgid "This release adds the following features:" +#~ msgstr "このリリースでは、以下の機能が追加されています:" + +#~ msgid "manager" +#~ msgstr "マネージャー" + +#~ msgid "" +#~ "devices. This will help to fix some of problems our users were having " +#~ "when using OBS." +#~ msgstr "" +#~ "これにより、OBS を使用する際にユーザーが抱えていた問題のいくつかを解決する" +#~ "ことができます。" + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "詳しくは issue #1000 を参照してください。" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "このリリースでは、以下のバグが修正されています:" + +#~ msgid "" +#~ "moved the stream away from our virtual devices. This should be fixed now." +#~ msgstr "" +#~ "そのストリームを仮想デバイスから遠ざけました。これは今すぐ修正する必要があ" +#~ "ります。" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "タブにボリュームスケールが表示されなくなりました。この問題の詳細と解決策に" +#~ "ついては、#1211 を参照してください" + +#~ msgid "and #1427" +#~ msgstr "and #1427" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "" +#~ "パイプラインがアクティブで、かつスペクトラムウィジェットが表示されている間" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "パイプラインの非アクティブ時のタイムアウトを選択できる設定が追加されまし" +#~ "た。クライアントが再生していないとき" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "の接続や録画は、タイムアウトに達するとフィルタリングが解除されます。これは" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "CPUのパワーを無駄にせず、無音で処理することができます。" + +#~ msgid "mean." +#~ msgstr "。" + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "これにより、Integrated ラウドネスが永遠に同じ値で止まってしまうようなケー" +#~ "スを避けることができます。" + +#~ msgid "This release fixes the following bug:" +#~ msgstr "このリリースでは、以下のバグが修正されています:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "このリリースでは、以下の機能が追加されています:" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "内蔵の PipeWire セッションマネージャーです。詳細は issue [1144]( で確認で" +#~ "きます" + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "システム上のアイコンが見つからない場合は、アプリケーション情報インター" +#~ "フェース内に表示されません" + +#~ msgid "a look at and" +#~ msgstr "を見て、" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "イコライザー、コンプレッサーなどのオーディオエフェクト" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "リミッター;コンプレッサー;リバーブ;イコライザー;オートボリューム;" + +#~ msgid "\"Presets\"" +#~ msgstr "「プリセット」" + +#~ msgid "Enable/disable this application" +#~ msgstr "このアプリケーションの有効化/無効化" + +#~ msgid "Enable" +#~ msgstr "有効" + +#~ msgid "Excluded App List: Add/remove this application" +#~ msgstr "除外されたアプリリスト: このアプリケーションを追加/削除" + +#~ msgid "Exclude" +#~ msgstr "除外" + +#~ msgid "Mute Application" +#~ msgstr "アプリケーションをミュート" + +#~ msgid "Change the volume of this application" +#~ msgstr "このアプリケーションの音量を変更" + +#~ msgid "Application Volume" +#~ msgstr "アプリケーションの音量" + +#~ msgid "_Preferences" +#~ msgstr "_環境設定" + +#~ msgid "_Manual" +#~ msgstr "_マニュアル" + +#~ msgid "_Shortcuts" +#~ msgstr "_ショートカット" + +#~ msgid "_Reset Settings" +#~ msgstr "_設定をリセット" + +#~ msgid "_About EasyEffects" +#~ msgstr "_EasyEffects について" + +#~ msgid "Presets" +#~ msgstr "プリセット" + +#~ msgid "Presets Menu" +#~ msgstr "プリセットメニュー" + +#~ msgid "Enable/disable the global bypass" +#~ msgstr "グローバルバイパスの有効化/無効化" + +#~ msgid "Global Bypass" +#~ msgstr "グローバルバイパス" + +#~ msgid "Primary Menu" +#~ msgstr "メインメニュー" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects ウィンドウ" + +#~ msgid "Applications List" +#~ msgstr "アプリケーションリスト" + +#~ msgid "Empty List" +#~ msgstr "空のリスト" + +#~ msgid "No Audio Application Available" +#~ msgstr "オーディオアプリケーションがありません" + +#~ msgid "Target" +#~ msgstr "ターゲット" + +#~ msgid "Maximum History" +#~ msgstr "最大履歴" + +#~ msgid "Reference" +#~ msgstr "リファレンス" + +#~ msgid "Momentary" +#~ msgstr "瞬間的" + +#~ msgid "Short-Term" +#~ msgstr "短期" + +#~ msgid "Integrated" +#~ msgstr "統合" + +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "幾何平均 (MSI)" + +#~ msgid "Geometric Mean (MS)" +#~ msgstr "幾何平均 (MS)" + +#~ msgid "Geometric Mean (MI)" +#~ msgstr "幾何平均 (MI)" + +#~ msgid "Geometric Mean (SI)" +#~ msgstr "幾何平均 (SI)" + +#~ msgid "Reset History" +#~ msgstr "履歴をリセット" + +#~ msgid "Relative" +#~ msgstr "相対的" + +#~ msgid "Range" +#~ msgstr "範囲" + +#~ msgid "Loudness" +#~ msgstr "ラウドネス" + +#~ msgid "Output Gain" +#~ msgstr "出力ゲイン" + +#~ msgid "Input" +#~ msgstr "入力" + +#~ msgid "Plugin Input Gain" +#~ msgstr "プラグイン入力ゲイン" + +#~ msgid "Output" +#~ msgstr "出力" + +#~ msgid "Plugin Output Gain" +#~ msgstr "プラグイン出力ゲイン" + +#~ msgid "Reset" +#~ msgstr "リセット" + +#~ msgid "Using" +#~ msgstr "使用中" + +#~ msgid "Device" +#~ msgstr "デバイス" + +#~ msgid "Name" +#~ msgstr "名前" + +#~ msgid "Profile" +#~ msgstr "プロファイル" + +#~ msgid "Preset" +#~ msgstr "プリセット" + +#~ msgid "Remove this autoload preset" +#~ msgstr "この自動読み込みプリセットを削除" + +#~ msgid "Listen" +#~ msgstr "聞く" + +#~ msgid "Blend Harmonics" +#~ msgstr "ブレンドハーモニクス" + +#~ msgid "3rd" +#~ msgstr "3rd" + +#~ msgid "2nd" +#~ msgstr "2nd" + +#~ msgid "Amount" +#~ msgstr "量" + +#~ msgid "Harmonics" +#~ msgstr "ハーモニクス" + +#~ msgid "Scope" +#~ msgstr "範囲" + +#~ msgid "Floor" +#~ msgstr "フロア" + +#~ msgid "Floor Value" +#~ msgstr "フロア値" + +#~ msgid "Link" +#~ msgstr "リンク" + +#~ msgid "Application Name" +#~ msgstr "アプリケーション名" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "除外アプリケーションに追加" + +#~ msgid "Excluded Applications List" +#~ msgstr "除外されたアプリケーションリスト" + +#~ msgid "Show Excluded Applications" +#~ msgstr "除外されたアプリケーションを表示" + +#~ msgid "Compressor" +#~ msgstr "コンプレッサー" + +#~ msgid "Mode" +#~ msgstr "モード" + +#~ msgid "Downward" +#~ msgstr "下方向" + +#~ msgid "Upward" +#~ msgstr "上方向" + +#~ msgid "Boosting" +#~ msgstr "ブースト" + +#~ msgid "Compression Mode" +#~ msgstr "圧縮モード" + +#~ msgid "Boost Threshold" +#~ msgstr "ブーストしきい値" + +#~ msgid "Boost Amount" +#~ msgstr "ブースト量" + +#~ msgid "Attack" +#~ msgstr "アタック" + +#~ msgid "Time" +#~ msgstr "時間" + +#~ msgid "Threshold" +#~ msgstr "しきい値" + +#~ msgid "Attack Time" +#~ msgstr "アタックタイム" + +#~ msgid "Attack Threshold" +#~ msgstr "アタックしきい値" + +#~ msgid "Release" +#~ msgstr "リリース" + +#~ msgid "Release Time" +#~ msgstr "リリース時間" + +#~ msgid "Release Threshold" +#~ msgstr "リリースしきい値" + +#~ msgid "Ratio" +#~ msgstr "比率" + +#~ msgid "Knee" +#~ msgstr "ニー" + +#~ msgid "Makeup" +#~ msgstr "メイクアップ" + +#~ msgid "Sidechain" +#~ msgstr "サイドチェーン" + +#~ msgid "Peak" +#~ msgstr "ピーク" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "ローパス" + +#~ msgid "Uniform" +#~ msgstr "ユニフォーム" + +#~ msgid "Sidechain Mode" +#~ msgstr "サイドチェーンモード" + +#~ msgid "Source" +#~ msgstr "ソース" + +#~ msgid "Middle" +#~ msgstr "中央" + +#~ msgid "Side" +#~ msgstr "サイド" + +#~ msgid "Left" +#~ msgstr "左" + +#~ msgid "Right" +#~ msgstr "右" + +#~ msgid "Sidechain Source" +#~ msgstr "サイドチェーンソース" + +#~ msgid "Type" +#~ msgstr "タイプ" + +#~ msgid "Feed-forward" +#~ msgstr "フィードフォワード" + +#~ msgid "Feed-back" +#~ msgstr "フィードバック" + +#~ msgid "External" +#~ msgstr "外部" + +#~ msgid "Sidechain Type" +#~ msgstr "サイドチェーンタイプ" + +#~ msgid "Input Device" +#~ msgstr "入力デバイス" + +#~ msgid "PreAmplification" +#~ msgstr "プリアンプリーション" + +#~ msgid "Reactivity" +#~ msgstr "反応性" + +#~ msgid "Lookahead" +#~ msgstr "ルックアヘッド" + +#~ msgid "Sidechain Filters" +#~ msgstr "サイドチェーンフィルター" + +#~ msgid "High-Pass" +#~ msgstr "ハイパス" + +#~ msgid "Frequency" +#~ msgstr "周波数" + +#~ msgid "Off" +#~ msgstr "オフ" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "ハイパスフィルターモード" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "ハイパスフィルター周波数" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "ローパスフィルターモード" + +#~ msgid "Gain" +#~ msgstr "ゲイン" + +#~ msgid "Envelope" +#~ msgstr "包装" + +#~ msgid "Curve" +#~ msgstr "カーブ" + +#~ msgid "L" +#~ msgstr "L" + +#~ msgid "Left Channel" +#~ msgstr "左チャンネル" + +#~ msgid "R" +#~ msgstr "R" + +#~ msgid "Right Channel" +#~ msgstr "右チャンネル" + +#~ msgid "Impulses" +#~ msgstr "インパルス" + +#~ msgid "Combine" +#~ msgstr "コンバイン" + +#~ msgid "Stereo Width" +#~ msgstr "ステレオ幅" + +#~ msgid "Spectrum" +#~ msgstr "スペクトラム" + +#~ msgid "Log Scale" +#~ msgstr "ログスケール" + +#~ msgid "Autogain" +#~ msgstr "オートゲイン" + +#~ msgid "Rate" +#~ msgstr "レート" + +#~ msgid "Samples" +#~ msgstr "サンプル" + +#~ msgid "Duration" +#~ msgstr "長さ" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "インパルス応答をコンバイン" + +#~ msgid "First Kernel" +#~ msgstr "ファーストカーネル" + +#~ msgid "Second Kernel" +#~ msgstr "セカンドカーネル" + +#~ msgid "Output File Name" +#~ msgstr "出力ファイル名" + +#~ msgid "Combined Kernel Name" +#~ msgstr "複合カーネル名" + +#~ msgid "Import Impulse" +#~ msgstr "インパルスをインポート" + +#~ msgid "Search" +#~ msgstr "検索" + +#~ msgid "Search Impulse File" +#~ msgstr "インパルスファイルを検索" + +#~ msgid "Impulse Files List" +#~ msgstr "インパルスファイル一覧" + +#~ msgid "Default" +#~ msgstr "デフォルト" + +#~ msgid "Cutoff" +#~ msgstr "カットオフ" + +#~ msgid "Feed" +#~ msgstr "フィード" + +#~ msgid "Bypass" +#~ msgstr "バイパス" + +#~ msgid "Mute" +#~ msgstr "ミュート" + +#~ msgid "Detection" +#~ msgstr "検出" + +#~ msgid "Wide" +#~ msgstr "ワイド" + +#~ msgid "Split" +#~ msgstr "スプリット" + +#~ msgid "F1 Split" +#~ msgstr "F1 スプリット" + +#~ msgid "Frequency 1 Split" +#~ msgstr "周波数 1 スプリット" + +#~ msgid "F2 Peak" +#~ msgstr "F2 ピーク" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "周波数 2 ピーク" + +#~ msgid "F1 Gain" +#~ msgstr "F1 ゲイン" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "周波数 1 ゲイン" + +#~ msgid "F2 Level" +#~ msgstr "F2 レベル" + +#~ msgid "Frequency 2 Level" +#~ msgstr "周波数 2 レベル" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2 ピーク Q" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "周波数 2 ピーク Q" + +#~ msgid "Laxity" +#~ msgstr "ゆるみ" + +#~ msgid "Detected" +#~ msgstr "検出" + +#~ msgid "Reduction" +#~ msgstr "減少" + +#~ msgid "Frame Size" +#~ msgstr "フレームサイズ" + +#~ msgid "Filter Length" +#~ msgstr "フィルター長" + +#~ msgid "Excluded Apps" +#~ msgstr "除外されたアプリ" + +#~ msgid "Bands" +#~ msgstr "バンド" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "チャンネルの分割" + +#~ msgid "Flat Response" +#~ msgstr "フラットレスポンス" + +#~ msgid "Calculate Frequencies" +#~ msgstr "周波数の計算" + +#~ msgid "Load APO Preset" +#~ msgstr "APO プリセットを読み込む" + +#~ msgid "Bell" +#~ msgstr "ベル" + +#~ msgid "High Pass" +#~ msgstr "ハイパス" + +#~ msgid "High Shelf" +#~ msgstr "ハイシェルフ" + +#~ msgid "Low Pass" +#~ msgstr "ローパス" + +#~ msgid "Low Shelf" +#~ msgstr "ローシェルフ" + +#~ msgid "Notch" +#~ msgstr "ノッチ" + +#~ msgid "Resonance" +#~ msgstr "反響" + +#~ msgid "All Pass" +#~ msgstr "オールパス" + +#~ msgid "Band Type" +#~ msgstr "バンドタイプ" + +#~ msgid "Band Mode" +#~ msgstr "バンドモード" + +#~ msgid "Slope" +#~ msgstr "スロープ" + +#~ msgid "Band Slope" +#~ msgstr "バンドスロープ" + +#~ msgid "Width" +#~ msgstr "幅" + +#~ msgid "Quality" +#~ msgstr "品質" + +#~ msgid "Solo" +#~ msgstr "ソロ" + +#~ msgid "Ceil" +#~ msgstr "切り上げ" + +#~ msgid "Ceil Value" +#~ msgstr "切り上げ値" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "アクセス" + +#~ msgid "Description" +#~ msgstr "説明" + +#~ msgid "Remove this model file" +#~ msgstr "このモデルファイルを削除" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct ローパス" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct ローパス" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct ローパス" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct ハイパス" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct ハイパス" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct ハイパス" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct バンドパス" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct バンドパス" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct バンドパス" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct バンドリジェクト" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct バンドリジェクト" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct バンドリジェクト" + +#~ msgid "Inertia" +#~ msgstr "慣性" + +#~ msgid "Gate" +#~ msgstr "ゲート" + +#~ msgid "Zone" +#~ msgstr "ゾーン" + +#~ msgid "Hysteresis" +#~ msgstr "ヒステリシス" + +#~ msgid "Attack Zone Start" +#~ msgstr "アタックゾーンスタート" + +#~ msgid "Release Zone Start" +#~ msgstr "リリースゾーン開始" + +#~ msgid "Internal" +#~ msgstr "内部" + +#~ msgid "Gating" +#~ msgstr "ゲーティング" + +#~ msgid "Oversampling" +#~ msgstr "オーバーサンプリング" + +#~ msgid "Dither" +#~ msgstr "ディザ" + +#~ msgid "Herm Thin" +#~ msgstr "Herm Thin" + +#~ msgid "Herm Wide" +#~ msgstr "Herm Wide" + +#~ msgid "Herm Tail" +#~ msgstr "Herm Tail" + +#~ msgid "Herm Duck" +#~ msgstr "Herm Duck" + +#~ msgid "Exp Thin" +#~ msgstr "Exp Thin" + +#~ msgid "Exp Wide" +#~ msgstr "Exp Wide" + +#~ msgid "Exp Tail" +#~ msgstr "Exp Tail" + +#~ msgid "Exp Duck" +#~ msgstr "Exp Duck" + +#~ msgid "Line Thin" +#~ msgstr "Line Thin" + +#~ msgid "Line Wide" +#~ msgstr "Line Wide" + +#~ msgid "Line Tail" +#~ msgstr "Line Tail" + +#~ msgid "Line Duck" +#~ msgstr "Line Duck" + +#~ msgid "None" +#~ msgstr "なし" + +#~ msgid "Half x2(2L)" +#~ msgstr "ハーフ ×2(2L)" + +#~ msgid "Half x2(3L)" +#~ msgstr "ハーフ ×2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "ハーフ ×3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "ハーフ ×3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "ハーフ ×4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "ハーフ ×4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "ハーフ ×6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "ハーフ ×6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "ハーフ ×8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "ハーフ ×8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "フル x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "フル x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "フル ×3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "フル ×3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "フル ×4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "フル ×4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "フル ×6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "フル ×6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "フル ×8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "フル ×8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "SC プリアンプ" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "サイドチェーン PreAmplification" + +#~ msgid "Boost" +#~ msgstr "ブースト" + +#~ msgid "Stereo Link" +#~ msgstr "ステレオリンク" + +#~ msgid "External Sidechain" +#~ msgstr "外部サイドチェーン" + +#~ msgid "External Sidechain Source" +#~ msgstr "外部サイドチェーンソース" + +#~ msgid "Auto Leveling" +#~ msgstr "オートレベリング" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "オートレベリングアタック" + +#~ msgid "Auto Leveling Release" +#~ msgstr "オートレベリングリリース" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "オートレベリングニー" + +#~ msgid "Gain Left" +#~ msgstr "左ゲイン" + +#~ msgid "Gain Right" +#~ msgstr "右ゲイン" + +#~ msgid "Sidechain Left" +#~ msgstr "左サイドチェーン" + +#~ msgid "Sidechain Right" +#~ msgstr "右サイドチェーン" + +#~ msgid "Standard" +#~ msgstr "標準" + +#~ msgid "Flat" +#~ msgstr "フラット" + +#~ msgid "FFT Size" +#~ msgstr "FFT サイズ" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "高速フーリエ変換サイズ" + +#~ msgid "Output Volume" +#~ msgstr "出力ボリューム" + +#~ msgid "Ceiling" +#~ msgstr "シーリング" + +#~ msgid "Operating Mode" +#~ msgstr "動作モード" + +#~ msgid "Classic" +#~ msgstr "クラシック" + +#~ msgid "Modern" +#~ msgstr "モダン" + +#~ msgid "Sidechain Boost" +#~ msgstr "サイドチェーンブースト" + +#~ msgid "Pink BT" +#~ msgstr "ピンク BT" + +#~ msgid "Pink MT" +#~ msgstr "ピンク MT" + +#~ msgid "Brown BT" +#~ msgstr "ブラウン BT" + +#~ msgid "Brown MT" +#~ msgstr "ブラウン MT" + +#~ msgid "Bands List" +#~ msgstr "バンドリスト" + +#~ msgid "Band 1" +#~ msgstr "バンド 1" + +#~ msgid "Band 2" +#~ msgstr "バンド 2" + +#~ msgid "Band 3" +#~ msgstr "バンド 3" + +#~ msgid "Band 4" +#~ msgstr "バンド 4" + +#~ msgid "Band 5" +#~ msgstr "バンド 5" + +#~ msgid "Band 6" +#~ msgstr "バンド 6" + +#~ msgid "Band 7" +#~ msgstr "バンド 7" + +#~ msgid "Band 8" +#~ msgstr "バンド 8" + +#~ msgid "Band Start" +#~ msgstr "バンドスタート" + +#~ msgid "Band End" +#~ msgstr "バンドエンド" + +#~ msgid "Band Compression Mode" +#~ msgstr "バンド圧縮モード" + +#~ msgid "Band Bypass" +#~ msgstr "バンドバイパス" + +#~ msgid "Band Sidechain Options" +#~ msgstr "バンドサイドチェーンオプション" + +#~ msgid "Low-Cut Filter" +#~ msgstr "ローカットフィルター" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "ローカットフィルター周波数" + +#~ msgid "High-Cut Filter" +#~ msgstr "ハイカットフィルター" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "ハイカットフィルター周波数" + +#~ msgid "PreAmp" +#~ msgstr "プリアンプ" + +#~ msgid "Band Gain" +#~ msgstr "バンドゲイン" + +#~ msgid "Band Envelope" +#~ msgstr "バンドエンベロープ" + +#~ msgid "Band Curve" +#~ msgstr "バンドカーブ" + +#~ msgid "Split Mode" +#~ msgstr "スプリットモード" + +#~ msgid "Split 1/2" +#~ msgstr "スプリット 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "スプリット周波数 1" + +#~ msgid "Split 2/3" +#~ msgstr "スプリット 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "スプリット周波数 2" + +#~ msgid "Split 3/4" +#~ msgstr "スプリット 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "スプリット周波数 3" + +#~ msgid "Sub Band" +#~ msgstr "サブバンド" + +#~ msgid "Band 1 Bypass" +#~ msgstr "バンド 1 バイパス" + +#~ msgid "Band 1 Solo" +#~ msgstr "バンド 1 ソロ" + +#~ msgid "Band 1 Detection" +#~ msgstr "バンド 1 検出" + +#~ msgid "Band 1 Attack" +#~ msgstr "バンド 1 アタック" + +#~ msgid "Band 1 Release" +#~ msgstr "バンド 1 リリース" + +#~ msgid "Band 1 Threshold" +#~ msgstr "バンド 1 しきい値" + +#~ msgid "Band 1 Ratio" +#~ msgstr "バンド 1 比率" + +#~ msgid "Band 1 Knee" +#~ msgstr "バンド 1 ニー" + +#~ msgid "Band 1 Makeup" +#~ msgstr "バンド 1 メイクアップ" + +#~ msgid "Max Reduction" +#~ msgstr "最大リダクション" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "バンド 1 最大リダクション" + +#~ msgid "Low Band" +#~ msgstr "ローバンド" + +#~ msgid "Band 2 Bypass" +#~ msgstr "バンド 2 バイパス" + +#~ msgid "Band 2 Solo" +#~ msgstr "バンド 2 ソロ" + +#~ msgid "Band 2 Detection" +#~ msgstr "バンド 2 検出" + +#~ msgid "Band 2 Attack" +#~ msgstr "バンド 2 アタック" + +#~ msgid "Band 2 Release" +#~ msgstr "バンド 2 リリース" + +#~ msgid "Band 2 Threshold" +#~ msgstr "バンド 2 しきい値" + +#~ msgid "Band 2 Ratio" +#~ msgstr "バンド 2 比率" + +#~ msgid "Band 2 Knee" +#~ msgstr "バンド 2 ニー" + +#~ msgid "Band 2 Makeup" +#~ msgstr "バンド 2 メイクアップ" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "バンド 2 最大リダクション" + +#~ msgid "Mid Band" +#~ msgstr "ミッドバンド" + +#~ msgid "Band 3 Bypass" +#~ msgstr "バンド 3 バイパス" + +#~ msgid "Band 3 Solo" +#~ msgstr "バンド 3 ソロ" + +#~ msgid "Band 3 Detection" +#~ msgstr "バンド 3 検出" + +#~ msgid "Band 3 Attack" +#~ msgstr "バンド 3 アタック" + +#~ msgid "Band 3 Release" +#~ msgstr "バンド 3 リリース" + +#~ msgid "Band 3 Threshold" +#~ msgstr "バンド 3 しきい値" + +#~ msgid "Band 3 Ratio" +#~ msgstr "バンド 3 比率" + +#~ msgid "Band 3 Knee" +#~ msgstr "バンド 3 ニー" + +#~ msgid "Band 3 Makeup" +#~ msgstr "バンド 3 メイクアップ" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "バンド 3 最大リダクション" + +#~ msgid "High Band" +#~ msgstr "ハイバンド" + +#~ msgid "Band 4 Bypass" +#~ msgstr "バンド 4 バイパス" + +#~ msgid "Band 4 Solo" +#~ msgstr "バンド 4 ソロ" + +#~ msgid "Band 4 Detection" +#~ msgstr "バンド 4 検出" + +#~ msgid "Band 4 Attack" +#~ msgstr "バンド 4 アタック" + +#~ msgid "Band 4 Release" +#~ msgstr "バンド 4 リリース" + +#~ msgid "Band 4 Threshold" +#~ msgstr "バンド 4 しきい値" + +#~ msgid "Band 4 Ratio" +#~ msgstr "バンド 4 比率" + +#~ msgid "Band 4 Knee" +#~ msgstr "バンド 4 ニー" + +#~ msgid "Band 4 Makeup" +#~ msgstr "バンド 4 メイクアップ" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "バンド 4 最大リダクション" + +#~ msgid "General" +#~ msgstr "一般" + +#~ msgid "Device Management" +#~ msgstr "デバイス管理" + +#~ msgid "" +#~ "It's recommended to NOT set EasyEffects Sink/Source as Default Device in " +#~ "external applications (e.g. Gnome Settings and Plasma System Settings)." +#~ msgstr "" +#~ "外部アプリケーション (Gnome 設定や Plasma システム設定など) で " +#~ "EasyEffects の Sink/Source をデフォルトデバイスとして設定しないことをお勧" +#~ "めします。" + +#~ msgid "Use Default Input" +#~ msgstr "デフォルトの入力を使用" + +#~ msgid "Custom Input Device" +#~ msgstr "カスタム入力デバイス" + +#~ msgid "Use Default Output" +#~ msgstr "デフォルトの出力を使用" + +#~ msgid "Custom Output Device" +#~ msgstr "カスタム出力デバイス" + +#~ msgid "Server Information" +#~ msgstr "サーバー情報" + +#~ msgid "Header Version" +#~ msgstr "ヘッダーバージョン" + +#~ msgid "Library Version" +#~ msgstr "ライブラリバージョン" + +#~ msgid "Sampling Rate" +#~ msgstr "サンプリングレート" + +#~ msgid "Minimum Quantum" +#~ msgstr "最小クォンタム" + +#~ msgid "Maximum Quantum" +#~ msgstr "最大クォンタム" + +#~ msgid "Default Quantum" +#~ msgstr "デフォルトクォンタム" + +#~ msgid "Output Devices" +#~ msgstr "出力デバイス" + +#~ msgid "Output Presets" +#~ msgstr "出力プリセット" + +#~ msgid "Create Association" +#~ msgstr "アソシエーションを作成" + +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "自動読み込み出力プリセットを追加" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "自動読み込み出力プリセットリスト" + +#~ msgid "Input Devices" +#~ msgstr "入力デバイス" + +#~ msgid "Input Presets" +#~ msgstr "入力プリセット" + +#~ msgid "Add Autoloading Input Preset" +#~ msgstr "自動読み込み入力プリセットを追加" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "自動読み込み入力プリセットリスト" + +#~ msgid "Modules" +#~ msgstr "モジュール" + +#~ msgid "Modules List" +#~ msgstr "モジュールリスト" + +#~ msgid "Clients" +#~ msgstr "クライアント" + +#~ msgid "Clients List" +#~ msgstr "クライアントリスト" + +#~ msgid "Test Signal" +#~ msgstr "テスト信号" + +#~ msgid "State" +#~ msgstr "状態" + +#~ msgid "Enabled" +#~ msgstr "有効" + +#~ msgid "Properties" +#~ msgstr "プロパティ" + +#~ msgid "Channels" +#~ msgstr "チャンネル" + +#~ msgid "Both" +#~ msgstr "両方" + +#~ msgid "Both Channels" +#~ msgstr "両方チャンネル" + +#~ msgid "Waveform" +#~ msgstr "波形" + +#~ msgid "Sine Wave" +#~ msgstr "正弦波" + +#~ msgid "White Noise" +#~ msgstr "ホワイトノイズ" + +#~ msgid "High Speed" +#~ msgstr "高速" + +#~ msgid "High Quality" +#~ msgstr "高品質" + +#~ msgid "High Consistency" +#~ msgstr "高い一貫性" + +#~ msgid "Formant" +#~ msgstr "フォルマント" + +#~ msgid "Shifted" +#~ msgstr "シフト" + +#~ msgid "Preserved" +#~ msgstr "保存済み" + +#~ msgid "Transients" +#~ msgstr "トランジェント" + +#~ msgid "Crisp" +#~ msgstr "鮮明" + +#~ msgid "Mixed" +#~ msgstr "ミックス" + +#~ msgid "Smooth" +#~ msgstr "スムース" + +#~ msgid "Detector" +#~ msgstr "ディテクター" + +#~ msgid "Compound" +#~ msgstr "化合物" + +#~ msgid "Percussive" +#~ msgstr "パーカッシブ" + +#~ msgid "Soft" +#~ msgstr "ソフト" + +#~ msgid "Phase" +#~ msgstr "フェーズ" + +#~ msgid "Laminar" +#~ msgstr "ラミナー" + +#~ msgid "Independent" +#~ msgstr "独立" + +#~ msgid "Cents" +#~ msgstr "セント" + +#~ msgid "Semitones" +#~ msgstr "半音" + +#~ msgid "Octaves" +#~ msgstr "オクターブ" + +#~ msgid "Remove this effect" +#~ msgstr "このエフェクトを削除" + +#~ msgid "Enable/disable this effect" +#~ msgstr "このエフェクトの有効化/無効化" + +#~ msgid "Change the position of this effect" +#~ msgstr "このエフェクトの位置を変更する" + +#~ msgid "Add Effect" +#~ msgstr "エフェクトの追加" + +#~ msgid "Used Plugins List" +#~ msgstr "使用プラグインリスト" + +#~ msgid "No Effects" +#~ msgstr "エフェクトなし" + +#~ msgid "Audio Stream Not Modified" +#~ msgstr "オーディオストリームは変更されていません" + +#~ msgid "Search Plugin" +#~ msgstr "プラグインを検索" + +#~ msgid "Plugins List" +#~ msgstr "プラグインリスト" + +#~ msgid "_General" +#~ msgstr "_一般" + +#~ msgid "Service" +#~ msgstr "サービス" + +#~ msgid "Launch Service at System Startup" +#~ msgstr "システム起動時にサービスを起動" + +#~ msgid "Shutdown on Window Closing" +#~ msgstr "ウィンドウを閉じるときにシャットダウン" + +#~ msgid "Audio" +#~ msgstr "オーディオ" + +#~ msgid "Process All Output Streams" +#~ msgstr "すべての出力を処理" + +#~ msgid "Process All Input Streams" +#~ msgstr "すべての入力を処理" + +#~ msgid "Ignore Streams from Monitor of Devices" +#~ msgstr "デバイスのモニターからのストリームを無視" + +#~ msgid "Use Cubic Volume" +#~ msgstr "キュービックボリュームを使用" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "起動時に EasyEffects 仮想デバイスの音量をリセット" + +#~ msgid "Inactivity Timeout" +#~ msgstr "非アクティブタイムアウト" + +#~ msgid "Style" +#~ msgstr "スタイル" + +#~ msgid "Use Dark Theme" +#~ msgstr "ダークテーマを使用" + +#~ msgid "Hide Menus on Outside Clicks" +#~ msgstr "外側クリックでメニュー非表示" + +#~ msgid "_Spectrum" +#~ msgstr "_スペクトラム" + +#~ msgid "Shape" +#~ msgstr "形状" + +#~ msgid "Bars" +#~ msgstr "バー" + +#~ msgid "Lines" +#~ msgstr "線" + +#~ msgid "Dots" +#~ msgstr "ドット" + +#~ msgid "Points" +#~ msgstr "ポイント" + +#~ msgid "Height" +#~ msgstr "高さ" + +#~ msgid "Line Width" +#~ msgstr "線幅" + +#~ msgid "Fill" +#~ msgstr "塗りつぶし" + +#~ msgid "Show Bars Border" +#~ msgstr "バーの境界線を表示" + +#~ msgid "Rounded Corners" +#~ msgstr "角丸" + +#~ msgid "Color" +#~ msgstr "色" + +#~ msgid "Lines and Bars" +#~ msgstr "線とバー" + +#~ msgid "Axis Labels" +#~ msgstr "軸ラベル" + +#~ msgid "Frequency Range" +#~ msgstr "周波数範囲" + +#~ msgid "Minimum" +#~ msgstr "最小" + +#~ msgid "Maximum" +#~ msgstr "最大" + +#~ msgid "Load" +#~ msgstr "ロード" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "現在の設定をこのプリセットファイルに保存" + +#~ msgid "Remove this preset file" +#~ msgstr "このプリセットファイルを削除" + +#~ msgid "New Output Preset Name" +#~ msgstr "新規出力プリセット名" + +#~ msgid "Create a new preset" +#~ msgstr "プリセットを作成" + +#~ msgid "Import a preset" +#~ msgstr "プリセットをインポート" + +#~ msgid "Search Output Preset" +#~ msgstr "出力プリセットを検索" + +#~ msgid "Output Presets List" +#~ msgstr "出力プリセットリスト" + +#~ msgid "New Input Preset Name" +#~ msgstr "新規入力プリセット名" + +#~ msgid "Search Input Preset" +#~ msgstr "入力プリセットを検索" + +#~ msgid "Input Presets List" +#~ msgstr "入力プリセットリスト" + +#~ msgid "High Frequency Damping" +#~ msgstr "高周波ダンピング" + +#~ msgid "Room Size" +#~ msgstr "部屋のサイズ" + +#~ msgid "Small" +#~ msgstr "小" + +#~ msgid "Medium" +#~ msgstr "中" + +#~ msgid "Large" +#~ msgstr "大" + +#~ msgid "Tunnel" +#~ msgstr "トンネル" + +#~ msgid "Large/smooth" +#~ msgstr "大/なめらか" + +#~ msgid "Experimental" +#~ msgstr "実験的" + +#~ msgid "Diffusion" +#~ msgstr "拡散" + +#~ msgid "Pre Delay" +#~ msgstr "プリディレイ" + +#~ msgid "Decay Time" +#~ msgstr "減衰時間" + +#~ msgid "Wet Amount" +#~ msgstr "Wet 量" + +#~ msgid "Wet Level" +#~ msgstr "Wet レベル" + +#~ msgid "Dry Amount" +#~ msgstr "Dry 量" + +#~ msgid "Dry Level" +#~ msgstr "Dry レベル" + +#~ msgid "Bass Cut" +#~ msgstr "ベースカット" + +#~ msgid "Treble Cut" +#~ msgstr "高音カット" + +#~ msgid "Ambience" +#~ msgstr "環境" + +#~ msgid "Empty Walls" +#~ msgstr "何もない壁" + +#~ msgid "Room" +#~ msgstr "部屋" + +#~ msgid "Large Empty Hall" +#~ msgstr "何もない大きなホール" + +#~ msgid "Disco" +#~ msgstr "ディスコ" + +#~ msgid "Large Occupied Hall" +#~ msgstr "占有面積の大きいホール" + +#~ msgid "Import Model" +#~ msgstr "モデルのインポート" + +#~ msgid "Models" +#~ msgstr "モデル" + +#~ msgid "Standard Model" +#~ msgstr "標準モデル" + +#~ msgid "RNNoise Models List" +#~ msgstr "RNNoise モデルリスト" + +#~ msgid "Model Not Loaded" +#~ msgstr "モデルがロードされていません" + +#~ msgid "Active Model" +#~ msgstr "アクティブモデル" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "標準 RNNoise モデル" + +#~ msgid "Overview" +#~ msgstr "概要" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "EasyEffects のマニュアルを開く" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "フルスクリーン/フルスクリーンから復元" + +#~ msgid "Close the Window" +#~ msgstr "ウィンドウを閉じる" + +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects を終了" + +#~ msgid "Balance" +#~ msgstr "バランス" + +#~ msgid "Input Balance" +#~ msgstr "入力バランス" + +#~ msgid "Softclip" +#~ msgstr "ソフトクリップ" + +#~ msgid "Softclip Level" +#~ msgstr "ソフトクリップレベル" + +#~ msgid "Stereo Matrix" +#~ msgstr "ステレオマトリックス" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (ステレオデフォルト)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (ステレオからミッドサイド)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (ミッドサイドからステレオ)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (モノラル左チャンネル)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (モノラル右チャンネル)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (モノラル合計 L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (ステレオチャンネル反転)" + +#~ msgid "Stereo Mode" +#~ msgstr "ステレオモード" + +#~ msgid "Invert Phase" +#~ msgstr "位相反転" + +#~ msgid "Side Level" +#~ msgstr "サイドレベル" + +#~ msgid "Side Balance" +#~ msgstr "サイドバランス" + +#~ msgid "Middle Level" +#~ msgstr "中間レベル" + +#~ msgid "Middle Panorama" +#~ msgstr "中間パノラマ" + +#~ msgid "Output Balance" +#~ msgstr "出力バランス" + +#~ msgid "Delay L/R" +#~ msgstr "ディレイ L/R" + +#~ msgid "Delay Left Right" +#~ msgstr "ディレイ 左 右" + +#~ msgid "Stereo Base" +#~ msgstr "ステレオベース" + +#~ msgid "Stereo Phase" +#~ msgstr "ステレオ位相" + +#~ msgid "Running" +#~ msgstr "実行中" + +#~ msgid "Suspended" +#~ msgstr "サスペンド" + +#~ msgid "Idle" +#~ msgstr "アイドル" + +#~ msgid "Creating" +#~ msgstr "作成中" + +#~ msgid "Error" +#~ msgstr "エラー" + +#~ msgid "Unknown" +#~ msgstr "不明" + +#~ msgid "channels" +#~ msgstr "チャンネル" + +#~ msgid "Output Presets: " +#~ msgstr "出力プリセット: " + +#~ msgid "Input Presets: " +#~ msgstr "入力プリセット: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "PipeWire アプリケーション用オーディオエフェクト" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "EasyEffects を終了します。サービスモードで動作しているときに便利です。" + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "プリセットを読み込む。例: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "EasyEffects をリセット。" + +#~ msgid "Hide the Window." +#~ msgstr "ウィンドウを隠す。" + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "グローバルバイパス。1 で有効、2 で無効、3 でステータス取得" + +#~ msgid "Show available presets." +#~ msgstr "利用可能なプリセットを表示します。" + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#~ msgid "The File Is Not Regular" +#~ msgstr "このファイルは正しくありません" + +#~ msgid "The Impulse File May Be Corrupted or Unsupported" +#~ msgstr "" +#~ "インパルスファイルが破損しているか、サポートされていない可能性があります" + +#~ msgid "Only Stereo Impulse Files Are Supported" +#~ msgstr "ステレオインパルスファイルのみサポートされています" + +#~ msgid "Impulse File Not Imported" +#~ msgstr "インパルスファイルがインポートされていません" + +#~ msgid "Import Impulse File" +#~ msgstr "インパルスファイルをインポート" + +#~ msgid "Open" +#~ msgstr "開く" + +#~ msgid "Cancel" +#~ msgstr "キャンセル" + +#~ msgid "Impulse Response" +#~ msgstr "インパルスレスポンス" + +#~ msgid "Load Impulse" +#~ msgstr "インパルスを読み込み" + +#~ msgid "Remove Impulse" +#~ msgstr "インパルスを削除" + +#~ msgid "No Impulse File Loaded" +#~ msgstr "読み込まれたインパルスファイルはありません" + +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "インパルスファイルを読み込めません" + +#~ msgid "Recorders" +#~ msgstr "レコーダー" + +#~ msgid "Players" +#~ msgstr "プレイヤー" + +#~ msgid "Effects" +#~ msgstr "エフェクト" + +#~ msgid "infinity" +#~ msgstr "無限大" + +#~ msgid "Import APO Preset File" +#~ msgstr "APO プリセットファイルをインポート" + +#~ msgid "APO Presets" +#~ msgstr "APO プリセット" + +#~ msgid "" +#~ "APO Preset Not Loaded. File Format May Be Wrong. Please Check Its Content." +#~ msgstr "" +#~ "APO プリセットが読み込まれていません。ファイルフォーマットが間違っている可" +#~ "能性があります。内容を確認してください。" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "自動読み込みプリセットを削除" + +#~ msgid "Remove" +#~ msgstr "削除" + +#~ msgid "Output Device" +#~ msgstr "出力デバイス" + +#~ msgid "Add" +#~ msgstr "追加" + +#~ msgid "Import Preset" +#~ msgstr "プリセットをインポート" + +#~ msgid "" +#~ "Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To " +#~ "The Standard Model." +#~ msgstr "" +#~ "選択されたモデルが読み込まれていません。そのフォーマットはサポートされてい" +#~ "ない可能性があります。標準モデルに戻しました。" + +#~ msgid "Import Model File" +#~ msgstr "モデルファイルをインポート" + +#~ msgid "RNNoise Models" +#~ msgstr "RNNoise モデル" + +#~ msgid "Bass Enhancer" +#~ msgstr "ベースエンハンサー" + +#~ msgid "Bass Loudness" +#~ msgstr "低音ラウドネス" + +#~ msgid "Convolver" +#~ msgstr "コンボルバー" + +#~ msgid "Crossfeed" +#~ msgstr "クロスフィード" + +#~ msgid "Crystalizer" +#~ msgstr "クリスタライザー" + +#~ msgid "Deesser" +#~ msgstr "ディエッサー" + +#~ msgid "Delay" +#~ msgstr "ディレイ" + +#~ msgid "Echo Canceller" +#~ msgstr "エコーキャンセラー" + +#~ msgid "Equalizer" +#~ msgstr "イコライザー" + +#~ msgid "Exciter" +#~ msgstr "エキサイター" + +#~ msgid "Filter" +#~ msgstr "フィルター" + +#~ msgid "Limiter" +#~ msgstr "リミッター" + +#~ msgid "Maximizer" +#~ msgstr "マキシマイザー" + +#~ msgid "Multiband Compressor" +#~ msgstr "マルチバンドコンプレッサー" + +#~ msgid "Multiband Gate" +#~ msgstr "マルチバンドゲート" + +#~ msgid "Pitch" +#~ msgstr "ピッチ" + +#~ msgid "Reverberation" +#~ msgstr "リバーブ" + +#~ msgid "Noise Reduction" +#~ msgstr "ノイズリダクション" + +#~ msgid "Stereo Tools" +#~ msgstr "ステレオツール" + +#~ msgid "Close (Press ESC)" +#~ msgstr "閉じる (Esc キーを押す)" + +#~ msgid "Average" +#~ msgstr "平均" + +#~ msgid "Failed" +#~ msgstr "失敗" + +#~ msgid "Use Default" +#~ msgstr "デフォルトを使用" + +#~ msgid "Remove this plugin" +#~ msgstr "このプラグインを削除" + +#~ msgid "Import Presets" +#~ msgstr "プリセットをインポート" + +#~ msgid "Start Service at Login" +#~ msgstr "ログイン時にサービスを開始" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "起動時にデバイスの音量をリセット" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "アクティブモデル" + +#~ msgid "Add to Blocklist" +#~ msgstr "ブロックリストに追加" + +#~ msgid "Blocklist" +#~ msgstr "ブロックリスト" + +#~ msgid "Add Plugin" +#~ msgstr "プラグインを追加" + +#~ msgid "Speakers" +#~ msgstr "スピーカー" + +#~ msgid "Microphone" +#~ msgstr "マイク" + +#~ msgid "Plugins" +#~ msgstr "プラグイン" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "有効" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "有効" + +#~ msgid "Format" +#~ msgstr "フォーマット" + +#~ msgid "Latency" +#~ msgstr "レイテンシー" + +#~ msgid "idle" +#~ msgstr "アイドル" + +#~ msgid "Faster" +#~ msgstr "より速く" + +#~ msgid "Preserve Formant" +#~ msgstr "フォルマントを保持" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" diff --git a/po/news/km.po b/po/news/km.po new file mode 100644 index 0000000..3aa7fe4 --- /dev/null +++ b/po/news/km.po @@ -0,0 +1,1084 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Khmer (Central) \n" +"Language: km\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/ko.po b/po/news/ko.po new file mode 100644 index 0000000..e985fd0 --- /dev/null +++ b/po/news/ko.po @@ -0,0 +1,2013 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Korean \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "PipeWire 응용프로그램을 위한 오디오 효과" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects는 고급 오디오 처리 도구 입니다. 이퀄라이저, 리미터, 컴프레서, 리" +"버브 툴 등이 포함되며, 이외에도 여러가지 플러그인이 있습니다. 예를 들자면 스" +"펙트럼 분석기도 내장되어 있습니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects는 PulseEffects의 후속 프로젝트 입니다. EasyEffects는 PipeWire 만" +"을 지원 합니다. PulseAudio를 사용하는 경우 PulseEffects를 사용하십시오." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"EasyEffects는 기본 PipeWire 사운드 서버를 사용하므로 대부분의 응용 프로그램에" +"서 작동합니다. 지원되는 모든 응용 프로그램은 메인 화면에 표시되며 각각 개별적" +"으로 활성화할 수 있습니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"EasyEffects는 음향 출력을 처리할 뿐만 아니라 마이크 등의 입력 장치에도 음향효" +"과를 걸 수 있습니다. 예를 들어 오디오 녹음 할 때 유용하며 음성 대화 시에도 효" +"과를 발휘합니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"EasyEffects를 시작하면 마지막 세션에서 사용된 설정이 적용됩니다. 현재 설정을 " +"모두 프로파일로 저장할 수도 있습니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "두 개의 오디오 출력 앱을 보여주는 기본 페이지" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "오디오 컨트롤을 보여주는 베이스 인핸서 페이지" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "오디오 컨트롤을 보여주는 convolver 페이지" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "기능:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "버그 수정:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "기타 참고사항:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "업데이트된 번역" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "향상된 번역" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"멀티밴드 게이트 구현이 CALF에서 Linux Studio 플러그인으로 마이그레이션되었습" +"니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "향상된 디버그 메시지" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "업데이트된 번역" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "향상된 번역" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "피치 플러그인의 인터페이스가 개선되었습니다" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "이제 응용프로그램 아이콘이 QT를 사용하는 데스크톱과 호환됩니다" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +#, fuzzy +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"스트림이 설정하는 경우 차단 목록 코드는 `application.id` 태그를 사용합니다" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +#, fuzzy +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"마우스 스크롤 문제를 피하기 위해 '재생기/녹음기' 탭에 표시된 응용프로그램 목" +"록의 항목에 더 이상 음량 크기조정이 표시되지 않습니다. 문제 및 해결 방법에 대" +"한 자세한 내용은 문제 1211 및 문제 1427에서 찾을 수 있습니다" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "많은 번역 업데이트" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"크로스 피드 필터는 PipeWire의 동적 레이턴시 스위치에 잘 대응합니다. 이제 볼" +"륨 레벨 점프가 발생하지 않습니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "모노 마이크가 EasyEffects에서 제대로 작동하지 않던 버그를 수정했습니다" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "PipeWire 다음 릴리스 `0.3.44`를 지원" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "중국어 번역이 업데이트되었습니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "이탈리아어 번역이 업데이트되었습니다." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects는 고급 오디오 처리 도구 입니다. 이퀄라이저, 리미터, 컴프레서, " +#~ "리버브 툴 등이 포함되며, 이외에도 여러가지 플러그인이 있습니다. 예를 들자" +#~ "면 스펙트럼 분석기도 내장되어 있습니다." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects는 PulseEffects의 후속 프로젝트 입니다. EasyEffects는 PipeWire " +#~ "만을 지원 합니다. PulseAudio를 사용하는 경우 PulseEffects를 사용하십시오." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "EasyEffects는 기본 PipeWire 사운드 서버를 사용하므로 대부분의 응용 프로그" +#~ "램에서 작동합니다. 지원되는 모든 응용 프로그램은 메인 화면에 표시되며 각" +#~ "각 개별적으로 활성화할 수 있습니다." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "EasyEffects는 음향 출력을 처리할 뿐만 아니라 마이크 등의 입력 장치에도 음" +#~ "향효과를 걸 수 있습니다. 예를 들어 오디오 녹음 할 때 유용하며 음성 대화 시" +#~ "에도 효과를 발휘합니다." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "EasyEffects를 시작하면 마지막 세션에서 사용된 설정이 적용됩니다. 현재 설정" +#~ "을 모두 프로파일로 저장할 수도 있습니다." + +#~ msgid "This release adds the following features:" +#~ msgstr "이 릴리스에는 다음 기능이 추가되었습니다:" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "탭에 더 이상 볼륨 스케일이 표시되지 않습니다. 문제 및 해결 방법에 대한 자" +#~ "세한 내용은 #1211에서 확인할 수 있습니다." + +#~ msgid "and #1427" +#~ msgstr "그리고 #1427" + +#~ msgid "This release fixes the following bug:" +#~ msgstr "이 릴리스는 다음 버그를 수정합니다:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "이 릴리스에는 다음 기능이 추가되었습니다:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "이퀄라이저, 컴프레서 그리고 기타 오디오 효과" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "리미터;컴프레서;리버브;이퀄라이저;자동음량조절;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"프리셋\"" + +#~ msgid "Mute Application" +#~ msgstr "응용 프로그램 음소거" + +#~ msgid "Application Volume" +#~ msgstr "응용 프로그램 음량" + +#~ msgid "Presets" +#~ msgstr "프리셋" + +#~ msgid "Presets Menu" +#~ msgstr "프리셋 메뉴" + +#~ msgid "Global Bypass" +#~ msgstr "전역 Bypass" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects 윈도우" + +#~ msgid "Applications List" +#~ msgstr "응용 프로그램 목록" + +#~ msgid "Target" +#~ msgstr "대상" + +#~ msgid "Reference" +#~ msgstr "참조" + +#~ msgid "Momentary" +#~ msgstr "Momentary" + +#~ msgid "Short-Term" +#~ msgstr "Short-Term" + +#~ msgid "Integrated" +#~ msgstr "Integrated" + +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Geometric Mean" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Geometric Mean" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Geometric Mean" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Geometric Mean" + +#~ msgid "Reset History" +#~ msgstr "히스토리 초기화" + +#, fuzzy +#~ msgid "Relative" +#~ msgstr "Relative" + +#~ msgid "Range" +#~ msgstr "Range" + +#~ msgid "Loudness" +#~ msgstr "Loudness" + +#~ msgid "Output Gain" +#~ msgstr "아웃풋 게인" + +#~ msgid "Input" +#~ msgstr "인풋" + +#~ msgid "Plugin Input Gain" +#~ msgstr "플러그인 인풋 게인" + +#~ msgid "Output" +#~ msgstr "아웃풋" + +#~ msgid "Plugin Output Gain" +#~ msgstr "플러그인 아웃풋 게인" + +#~ msgid "Reset" +#~ msgstr "리셋" + +#, fuzzy +#~ msgid "Using" +#~ msgstr "다음 사용 중" + +#~ msgid "Device" +#~ msgstr "장치" + +#~ msgid "Name" +#~ msgstr "이름" + +#~ msgid "Profile" +#~ msgstr "프로필" + +#~ msgid "Preset" +#~ msgstr "프리셋" + +#, fuzzy +#~ msgid "Listen" +#~ msgstr "듣는 중" + +#~ msgid "Blend Harmonics" +#~ msgstr "Blend Harmonics" + +#~ msgid "3rd" +#~ msgstr "3rd" + +#~ msgid "2nd" +#~ msgstr "2nd" + +#, fuzzy +#~ msgid "Amount" +#~ msgstr "Amount" + +#, fuzzy +#~ msgid "Harmonics" +#~ msgstr "Harmonics" + +#~ msgid "Scope" +#~ msgstr "Scope" + +#~ msgid "Floor" +#~ msgstr "Floor" + +#~ msgid "Floor Value" +#~ msgstr "Floor Value" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "응용 프로그램 제외" + +#~ msgid "Excluded Applications List" +#~ msgstr "제외된 프로그램 목록" + +#~ msgid "Show Excluded Applications" +#~ msgstr "제외된 프로그램 보기" + +#~ msgid "Compressor" +#~ msgstr "컴프레서" + +#~ msgid "Mode" +#~ msgstr "모드" + +#~ msgid "Downward" +#~ msgstr "Downward" + +#~ msgid "Upward" +#~ msgstr "Upward" + +#~ msgid "Boosting" +#~ msgstr "증폭" + +#, fuzzy +#~ msgid "Compression Mode" +#~ msgstr "Compression Mode" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Boost Threshold" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Boost Amount" + +#~ msgid "Attack" +#~ msgstr "어택" + +#~ msgid "Time" +#~ msgstr "타임" + +#~ msgid "Threshold" +#~ msgstr "Threshold" + +#~ msgid "Attack Time" +#~ msgstr "어택 타임" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Attack Threshold" + +#~ msgid "Release" +#~ msgstr "릴리스" + +#~ msgid "Release Time" +#~ msgstr "릴리스 타임" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Release Threshold" + +#, fuzzy +#~ msgid "Ratio" +#~ msgstr "Ratio" + +#, fuzzy +#~ msgid "Knee" +#~ msgstr "Knee" + +#, fuzzy +#~ msgid "Makeup" +#~ msgstr "Makeup" + +#, fuzzy +#~ msgid "Sidechain" +#~ msgstr "Sidechain" + +#, fuzzy +#~ msgid "Peak" +#~ msgstr "Peak" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Low-Pass" + +#, fuzzy +#~ msgid "Uniform" +#~ msgstr "Uniform" + +#~ msgid "Sidechain Mode" +#~ msgstr "Sidechain Mode" + +#~ msgid "Source" +#~ msgstr "소스" + +#~ msgid "Middle" +#~ msgstr "중간" + +#~ msgid "Side" +#~ msgstr "Side" + +#~ msgid "Left" +#~ msgstr "왼쪽" + +#~ msgid "Right" +#~ msgstr "오른쪽" + +#~ msgid "Sidechain Source" +#~ msgstr "Sidechain Source" + +#~ msgid "Type" +#~ msgstr "타입" + +#~ msgid "Feed-forward" +#~ msgstr "Feed-forward" + +#~ msgid "Feed-back" +#~ msgstr "피드백" + +#, fuzzy +#~ msgid "External" +#~ msgstr "External" + +#~ msgid "Sidechain Type" +#~ msgstr "Sidechain 타입" + +#~ msgid "Input Device" +#~ msgstr "입력 장치" + +#~ msgid "PreAmplification" +#~ msgstr "PreAmplification" + +#, fuzzy +#~ msgid "Reactivity" +#~ msgstr "Reactivity" + +#, fuzzy +#~ msgid "Lookahead" +#~ msgstr "Lookahead" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Sidechain Filters" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "High-Pass" + +#, fuzzy +#~ msgid "Frequency" +#~ msgstr "Frequency" + +#, fuzzy +#~ msgid "Off" +#~ msgstr "끄기" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "High-Pass Filter Mode" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "High-Pass Filter Frequency" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Low-Pass Filter Mode" + +#, fuzzy +#~ msgid "Gain" +#~ msgstr "Gain" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Envelope" + +#, fuzzy +#~ msgid "Curve" +#~ msgstr "Curve" + +#, fuzzy +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "좌측 채널" + +#, fuzzy +#~ msgid "R" +#~ msgstr "R" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "우측 채널" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Impulses" + +#, fuzzy +#~ msgid "Combine" +#~ msgstr "Combine" + +#, fuzzy +#~ msgid "Stereo Width" +#~ msgstr "Stereo Width" + +#, fuzzy +#~ msgid "Spectrum" +#~ msgstr "스펙트럼" + +#, fuzzy +#~ msgid "Rate" +#~ msgstr "레이트" + +#, fuzzy +#~ msgid "Samples" +#~ msgstr "Samples" + +#, fuzzy +#~ msgid "Duration" +#~ msgstr "Duration" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Combine Impulse Responses" + +#, fuzzy +#~ msgid "First Kernel" +#~ msgstr "First Kernel" + +#, fuzzy +#~ msgid "Second Kernel" +#~ msgstr "Second Kernel" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "출력 파일 이름" + +#, fuzzy +#~ msgid "Combined Kernel Name" +#~ msgstr "Combined Kernel Name" + +#, fuzzy +#~ msgid "Import Impulse" +#~ msgstr "Import Impulse" + +#, fuzzy +#~ msgid "Search" +#~ msgstr "검색" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Impulse 파일 검색" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Impulse 파일 목록" + +#, fuzzy +#~ msgid "Default" +#~ msgstr "기본값" + +#, fuzzy +#~ msgid "Cutoff" +#~ msgstr "Cutoff" + +#, fuzzy +#~ msgid "Feed" +#~ msgstr "Feed" + +#~ msgid "Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Mute" +#~ msgstr "음소거" + +#, fuzzy +#~ msgid "Detection" +#~ msgstr "Detection" + +#, fuzzy +#~ msgid "Wide" +#~ msgstr "Wide" + +#, fuzzy +#~ msgid "Split" +#~ msgstr "Split" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "F1 Split" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frequency 1 Split" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "F2 Peak" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frequency 2 Peak" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "F1 Gain" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frequency 1 Gain" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "F2 Level" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frequency 2 Level" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "F2 Peak Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frequency 2 Peak Q" + +#, fuzzy +#~ msgid "Laxity" +#~ msgstr "Laxity" + +#, fuzzy +#~ msgid "Detected" +#~ msgstr "Detected" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Reduction" + +#, fuzzy +#~ msgid "Frame Size" +#~ msgstr "Frame Size" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filter Length" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "API" +#~ msgstr "API" + +#, fuzzy +#~ msgid "Access" +#~ msgstr "액세스" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "릴리스 타임" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "External" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "컴프레서" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "바이패스" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "출력 게인" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "APO 프리셋" + +#, fuzzy +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "APO 프리셋" + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "APO 프리셋" + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "장치" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "State" +#~ msgstr "상태" + +#, fuzzy +#~ msgid "Channels" +#~ msgstr "채널" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "채널" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "포멧" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "프리셋" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detection" + +#, fuzzy +#~ msgid "Used Plugins List" +#~ msgstr "사용된 플러그인 목록" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "APO 프리셋" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "APO 프리셋" + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "타겟" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "타겟" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "출력 게인" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "제거" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "출력 게인" + +#, fuzzy +#~ msgid "Running" +#~ msgstr "실행 중" + +#, fuzzy +#~ msgid "Suspended" +#~ msgstr "일시 중단됨" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "만드는 중" + +#, fuzzy +#~ msgid "Error" +#~ msgstr "에러" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "채널" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "PipeWire 음향 효과 애플리케이션" + +#, fuzzy +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Impulse 파일 목록" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "제거" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "제거" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Impulse 파일 목록" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Impulse 파일 검색" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "infinity" +#~ msgstr "무한대" + +#, fuzzy +#~ msgid "Import APO Preset File" +#~ msgstr "APO 프리셋 파일 임포트" + +#, fuzzy +#~ msgid "APO Presets" +#~ msgstr "APO 프리셋" + +#~ msgid "Remove" +#~ msgstr "제거" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "출력 게인" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "프리셋 임포트" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "APO 프리셋 파일 임포트" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "제거" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "음량" + +#, fuzzy +#~ msgid "Add to Blocklist" +#~ msgstr "차단 목록에 추가" + +#, fuzzy +#~ msgid "Add Plugin" +#~ msgstr "플러그인 추가" + +#, fuzzy +#~ msgid "Format" +#~ msgstr "포멧" + +#, fuzzy +#~ msgid "Latency" +#~ msgstr "레이턴시" + +#, fuzzy +#~ msgid "idle" +#~ msgstr "유휴 상태" diff --git a/po/news/meson.build b/po/news/meson.build new file mode 100644 index 0000000..2b314c4 --- /dev/null +++ b/po/news/meson.build @@ -0,0 +1,3 @@ +i18n_mod.gettext(meson.project_name() + '-news', + preset: 'glib' +) \ No newline at end of file diff --git a/po/news/nb_NO.po b/po/news/nb_NO.po new file mode 100644 index 0000000..46a616f --- /dev/null +++ b/po/news/nb_NO.po @@ -0,0 +1,1897 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-07-24 14:24+0000\n" +"Last-Translator: Allan Nordhøy \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb_NO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Lydeffekter for PipeWire-programmer" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects er et avansert lydmanipuleringsverktøy. Det har tonekontroll, " +"lydbegrenser, kompressor og etterklangsverktøy, for å nevne noe. En innebygd " +"spektrumsanalysator komplementerer disse." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects er etterfølgeren til PulseEffects. EasyEffects støtter også " +"Pipewire sin lydtjener. PulseAudio-brukere bør bruke PulseEffects istedenfor." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Fordi EasyEffects bruker forvalgt PipeWire-lydtjener vil det fungere med " +"nesten alle programmer. Alle som støttes er å finne i hovedvinduet, der hver " +"av dem kan skrus på individuelt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Annet enn å endre lyden som sendes ut kan EasyEffects endre effekter for " +"inngangsenheter, som f.eks. en mikrofon. Dette er nyttig til for eksempel " +"lydopptak, men fungerer også bra for samtaler." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Når EasyEffects startes, vil den huske alle innstillingene du gjorde i " +"forrige økt. Det er også mulig å lagre innstillingene i ulike profiler." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Hovedsiden som viser to programmer der det spilles av lyd" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Bassforbedringssiden som viser lydkontroller" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +#, fuzzy +msgid "The convolver page showing audio controls" +msgstr "Convolver-siden viser lydkontroller" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Funksjoner:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Feilfikser:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Oppdaterte oversettelser" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Oppdaterte oversettelser" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Oppdaterte oversettelser" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +#, fuzzy +msgid "Improved translations" +msgstr "Oppdaterte oversettelser" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Støtte for neste PipeWire-utgave `0.3.44`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +#, fuzzy +msgid "The tbb library is a new dependency" +msgstr "`tbb`-biblioteket er en ny avhengighet" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Oppdatert kinesisk oversettelse." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Oppdatert italiensk oversettelse." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 erstattes av gtkmm4" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +#, fuzzy +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "GStreamer erstattet av systemspesifikke PipeWire-filtre." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#~ msgid "This release adds the following features:" +#~ msgstr "Denne utgaven bringer følgende funksjoner:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bånd 1" + +#, fuzzy +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Dette er en ny innstilling som lar brukeren velge tidsavbrudd for " +#~ "inaktivitet. Når ingen klient spiller" + +#, fuzzy +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "til eller tar opp fra enhetene vil filterne avlenkes etter at " +#~ "tidsavbruddsperioden er nådd. Dette gjøres for å ikke" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "kaste bort prosessorkraft på å behandle stillhet." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Denne utgaven fikser følgende feil:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Denne utgaven fikser følgende funksjon:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Tonekontroll, kompressor og andre lydeffekter" + +#~ msgid "\"Presets\"" +#~ msgstr "«Forhåndsinnstillinger»" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Påskrudd" + +#~ msgid "Mute Application" +#~ msgstr "Forstum program" + +#~ msgid "Application Volume" +#~ msgstr "Programlydstyrke" + +#~ msgid "_Preferences" +#~ msgstr "_Innstillinger" + +#, fuzzy +#~ msgid "_Manual" +#~ msgstr "_Manuell" + +#~ msgid "_Shortcuts" +#~ msgstr "_Snarveier" + +#~ msgid "_Reset Settings" +#~ msgstr "_Tilbakestill innstillinger" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Om EasyEffects" + +#, fuzzy +#~ msgid "Presets" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Profilmeny" + +#~ msgid "Primary Menu" +#~ msgstr "Hovedmeny" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects-vindu" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Programliste" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Programnavn" + +#~ msgid "Target" +#~ msgstr "Mål" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Maksimum" + +#~ msgid "Reference" +#~ msgstr "Referanse" + +#~ msgid "Integrated" +#~ msgstr "Integrert" + +#~ msgid "Reset History" +#~ msgstr "Tilbakestill historikk" + +#~ msgid "Relative" +#~ msgstr "Relativ" + +#~ msgid "Input" +#~ msgstr "Inngang" + +#~ msgid "Output" +#~ msgstr "Utgang" + +#~ msgid "Reset" +#~ msgstr "Tilbakestill" + +#~ msgid "Using" +#~ msgstr "Bruker" + +#~ msgid "Device" +#~ msgstr "Enhet" + +#~ msgid "Name" +#~ msgstr "Navn" + +#, fuzzy +#~ msgid "Profile" +#~ msgstr "Profil" + +#~ msgid "Preset" +#~ msgstr "Forhåndsinnstilling" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Fjern denne modellfilen" + +#~ msgid "Listen" +#~ msgstr "Lytt" + +#~ msgid "3rd" +#~ msgstr "Tredje" + +#~ msgid "2nd" +#~ msgstr "Andre" + +#~ msgid "Amount" +#~ msgstr "Mengde" + +#~ msgid "Harmonics" +#~ msgstr "Overtoner" + +#~ msgid "Scope" +#~ msgstr "Omfang" + +#~ msgid "Floor" +#~ msgstr "Gulv" + +#~ msgid "Floor Value" +#~ msgstr "Gulvverdi" + +#~ msgid "Link" +#~ msgstr "Lenke" + +#~ msgid "Application Name" +#~ msgstr "Programnavn" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Vis svartelistede programmer" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Svartelistede programmer" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Vis svartelistede programmer" + +#~ msgid "Compressor" +#~ msgstr "Kompressor" + +#~ msgid "Mode" +#~ msgstr "Modus" + +#~ msgid "Downward" +#~ msgstr "Nedover" + +#~ msgid "Upward" +#~ msgstr "Oppover" + +#~ msgid "Compression Mode" +#~ msgstr "Kompresjonsmodus" + +#~ msgid "Time" +#~ msgstr "Tid" + +#~ msgid "Threshold" +#~ msgstr "Terskel" + +#~ msgid "Ratio" +#~ msgstr "Forhold" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Lavpass" + +#~ msgid "Uniform" +#~ msgstr "Ensartet" + +#~ msgid "Source" +#~ msgstr "Kilde" + +#~ msgid "Left" +#~ msgstr "Venstre" + +#~ msgid "Right" +#~ msgstr "Høyre" + +#~ msgid "Type" +#~ msgstr "Type" + +#, fuzzy +#~ msgid "Feed-back" +#~ msgstr "Respons" + +#~ msgid "External" +#~ msgstr "Ekstern" + +#~ msgid "Input Device" +#~ msgstr "Inndataenhet" + +#~ msgid "High-Pass" +#~ msgstr "Høypass" + +#~ msgid "Frequency" +#~ msgstr "Frekvens" + +#~ msgid "Off" +#~ msgstr "Av" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/okt" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/okt" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/okt" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Høypassfilter-modus" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Høypassfilter-frekvens" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Lavpassfilter-modus" + +#~ msgid "Gain" +#~ msgstr "Forsterkning" + +#~ msgid "L" +#~ msgstr "V" + +#~ msgid "Left Channel" +#~ msgstr "Venstre kanal" + +#~ msgid "R" +#~ msgstr "H" + +#~ msgid "Right Channel" +#~ msgstr "Høyre kanal" + +#~ msgid "Impulses" +#~ msgstr "Impulser" + +#~ msgid "Combine" +#~ msgstr "Kombiner" + +#~ msgid "Stereo Width" +#~ msgstr "Stereobredde" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#~ msgid "Log Scale" +#~ msgstr "Log-skala" + +#~ msgid "Rate" +#~ msgstr "Takt" + +#~ msgid "Duration" +#~ msgstr "Varighet" + +#~ msgid "First Kernel" +#~ msgstr "Første kjerne" + +#~ msgid "Second Kernel" +#~ msgstr "Andre kjerne" + +#~ msgid "Output File Name" +#~ msgstr "Utdata-filnavn" + +#~ msgid "Combined Kernel Name" +#~ msgstr "Kombinert kjernenavn" + +#~ msgid "Search" +#~ msgstr "Søk" + +#~ msgid "Default" +#~ msgstr "Forvalg" + +#~ msgid "Detection" +#~ msgstr "Oppdagelse" + +#~ msgid "Wide" +#~ msgstr "Bred" + +#~ msgid "Reduction" +#~ msgstr "Reduksjon" + +#~ msgid "Frame Size" +#~ msgstr "Rammestørrelse" + +#~ msgid "Filter Length" +#~ msgstr "Filterlengde" + +#~ msgid "Bands" +#~ msgstr "Bånd" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Beregn frekvenser" + +#~ msgid "Resonance" +#~ msgstr "Resonans" + +#~ msgid "Width" +#~ msgstr "Bredde" + +#~ msgid "Quality" +#~ msgstr "Kvalitet" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Tilgang" + +#~ msgid "Description" +#~ msgstr "Beskrivelse" + +#~ msgid "Remove this model file" +#~ msgstr "Fjern denne modellfilen" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/okt lavpass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/okt lavpass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/okt lavpass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/okt høypass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/okt høypass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/okt høypass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/okt båndpass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/okt båndpass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/okt båndpass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct båndsperre" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct båndsperre" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct båndsperre" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Ekstern" + +#~ msgid "Oversampling" +#~ msgstr "Oversampling" + +#~ msgid "None" +#~ msgstr "Ingen" + +#~ msgid "Output Volume" +#~ msgstr "Utgangslydstyrke" + +#~ msgid "Classic" +#~ msgstr "Klassisk" + +#~ msgid "Modern" +#~ msgstr "Moderne" + +#~ msgid "Band 1" +#~ msgstr "Bånd 1" + +#~ msgid "Band 2" +#~ msgstr "Bånd 2" + +#~ msgid "Band 3" +#~ msgstr "Bånd 3" + +#~ msgid "Band 4" +#~ msgstr "Bånd 4" + +#~ msgid "Band 5" +#~ msgstr "Bånd 5" + +#~ msgid "Band 6" +#~ msgstr "Bånd 6" + +#~ msgid "Band 7" +#~ msgstr "Bånd 7" + +#~ msgid "Band 8" +#~ msgstr "Bånd 8" + +#~ msgid "Band Start" +#~ msgstr "Bånd-start" + +#~ msgid "Band End" +#~ msgstr "Bånd-slutt" + +#~ msgid "Max Reduction" +#~ msgstr "Maks. reduksjon" + +#~ msgid "General" +#~ msgstr "Generelt" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Bruk forvalgt inngang" + +#~ msgid "Custom Input Device" +#~ msgstr "Egendefinert inngangsenhet" + +#~ msgid "Use Default Output" +#~ msgstr "Bruk forvalgt utgang" + +#~ msgid "Custom Output Device" +#~ msgstr "Egendefinert utgangsenhet" + +#~ msgid "Server Information" +#~ msgstr "Tjenerinfo" + +#~ msgid "Library Version" +#~ msgstr "Biblioteksversjon" + +#~ msgid "Output Devices" +#~ msgstr "Utgangsenheter" + +#~ msgid "Output Presets" +#~ msgstr "Utgangsforhåndsinnstillinger" + +#~ msgid "Create Association" +#~ msgstr "Opprett tilknytning" + +#~ msgid "Input Devices" +#~ msgstr "Inngangsenheter" + +#~ msgid "Input Presets" +#~ msgstr "Inngangsforhåndsinnstillinger" + +#~ msgid "Modules" +#~ msgstr "Moduler" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Modulliste" + +#~ msgid "Clients" +#~ msgstr "Klienter" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Klientliste" + +#~ msgid "Test Signal" +#~ msgstr "Testsignal" + +#~ msgid "State" +#~ msgstr "Tilstand" + +#~ msgid "Enabled" +#~ msgstr "Påskrudd" + +#~ msgid "Properties" +#~ msgstr "Egenskaper" + +#~ msgid "Channels" +#~ msgstr "Kanaler" + +#~ msgid "Both" +#~ msgstr "Begge" + +#~ msgid "Both Channels" +#~ msgstr "Begge kanaler" + +#~ msgid "Waveform" +#~ msgstr "Bølgeform" + +#~ msgid "Sine Wave" +#~ msgstr "Sinusbølge" + +#~ msgid "White Noise" +#~ msgstr "Hvit støy" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvalitet" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Oppdagelse" + +#~ msgid "Octaves" +#~ msgstr "Oktaver" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Fjern denne modellfilen" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#~ msgid "_General" +#~ msgstr "_Generelt" + +#~ msgid "Service" +#~ msgstr "Tjeneste" + +#~ msgid "Audio" +#~ msgstr "Lyd" + +#~ msgid "Style" +#~ msgstr "Stil" + +#~ msgid "Use Dark Theme" +#~ msgstr "Ifør mørk drakt" + +#~ msgid "_Spectrum" +#~ msgstr "_Spektrum" + +#~ msgid "Shape" +#~ msgstr "Form" + +#~ msgid "Bars" +#~ msgstr "Bjelker" + +#~ msgid "Lines" +#~ msgstr "Linjer" + +#~ msgid "Height" +#~ msgstr "Høyde" + +#~ msgid "Line Width" +#~ msgstr "Linjebredde" + +#~ msgid "Color" +#~ msgstr "Farge" + +#~ msgid "Maximum" +#~ msgstr "Maksimum" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Opprett forhåndsinnstilling" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importer forhåndsinnstillinger" + +#~ msgid "New Input Preset Name" +#~ msgstr "Nytt inngangforhåndsinnstillingsnavn" + +#~ msgid "Input Presets List" +#~ msgstr "Inngangforhåndsinnstillingsliste" + +#~ msgid "High Frequency Damping" +#~ msgstr "Høyfrekvensdemping" + +#~ msgid "Room Size" +#~ msgstr "Romstørrelse" + +#~ msgid "Small" +#~ msgstr "Lite" + +#~ msgid "Medium" +#~ msgstr "Middels" + +#~ msgid "Large" +#~ msgstr "Stort" + +#~ msgid "Tunnel" +#~ msgstr "Tunnel" + +#~ msgid "Experimental" +#~ msgstr "Eksperimentelt" + +#~ msgid "Large Empty Hall" +#~ msgstr "Tor tom hall" + +#~ msgid "Disco" +#~ msgstr "Diskotek" + +#~ msgid "Import Model" +#~ msgstr "Importer modell" + +#~ msgid "Models" +#~ msgstr "Modeller" + +#~ msgid "Active Model" +#~ msgstr "Aktiv modell" + +#~ msgid "Overview" +#~ msgstr "Oversikt" + +#~ msgid "Close the Window" +#~ msgstr "Lukk vinduet" + +#~ msgid "Quit EasyEffects" +#~ msgstr "Avslutt EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balanse" + +#~ msgid "Stereo Mode" +#~ msgstr "Stereomodus" + +#~ msgid "Invert Phase" +#~ msgstr "Inverter fase" + +#, fuzzy +#~ msgid "Error" +#~ msgstr "feil" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "ukjent" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "Hide the Window." +#~ msgstr "Skjul vinduet." + +#~ msgid "Show available presets." +#~ msgstr "Vis tilgjengelige forhåndsinnstillinger." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#~ msgid "Open" +#~ msgstr "Åpne" + +#~ msgid "Cancel" +#~ msgstr "Avbryt" + +#~ msgid "Recorders" +#~ msgstr "Opptakere" + +#~ msgid "Players" +#~ msgstr "Avspillere" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "uendelig" + +#~ msgid "Remove" +#~ msgstr "Fjern" + +#~ msgid "Output Device" +#~ msgstr "Utgangsenhet" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "Importer modellfil" + +#, fuzzy +#~ msgid "Bass Enhancer" +#~ msgstr "Balanse" + +#, fuzzy +#~ msgid "Convolver" +#~ msgstr "Convolver" + +#, fuzzy +#~ msgid "Echo Canceller" +#~ msgstr "Avbryt" + +#, fuzzy +#~ msgid "Maximizer" +#~ msgstr "Maksimum" + +#, fuzzy +#~ msgid "Multiband Compressor" +#~ msgstr "Kompressor" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Tjenerinfo" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Reduksjon" + +#, fuzzy +#~ msgid "Stereo Tools" +#~ msgstr "Stereomodus" + +#~ msgid "Average" +#~ msgstr "Gjennomsnitt" + +#~ msgid "Use Default" +#~ msgstr "Bruk forvalg" + +#~ msgid "Remove this plugin" +#~ msgstr "Fjern dette programtillegget" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktiv modell" + +#~ msgid "Add to Blocklist" +#~ msgstr "Legg til på svarteliste" + +#~ msgid "Blocklist" +#~ msgstr "Svarteliste" + +#~ msgid "Add Plugin" +#~ msgstr "Legg til programtillegg" + +#~ msgid "Speakers" +#~ msgstr "Høyttalere" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "Plugins" +#~ msgstr "Programtillegg" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Påskrudd" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Påskrudd" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Forsinkelse" + +#~ msgid "Faster" +#~ msgstr "Raskere" diff --git a/po/news/nl.po b/po/news/nl.po new file mode 100644 index 0000000..51eb167 --- /dev/null +++ b/po/news/nl.po @@ -0,0 +1,3297 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-05-01 20:52+0000\n" +"Last-Translator: Philip Goto \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Audio-effecten voor PipeWire-apps" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects is een uitgebreide app waarmee u audio zeer gericht kunt " +"afstellen. Het bevat een equalizer, limiter, compressor, galmhulpmiddel en " +"nog meer andere hulpmiddelen. Verder bevat de toepassing een ingebouwde " +"spectrumanalysator." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects is de opvolger van PulseEffects. Easy Effects ondersteunt " +"alleen de audioserver van PipeWire. Gebruikers van PulseAudio moeten in " +"plaats daarvan PulseEffects gebruiken." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Omdat Easy Effects de standaard PipeWire-geluidsserver gebruikt werkt het " +"met de meeste, zo niet alle apps die u gebruikt. Alle ondersteunde apps " +"worden getoond in het hoofdvenster, waar elke app afzonderlijk kan worden " +"ingeschakeld." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Naast het manipuleren van geluidsuitvoer kan Easy Effects effecten toepassen " +"op een invoerapparaat, zoals een microfoon. Dit is bijvoorbeeld handig bij " +"geluidsopnamen, maar werkt ook goed tijdens spraakgesprekken." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Na het opstarten toont EasyEffects de in de vorige sessie gebruikte " +"instellingen. Ook kunnen instellingen worden opgeslagen als profielen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "De hoofdpagina welke twee apps met audio-uitvoer toont" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "De basversterkerpagina welke audiobedieningselementen toont" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "De convolver-pagina welke audiobedieningselementen toont" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Functies:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Foutoplossingen:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Overige opmerkingen:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" +"Het voorinstellingenmenu vraagt nu om bevestiging voor het opslaan/" +"verwijderen van een voorinstellingenbestand." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" +"Het resetten van de plug-in zou zijn bediening niet meer onbruikbaar moeten " +"maken." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" +"Speex wordt niet langer ten onrechte vermeld als bouwafhankelijkheid " +"(speexdsp is nog steeds een bouwafhankelijkheid)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" +"RNNoise is niet langer een auto-afhankelijkheid. Het is nu standaard " +"vereist, indien niet beschikbaar moet het expliciet worden uitgeschakeld met " +"-Denable-rnnoise=false" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "Bijgewerkte vertalingen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" +"Er is een klein foutje gemaakt in de laatste uitgave. Er is een nieuwe " +"gemaakt om er zeker van te zijn dat mensen de juiste branch van het pakket " +"hebben." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" +"De equalizer-‘sort bands’-functie ordent nu banden op GSettings, zodat het " +"resultaat kan worden opgeslagen in voorinstellingen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "Verbeterde prestaties bij het resetten van toetsen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" +"Probleem met de selectie van de ‘Grote lege zaal’-voorinstelling in het " +"nagalmeffect is opgelost." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" +"Enkele misbruiken van de API van PipeWire opgelost die mogelijk enkele " +"willekeurige problemen van sommige gebruikers kunnen verhelpen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" +"Omdat we code verwijderen die door GTK 4.10 is afgeschreven, is de minimale " +"GTK-versie verhoogd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" +"De update-interval van de spectrum-plug-in is verbeterd. Verschillende " +"sample-frequenties zouden visueel tot vergelijkbare update-frequenties " +"moeten leiden." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" +"Het door de niveaumeters en het spectrum gebruikte update-interval kan door " +"de gebruiker worden aangepast." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" +"De waarde van de equalizer-bandversterking kan in grotere stappen worden " +"aangepast. Fijnkorrelige regeling is nog steeds mogelijk via de toetsen " +"omhoog/omlaag van het toetsenbord." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "Kleine verbeteringen aan de echo-onderdrukking." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" +"De echo-onderdrukking-probes werden niet gekoppeld aan de geluidskaart na de " +"overgang naar meerdere filters. Dit zou nu verholpen moeten zijn." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" +"Het is nu mogelijk om meer dan één filterinstantie aan de effecten-pipeline " +"toe te voegen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"Een nieuwe spraakverwerkings-plug-in gebaseerd op de Speex-bibliotheek is " +"toegevoegd. Naast ruisonderdrukking biedt het ook detectie voor " +"stemactiviteit. Het is een goed alternatief voor de gevallen waar de RNNoise-" +"bibliotheek niet goed werkt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "Compatibiliteit met Linux Studio Plugins 1.2.3 verbeterd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" +"GraphicEQ-voorinstellingen kunnen worden geïmporteerd in het equalizer-" +"effect." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"De app-naam is veranderd naar Easy Effects om aan de naamgevingsconventies " +"van de GNOME Human Interface Guidelines te voldoen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "De documentatie is bijgewerkt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "Automatisch inladen van voorinstellingen verbeterd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" +"De autoversterking-stiltegrens kan nu door de gebruiker worden ingesteld." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "Dry- en wet-regelaars toegevoegd aan het stereogereeschapseffect." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" +"De echo-onderdrukker heeft nu een regeling voor restruisonderdrukking, " +"eveneens gebaseerd op de Speex-bibliotheek." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" +"Wanneer de muis over een grafiek beweegt werd de verkeerde waarde voor de x-" +"as-coördinaat getoond. Deze regressie is verholpen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"Door de nieuwe functie voor meerdere instanties is het " +"voorinstellingsformaat veranderd, maar de oude is nog steeds compatibel om " +"te laden. Houd er in elk geval rekening mee dat de huidige voorinstelling " +"altijd in het nieuwe formaat wordt opgeslagen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"Implementatie van Multiband Gate is gemigreerd van CALF naar Linux Studio " +"Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"De compatibiliteit van het automatisch laden van voorinstellingen met bluez5-" +"apparaten is verbeterd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "Wet-/dry-bedieningselementen toegevoegd voor enkele plug-ins" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"De effectinterface wordt niet langer geladen wanneer de bijbehorende lv2-" +"plug-in niet is geïnstalleerd op het systeem. In plaats daarvan wordt een " +"statusbericht aan de gebruiker getoond." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "De documentatie is bijgewerkt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "Foutopsporingsberichten verbeterd" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Bijgewerkte vertalingen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Verbeterde vertalingen" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Fout verholpen waarbij EasyEffects kon crashen bij het sluiten van het " +"venster terwijl effecten werden toegepast." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" +"De bypass-staat kan worden opgeslagen in het voorinstellingsbestand. De " +"redenen hiervoor zijn te vinden in issue 1039" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" +"De compatibiliteit van het automatisch laden van voorinstelling met USB-" +"apparaten is verbeterd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"De gebruiker krijgt een dialoogvenster te zien wanneer een voorinstelling " +"niet wordt geladen of een voorinstellings-/impuls-bestand niet wordt " +"geïmporteerd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"De SideChain Gate plug-in van Linux Studio Plugins wordt nu gebruikt in " +"plaats van die van Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"Easy Effects zou niet meer moeten crashen wanneer de gebruikerstaal niet " +"goed geconfigureerd is." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"Er is een workaround geïmplementeerd in ons pictogram om het gebrek aan SVG-" +"ondersteuning in QT op te vangen." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"Wanneer effecten worden uitgeschakeld voor een app stellen we nu de " +"doelmetadata ervan in op nul. Hierdoor kan de media session manager " +"(wireplumber) de stream correct verplaatsen naar een nieuw apparaat." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"Er is een nieuwe configuratie-optie toegevoegd. Hiermee kan Easy Effects " +"streams negeren waarvan het doel is om sink-apparaten te monitoren. Dit " +"helpt om enkele problemen op te lossen die onze gebruikers hadden bij het " +"gebruik van OBS." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "De code die de stream sample format toont is verbeterd" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"De RNNoise-bibliotheek is nu optioneel. Dit zou pakketbeheerders moeten " +"helpen om een Debian-pakket te bouwen. Zie issue 1000 voor meer informatie." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"Onze logboeken tonen nu de broncoderegel waar de berichten worden afgedrukt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"Het selectievakje ‘Effecten inschakelen’ in ons venster werd niet bijgewerkt " +"wanneer programma's van derden, zoals pavucontrol, de stream van onze " +"virtuele apparaten verwijderden. Dit zou nu verholpen moeten zijn." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"Crash verholpen die kon optreden wanneer de maximale autogain-geschiedenis " +"werd gewijzigd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "Crashes verholpen wanneer pw-mididump actief is" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "De interface van de pitch-plug-in is verbeterd" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "Ons app-pictogram is nu compatibel met desktops die QT gebruiken" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"Onze blocklist-code zal de tag application.id gebruiken als de stream die " +"instelt" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Om problemen met het scrollen met de muis te voorkomen, tonen de items in de " +"lijst met apps in het tabblad Spelers/Opnemers geen volumeschaal meer. Meer " +"details over het probleem en de oplossing zijn te vinden in de issues 1211 " +"en 1427" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Wanneer er geen app beschikbaar is voor weergave in de Spelers/Opnemers " +"wordt een bericht getoond aan de gebruiker" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Veel vertalingsupdates" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Ondersteuning voor de volgende PipeWire-uitgave, `0.3.44`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Betere ondersteuning voor slaapstand." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +#, fuzzy +msgid "The tbb library is a new dependency" +msgstr "De bibliotheek `tbb` is een nieuwe afhankelijkheid" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "Verbeterde ondersteuning voor Assistive Technology." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Chinese vertaling bijgewerkt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Italiaanse vertaling bijgewerkt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "Regio verbeterd in enkele widgets" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "Verkeerde uitlijning in enkele widgets verbeterd" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "Equalizer-interface verbeterd." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 is vervangen door gtkmm4" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "GStreamer is vervangen door inheemse PipeWire-filters." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Banden" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Equalizer, compressor en overige audio-effecten" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limiter;compressor;galm;equalizer;autovolume;" + +#~ msgid "\"Presets\"" +#~ msgstr "‘Voorinstellingen’" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Inschakelen" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Toepassingen" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Toepassingen" + +#, fuzzy +#~ msgid "_Shortcuts" +#~ msgstr "Korte termijn" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Standaardwaarden herstellen" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "Over EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Voorinstellingen" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Voorinstellingen" + +#~ msgid "Global Bypass" +#~ msgstr "Globale omzeiling" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "PulseEffecten" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Toepassingen" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Kale muren" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Toepassingen" + +#~ msgid "Target" +#~ msgstr "Doel" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Maximale versterking" + +#~ msgid "Momentary" +#~ msgstr "Kortstondig" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Korte termijn" + +#~ msgid "Integrated" +#~ msgstr "Geïntegreerd" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Geometrisch gemiddelde gebruiken" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Geometrisch gemiddelde gebruiken" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Geometrisch gemiddelde gebruiken" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Geometrisch gemiddelde gebruiken" + +#~ msgid "Reset History" +#~ msgstr "Geschiedenis wissen" + +#~ msgid "Relative" +#~ msgstr "Relatief" + +#~ msgid "Range" +#~ msgstr "Bereik" + +#~ msgid "Loudness" +#~ msgstr "Hardheid" + +#~ msgid "Output Gain" +#~ msgstr "Uitvoerversterking" + +#~ msgid "Input" +#~ msgstr "Invoer" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Uitvoerversterking" + +#~ msgid "Output" +#~ msgstr "Uitvoer" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Uitvoerversterking" + +#~ msgid "Reset" +#~ msgstr "Standaardwaarden" + +#~ msgid "Using" +#~ msgstr "Gebruikmakend van" + +#~ msgid "Device" +#~ msgstr "Apparaat" + +#~ msgid "Name" +#~ msgstr "Naam" + +#~ msgid "Profile" +#~ msgstr "Profiel" + +#~ msgid "Preset" +#~ msgstr "Voorinstelling" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Voorinstellingen automatisch inladen" + +#~ msgid "Listen" +#~ msgstr "Beluisteren" + +#~ msgid "Blend Harmonics" +#~ msgstr "Harmonieën mengen" + +#~ msgid "3rd" +#~ msgstr "3e" + +#~ msgid "2nd" +#~ msgstr "2e" + +#~ msgid "Amount" +#~ msgstr "Hoeveelheid" + +#~ msgid "Harmonics" +#~ msgstr "Harmonieën" + +#~ msgid "Scope" +#~ msgstr "Bereik" + +#~ msgid "Floor" +#~ msgstr "Verdieping" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Verdieping" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Toepassingen" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Toepassingen op zwarte lijst tonen op hoofdtabblad" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Toepassingen" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Toepassingen op zwarte lijst tonen op hoofdtabblad" + +#~ msgid "Compressor" +#~ msgstr "Compressor" + +#~ msgid "Mode" +#~ msgstr "Modus" + +#~ msgid "Downward" +#~ msgstr "Omlaag" + +#~ msgid "Upward" +#~ msgstr "Omhoog" + +#~ msgid "Boosting" +#~ msgstr "Versterking" + +#~ msgid "Compression Mode" +#~ msgstr "Compressiemodus" + +#~ msgid "Boost Threshold" +#~ msgstr "Versterkingsdrempelwaarde" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Hoeveelheid" + +#~ msgid "Attack" +#~ msgstr "Aanval" + +#~ msgid "Time" +#~ msgstr "Duur" + +#~ msgid "Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Drempelwaarde" + +#~ msgid "Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Relatieve vrijgavedrempelwaarde" + +#~ msgid "Ratio" +#~ msgstr "Verhouding" + +#~ msgid "Knee" +#~ msgstr "Knie" + +#~ msgid "Makeup" +#~ msgstr "Make-up" + +#~ msgid "Sidechain" +#~ msgstr "Zijketen" + +#~ msgid "Peak" +#~ msgstr "Piek" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Low-pass" + +#~ msgid "Uniform" +#~ msgstr "Uniform" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Zijketen" + +#~ msgid "Source" +#~ msgstr "Brok" + +#~ msgid "Middle" +#~ msgstr "Midden" + +#~ msgid "Side" +#~ msgstr "Zijkant" + +#~ msgid "Left" +#~ msgstr "Links" + +#~ msgid "Right" +#~ msgstr "Rechts" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Zijketen" + +#~ msgid "Type" +#~ msgstr "Soort" + +#~ msgid "Feed-forward" +#~ msgstr "Vooruitgeven" + +#~ msgid "Feed-back" +#~ msgstr "Teruggeven" + +#~ msgid "External" +#~ msgstr "Extern" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Zijketen" + +#~ msgid "Input Device" +#~ msgstr "Invoerapparaat" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Voorversterking" + +#~ msgid "Reactivity" +#~ msgstr "Reactiviteit" + +#~ msgid "Lookahead" +#~ msgstr "Vooruitblik" + +#~ msgid "Sidechain Filters" +#~ msgstr "Zijketenfilters" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "High-pass" + +#~ msgid "Frequency" +#~ msgstr "Frequentie" + +#~ msgid "Off" +#~ msgstr "Uit" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "High-pass-filtermodus" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "High-pass-frequentie" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "High-pass-filtermodus" + +#~ msgid "Gain" +#~ msgstr "Versterking" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Stijging" + +#~ msgid "Curve" +#~ msgstr "Curve" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Kanaal" + +#~ msgid "R" +#~ msgstr "R" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Kanalen splitsen" + +#~ msgid "Impulses" +#~ msgstr "Impulsen" + +#~ msgid "Stereo Width" +#~ msgstr "Stereobreedte" + +#~ msgid "Spectrum" +#~ msgstr "Spectrum" + +#~ msgid "Autogain" +#~ msgstr "Automatisch versterken" + +#~ msgid "Rate" +#~ msgstr "Snelheid" + +#~ msgid "Samples" +#~ msgstr "Samples" + +#~ msgid "Duration" +#~ msgstr "Duur" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Impulse Response" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Uitvoervolume" + +#~ msgid "Import Impulse" +#~ msgstr "Impulse importeren" + +#~ msgid "Search" +#~ msgstr "Zoeken" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Impulse-bestand importeren" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Impulse-bestand importeren" + +#~ msgid "Default" +#~ msgstr "Standaard" + +#~ msgid "Cutoff" +#~ msgstr "Onderbreking" + +#~ msgid "Feed" +#~ msgstr "Aanvoer" + +#~ msgid "Bypass" +#~ msgstr "Omzeiling" + +#~ msgid "Mute" +#~ msgstr "Dempen" + +#~ msgid "Detection" +#~ msgstr "Detectie" + +#~ msgid "Wide" +#~ msgstr "Breed" + +#~ msgid "Split" +#~ msgstr "Splitsen" + +#~ msgid "F1 Split" +#~ msgstr "F1-splitsing" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frequentie" + +#~ msgid "F2 Peak" +#~ msgstr "F2-piek" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frequentie" + +#~ msgid "F1 Gain" +#~ msgstr "F1-versterking" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frequentie" + +#~ msgid "F2 Level" +#~ msgstr "F2-niveau" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frequentie" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2-piek Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frequentie" + +#~ msgid "Laxity" +#~ msgstr "Laxiteit" + +#~ msgid "Detected" +#~ msgstr "Gedetecteerd" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Verlaging" + +#~ msgid "Frame Size" +#~ msgstr "Framegrootte" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filter" + +#~ msgid "Bands" +#~ msgstr "Banden" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Kanalen splitsen" + +#~ msgid "Flat Response" +#~ msgstr "Platte respons" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Frequenties berekenen" + +#~ msgid "Load APO Preset" +#~ msgstr "APO-voorinstelling laden" + +#~ msgid "Bell" +#~ msgstr "Bel" + +#~ msgid "High Pass" +#~ msgstr "High-pass" + +#~ msgid "High Shelf" +#~ msgstr "High-shelf" + +#~ msgid "Low Pass" +#~ msgstr "Low-pass" + +#~ msgid "Low Shelf" +#~ msgstr "Low-shelf" + +#~ msgid "Notch" +#~ msgstr "Inkeping" + +#~ msgid "Resonance" +#~ msgstr "Resonantie" + +#~ msgid "All Pass" +#~ msgstr "All-pass" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Banden" + +#~ msgid "Slope" +#~ msgstr "Stijging" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Stijging" + +#~ msgid "Width" +#~ msgstr "Breedte" + +#~ msgid "Quality" +#~ msgstr "Kwaliteit" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Plafond" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Toegang" + +#~ msgid "Description" +#~ msgstr "Omschrijving" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Verwijder dit voorinstellingsbestand" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct low-pass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct low-pass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct low-pass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct high-pass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct high-pass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct high-pass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct band-pass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct band-pass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct band-pass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct band-reject" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct band-reject" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct band-reject" + +#~ msgid "Inertia" +#~ msgstr "Traagheid" + +#~ msgid "Gate" +#~ msgstr "Dosering" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Extern" + +#~ msgid "Gating" +#~ msgstr "Dosering" + +#~ msgid "Oversampling" +#~ msgstr "Oversamplen" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Breed" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Breed" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Lijnbreedte" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Lijnbreedte" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Lijnbreedte" + +#~ msgid "None" +#~ msgstr "Geen" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Voorversterking" + +#, fuzzy +#~ msgid "Boost" +#~ msgstr "Versterking" + +#~ msgid "Stereo Link" +#~ msgstr "Stereo koppelen" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Zijketen" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Automatische niveau's" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Automatische niveau's" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Automatische niveau's" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Automatische niveau's" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Links" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Rechts" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Zijketen" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Zijketenfilters" + +#~ msgid "Standard" +#~ msgstr "Standaard" + +#~ msgid "Flat" +#~ msgstr "Plat" + +#~ msgid "FFT Size" +#~ msgstr "FFT-grootte" + +#~ msgid "Output Volume" +#~ msgstr "Uitvoervolume" + +#~ msgid "Ceiling" +#~ msgstr "Plafond" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Model importeren" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Modus" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Zijketen" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Compressiemodus" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Zijketenfilters" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Low-pass-filtermodus" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Low-pass-filtermodus" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "High-pass-filter" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "High-pass-filter" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "F1-versterking" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Curve" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Splitsen" + +#~ msgid "Split 1/2" +#~ msgstr "1/2 splitsen" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frequentie" + +#~ msgid "Split 2/3" +#~ msgstr "2/3 splitsen" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frequentie" + +#~ msgid "Split 3/4" +#~ msgstr "3/4 splitsen" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frequentie" + +#~ msgid "Sub Band" +#~ msgstr "Subband" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Make-up" + +#~ msgid "Max Reduction" +#~ msgstr "Verlaging" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Versterkingsverlaging" + +#~ msgid "Low Band" +#~ msgstr "Lage band" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Make-up" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Versterkingsverlaging" + +#~ msgid "Mid Band" +#~ msgstr "Middelste band" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Make-up" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Versterkingsverlaging" + +#~ msgid "High Band" +#~ msgstr "Hoge band" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Make-up" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Versterkingsverlaging" + +#~ msgid "General" +#~ msgstr "Algemeen" + +#~ msgid "Use Default Input" +#~ msgstr "Standaardinvoer gebruiken" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Invoerapparaat" + +#~ msgid "Use Default Output" +#~ msgstr "Standaarduitvoer gebruiken" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Uitvoerapparaat" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Galm" + +#~ msgid "Header Version" +#~ msgstr "Kopversie" + +#~ msgid "Library Version" +#~ msgstr "Bibliotheekversie" + +#~ msgid "Sampling Rate" +#~ msgstr "Samplesnelheid" + +#~ msgid "Minimum Quantum" +#~ msgstr "Minimale quantum" + +#~ msgid "Maximum Quantum" +#~ msgstr "Maximale quantum" + +#~ msgid "Default Quantum" +#~ msgstr "Standaard quantum" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Uitvoerapparaat" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Uitvoer-voorinstellingen: " + +#~ msgid "Create Association" +#~ msgstr "Toewijzing maken" + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Uitvoer-voorinstellingen: " + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Invoerapparaat" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Invoer-voorinstellingen: " + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Invoer-voorinstellingen: " + +#~ msgid "Modules" +#~ msgstr "Modules" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Modules" + +#~ msgid "Clients" +#~ msgstr "Clients" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Clients" + +#~ msgid "Test Signal" +#~ msgstr "Signaal testen" + +#~ msgid "State" +#~ msgstr "Status" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Inschakelen" + +#~ msgid "Channels" +#~ msgstr "Aantal kanalen" + +#~ msgid "Both" +#~ msgstr "Beide" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Aantal kanalen" + +#~ msgid "Sine Wave" +#~ msgstr "Sinusgolf" + +#~ msgid "White Noise" +#~ msgstr "Witte ruis" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "High-shelf" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kwaliteit" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formaat" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Voorinstelling" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Scherpte" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detectie" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compressie" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Semitones" +#~ msgstr "Halve tonen" + +#~ msgid "Octaves" +#~ msgstr "Octaven" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Verwijder dit voorinstellingsbestand" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Invoereffecten" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "PulseEffecten" + +#, fuzzy +#~ msgid "Search Plugin" +#~ msgstr "Zoeken" + +#, fuzzy +#~ msgid "Plugins List" +#~ msgstr "Plug-ins" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "Algemeen" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Apparaat" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Alle uitvoerbronnen gebruiken" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Alle invoerbronnen gebruiken" + +#, fuzzy +#~ msgid "Inactivity Timeout" +#~ msgstr "Activiteitstime-out" + +#~ msgid "Use Dark Theme" +#~ msgstr "Donker thema" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Spectrum" + +#~ msgid "Bars" +#~ msgstr "Balken" + +#~ msgid "Lines" +#~ msgstr "Lijnen" + +#~ msgid "Points" +#~ msgstr "Points" + +#~ msgid "Height" +#~ msgstr "Lengte" + +#~ msgid "Line Width" +#~ msgstr "Lijnbreedte" + +#~ msgid "Fill" +#~ msgstr "Opvullen" + +#, fuzzy +#~ msgid "Color" +#~ msgstr "Askleur" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frequentie" + +#~ msgid "Minimum" +#~ msgstr "Minimaal" + +#~ msgid "Maximum" +#~ msgstr "Maximaal" + +#~ msgid "Load" +#~ msgstr "Laden" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Sla de huidige instellingen op in dit voorinstellingsbestand" + +#~ msgid "Remove this preset file" +#~ msgstr "Verwijder dit voorinstellingsbestand" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Uitvoer-voorinstellingen: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Voorinstelling maken" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Voorinstelling importeren" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Uitvoer-voorinstellingen: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Uitvoer-voorinstellingen: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Invoer-voorinstellingen: " + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Invoer-voorinstellingen: " + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Invoer-voorinstellingen: " + +#~ msgid "High Frequency Damping" +#~ msgstr "Hoge frequentiedemping" + +#~ msgid "Room Size" +#~ msgstr "Kamergrootte" + +#~ msgid "Small" +#~ msgstr "Klein" + +#~ msgid "Medium" +#~ msgstr "Gemiddeld" + +#~ msgid "Large" +#~ msgstr "Groot" + +#~ msgid "Tunnel" +#~ msgstr "Tunnel" + +#~ msgid "Large/smooth" +#~ msgstr "Groot/Vloeiend" + +#~ msgid "Experimental" +#~ msgstr "Experimenteel" + +#~ msgid "Diffusion" +#~ msgstr "Verspreiding" + +#~ msgid "Pre Delay" +#~ msgstr "Vertraging vooraf" + +#~ msgid "Decay Time" +#~ msgstr "Vervaltijd" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Hoeveelheid" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Doelniveau" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Hoeveelheid" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "F2-niveau" + +#~ msgid "Bass Cut" +#~ msgstr "Bas onderdrukken" + +#~ msgid "Treble Cut" +#~ msgstr "Hoge tonen afsnijden" + +#~ msgid "Ambience" +#~ msgstr "Sfeer" + +#~ msgid "Empty Walls" +#~ msgstr "Kale muren" + +#~ msgid "Room" +#~ msgstr "Kamer" + +#~ msgid "Large Empty Hall" +#~ msgstr "Grote, lege zaal" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Grote, bezette zaal" + +#~ msgid "Import Model" +#~ msgstr "Model importeren" + +#~ msgid "Models" +#~ msgstr "Modellen" + +#, fuzzy +#~ msgid "Standard Model" +#~ msgstr "Standaard RNNoise-model" + +#, fuzzy +#~ msgid "RNNoise Models List" +#~ msgstr "Standaard RNNoise-model" + +#~ msgid "Active Model" +#~ msgstr "Huidig model" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Standaard RNNoise-model" + +#, fuzzy +#~ msgid "Overview" +#~ msgstr "Apparaat" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Zet PulseEffecten terug op de standaardwaarden." + +#, fuzzy +#~ msgid "Close the Window" +#~ msgstr "Verberg het venster." + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "Over EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balans" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Balans" + +#~ msgid "Softclip" +#~ msgstr "Softclip" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Softclip" + +#~ msgid "Stereo Matrix" +#~ msgstr "Stereomatrix" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (standaard stereo)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (stereo naar midden-zijkant)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (midden-zijkant naar stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (mono, linkerkanaal)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (mono, rechterkanaal)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (mono, sum L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (stereo, kanalen omwisselen)" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Stereobasis" + +#~ msgid "Invert Phase" +#~ msgstr "Fase omkeren" + +#~ msgid "Side Level" +#~ msgstr "Zijniveau" + +#~ msgid "Side Balance" +#~ msgstr "Zijbalans" + +#~ msgid "Middle Level" +#~ msgstr "Middelste niveau" + +#~ msgid "Middle Panorama" +#~ msgstr "Middelste panorama" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Uitvoerversterking" + +#~ msgid "Delay L/R" +#~ msgstr "L/R-vertraging" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "L/R-vertraging" + +#~ msgid "Stereo Base" +#~ msgstr "Stereobasis" + +#~ msgid "Stereo Phase" +#~ msgstr "Stereofase" + +#, fuzzy +#~ msgid "Running" +#~ msgstr "actief" + +#, fuzzy +#~ msgid "Suspended" +#~ msgstr "onderbroken" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "bezig met aanmaken" + +#, fuzzy +#~ msgid "Error" +#~ msgstr "foutmelding" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Aantal kanalen" + +#~ msgid "Output Presets: " +#~ msgstr "Uitvoer-voorinstellingen: " + +#~ msgid "Input Presets: " +#~ msgstr "Invoer-voorinstellingen: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Audio-effecten voor PipeWire-toepassingen" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Sluit PulseEffecten af - nuttig in dienstmodus." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Laad een voorinstelling. Voorbeeld: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Zet PulseEffecten terug op de standaardwaarden." + +#~ msgid "Hide the Window." +#~ msgstr "Verberg het venster." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Globale omzeiling: 1 = inschakelen, 2 = uitschakelen, 3 = status opvragen" + +#~ msgid "Show available presets." +#~ msgstr "Toon de beschikbare voorinstellingen." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Impulse-bestand importeren" + +#~ msgid "Import Impulse File" +#~ msgstr "Impulse-bestand importeren" + +#~ msgid "Open" +#~ msgstr "Openen" + +#~ msgid "Cancel" +#~ msgstr "Annuleren" + +#~ msgid "Impulse Response" +#~ msgstr "Impulse Response" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Impulsen" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Impulse importeren" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Impulse-bestand importeren" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Het Impulse-bestand kan niet worden geladen" + +#~ msgid "Recorders" +#~ msgstr "Opname-apparaten" + +#~ msgid "Players" +#~ msgstr "Spelers" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "PulseEffecten" + +#~ msgid "infinity" +#~ msgstr "oneindig" + +#~ msgid "Import APO Preset File" +#~ msgstr "APO-voorinstellingsbestand importeren" + +#~ msgid "APO Presets" +#~ msgstr "APO-voorinstellingen" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Voorinstellingen automatisch inladen" + +#~ msgid "Remove" +#~ msgstr "Verwijderen" + +#~ msgid "Output Device" +#~ msgstr "Uitvoerapparaat" + +#~ msgid "Import Preset" +#~ msgstr "Voorinstelling importeren" + +#~ msgid "Import Model File" +#~ msgstr "Modelbestand importeren" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Standaard RNNoise-model" + +#~ msgid "Bass Enhancer" +#~ msgstr "Basversterker" + +#~ msgid "Bass Loudness" +#~ msgstr "Hardheid van bas" + +#~ msgid "Convolver" +#~ msgstr "Convolutie" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Kristalliseerder" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Vertraging" + +#~ msgid "Echo Canceller" +#~ msgstr "Echo-onderdrukking" + +#~ msgid "Equalizer" +#~ msgstr "Equalizer" + +#~ msgid "Exciter" +#~ msgstr "Exciter" + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Limiter" +#~ msgstr "Limiter" + +#~ msgid "Maximizer" +#~ msgstr "Maximizer" + +#~ msgid "Multiband Compressor" +#~ msgstr "Multiband-compressie" + +#~ msgid "Multiband Gate" +#~ msgstr "Multiband-dosering" + +#~ msgid "Pitch" +#~ msgstr "Toonhoogte" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Galm" + +#~ msgid "Noise Reduction" +#~ msgstr "Ruisverlaging" + +#~ msgid "Stereo Tools" +#~ msgstr "Stereobediening" + +#~ msgid "Average" +#~ msgstr "Gemiddeld" + +#~ msgid "Failed" +#~ msgstr "Mislukt" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Standaardinvoer gebruiken" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Verwijder dit voorinstellingsbestand" + +#~ msgid "Import Presets" +#~ msgstr "Importeer voorinstellingen" + +#~ msgid "Start Service at Login" +#~ msgstr "Automatisch opstarten" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Huidig model" + +#~ msgid "Add to Blocklist" +#~ msgstr "Toevoegen aan zwarte lijst" + +#~ msgid "Blocklist" +#~ msgstr "Zwarte lijst" + +#~ msgid "Add Plugin" +#~ msgstr "Plug-in toevoegen" + +#~ msgid "Speakers" +#~ msgstr "Luidsprekers" + +#~ msgid "Microphone" +#~ msgstr "Microfoon" + +#~ msgid "Plugins" +#~ msgstr "Plug-ins" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Inschakelen" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Inschakelen" + +#~ msgid "Format" +#~ msgstr "Formaat" + +#~ msgid "Latency" +#~ msgstr "Vertraging" + +#~ msgid "idle" +#~ msgstr "inactief" + +#~ msgid "Faster" +#~ msgstr "Sneller" + +#~ msgid "Preserve Formant" +#~ msgstr "Formaat behouden" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Player Name" +#~ msgstr "Spelernaam" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Uitvoerversterking" + +#~ msgid "Channel" +#~ msgstr "Kanaal" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Verdieping" + +#~ msgid "Output Effects" +#~ msgstr "Uitvoereffecten" + +#~ msgid "Settings" +#~ msgstr "Instellingen" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Instellingen" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Duur" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Signaal testen" + +#~ msgid "Signal" +#~ msgstr "Signaal" + +#~ msgid "Show Spectrum" +#~ msgstr "Spectrum tonen" + +#~ msgid "Border" +#~ msgstr "Rand" + +#~ msgid "Spectrum Type" +#~ msgstr "Soort spectrum" + +#~ msgid "Spectrum Color" +#~ msgstr "Spectrumkleur" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Huidig model" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Maximale versterkingsverlaging" + +#~ msgid "Wet" +#~ msgstr "Nat" + +#~ msgid "Dry" +#~ msgstr "Droog" + +#~ msgid "S/C Level" +#~ msgstr "S/C-niveau" + +#~ msgid "Phase Correlation" +#~ msgstr "Fasecorrelatie" + +#~ msgid "Short Term" +#~ msgstr "Korte termijn" + +#~ msgid "Id" +#~ msgstr "ID" + +#~ msgid "Low-pass" +#~ msgstr "Low-pass" + +#~ msgid "Run in Background" +#~ msgstr "Uitvoeren op achtergrond" + +#~ msgid "ceil" +#~ msgstr "ceil" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Regel het volume en schakel effecten in/uit" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Bevat een equalizer met meegeleverde voorinstellingen" + +#~ msgid "Input Limiter" +#~ msgstr "Invoerbeperking" + +#~ msgid "Calibration" +#~ msgstr "Kalibratie" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "Automatische afvlakking bedienen" + +#~ msgid "Limit" +#~ msgstr "Beperken" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Verzwakking" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Audio-effecten voor PulseAudio-toepassingen" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Audio-effecten voor PulseAudio-toepassingen" + +#~ msgid "Help" +#~ msgstr "Hulp" + +#~ msgid "Calibration Microphone" +#~ msgstr "Microfoon kalibreren" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Pas deze voorinstellingen automatisch toe zodra het huidige apparaat " +#~ "wordt aangekoppeld" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Versie" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Vierkant" + +#~ msgid "Saw" +#~ msgstr "Zaag" + +#~ msgid "Triangle" +#~ msgstr "Driehoek" + +#~ msgid "Silence" +#~ msgstr "Stilte" + +#~ msgid "Pink Noise" +#~ msgstr "Roze ruis" + +#~ msgid "Ticks" +#~ msgstr "Aantal tikken" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussiaanse ruis" + +#~ msgid "Red Noise" +#~ msgstr "Rode ruis" + +#~ msgid "Blue Noise" +#~ msgstr "Blauwe ruis" + +#~ msgid "Violet Noise" +#~ msgstr "Violet-ruis" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Window" +#~ msgstr "Venster" + +#~ msgid "Measure Noise" +#~ msgstr "Ruisniveau meten" + +#~ msgid "Subtract Noise" +#~ msgstr "Ruis verwijderen" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Provided by" +#~ msgstr "Geleverd door" + +#~ msgid "Extended Filter" +#~ msgstr "Uitgebreid filter" + +#~ msgid "Low" +#~ msgstr "Laag" + +#~ msgid "Moderate" +#~ msgstr "Gemiddeld" + +#~ msgid "High" +#~ msgstr "Hoog" + +#~ msgid "Suppression Level" +#~ msgstr "Onderdrukkingsniveau" + +#~ msgid "Delay Agnostic" +#~ msgstr "Agnostische vertraging" + +#~ msgid "Very High" +#~ msgstr "Erg hoog" + +#~ msgid "Noise Suppressor" +#~ msgstr "Ruisonderdrukking" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptief digitaal" + +#~ msgid "Fixed Digital" +#~ msgstr "Vastgesteld digitaal" + +#~ msgid "Gain Controller" +#~ msgstr "Versterkingsbediening" + +#~ msgid "Detection Likelihood" +#~ msgstr "Detectieniveau" + +#~ msgid "Very Low" +#~ msgstr "Erg laag" + +#~ msgid "Voice Detector" +#~ msgstr "Stemherkenning" + +#~ msgid "Use Custom Color" +#~ msgstr "Aangepaste kleur gebruiken" + +#~ msgid "Use Gradient" +#~ msgstr "Kleurverloop gebruiken" + +#~ msgid "Gradient Color" +#~ msgstr "Kleurverloop" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importeer een Impulse Response-bestand" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Kies een Impulse Response-bestand" + +#~ msgid "Aggressive Mode" +#~ msgstr "Agressieve modus" + +#~ msgid "Before" +#~ msgstr "Vóór" + +#~ msgid "After" +#~ msgstr "Na" + +#~ msgid "Loudness Range" +#~ msgstr "Bereik van geluidssterkte" + +#~ msgid "Loudness Compensator" +#~ msgstr "Geluidssterkte-compensatie" + +#~ msgid "Apply" +#~ msgstr "Toepassen" + +#~ msgid "Based on" +#~ msgstr "Gebaseerd op" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Standaard samplesnelheid" + +#~ msgid "Default Source" +#~ msgstr "Standaardbron" + +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgid "File" +#~ msgstr "Bestand" + +#~ msgid "Configuration" +#~ msgstr "Instellingen" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Based on a" +#~ msgstr "Gebaseerd op" + +#~ msgid "Low-pass Frequency" +#~ msgstr "Low-pass-frequentie" + +#~ msgid "Advanced" +#~ msgstr "Geavanceerd" + +#~ msgid "Apply APO Preset" +#~ msgstr "APO-voorinstelling toepassen" + +#~ msgid "Detect Silence" +#~ msgstr "Stilte herkennen" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Plug de microfoon opnieuw in om de wijzigingen aan de zwarte lijst toe te " +#~ "passen" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Herstart de speler om de wijzigingen aan de zwarte lijst toe te passen" + +#~ msgid "Muted" +#~ msgstr "Gedempt" + +#~ msgid "Distant Headphones" +#~ msgstr "Koptelefoons veraf" + +#~ msgid "Niceness" +#~ msgstr "Niceness" + +#~ msgid "Priority Type" +#~ msgstr "Soort prioriteit" + +#~ msgid "Priority" +#~ msgstr "Prioriteit" + +#~ msgid "About" +#~ msgstr "Over" + +#~ msgid "Protocol" +#~ msgstr "Protocol" + +#~ msgid "Default Sample Format" +#~ msgstr "Standaard sampleformaat" + +#~ msgid "Channel Mapping" +#~ msgstr "Kanaaltoewijzing" + +#~ msgid "Resamplers" +#~ msgstr "Hersamplers" + +#~ msgid "Pipeline Input" +#~ msgstr "Invoerpijplijn" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Pipeline Output" +#~ msgstr "Uitvoerpijplijn" + +#~ msgid "Block Size" +#~ msgstr "Blokgrootte" + +#~ msgid "Maximum Frequency" +#~ msgstr "Maximale frequentie" diff --git a/po/news/nn.po b/po/news/nn.po new file mode 100644 index 0000000..95538ee --- /dev/null +++ b/po/news/nn.po @@ -0,0 +1,960 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects-news package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects-news\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 14:20+0000\n" +"PO-Revision-Date: 2023-06-02 09:48+0000\n" +"Last-Translator: Daniel Svindseth \n" +"Language-Team: Norwegian Nynorsk \n" +"Language: nn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Lydeffektar for PipeWire-applikasjonar" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects er eit verktøy for avansert ljodmanipulering. Det inkluderer " +"mellom anna ein equalizer, ljodavgrensar, kompressor og etterklangsverktøy. " +"I tillegg har det innebygd spektrumsanalysator." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects er etterfølgjaren til PulseEffects. Easy Effects støttar berre " +"PipeWire sin ljodtjenar. PulseAudio-brukarar bør heller nytte PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Sidan Easy Effects nyttar den vanlege PipeWire ljodtjenaren vil det fungere " +"med nesten alle applikasjonar. Alle som er støtta vil visast i " +"hovudvindauget, der ein kan slå på kvar einskild individuelt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Utanom manipulering av utgongsljod kan Easy Effects leggje til effektar til " +"inngongseiningar, som t.d. ein mikrofon. Dette er nyttig til mellom anna " +"ljodopptak, men det fungerer òg bra for samtalar." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Når Easy Effects vert starta vil den hugse alle innstillingane frå førre " +"økt. Det er òg mogleg å lagre innstillingane som ulike profiler." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Hovudsida som viser to appar som spelar av ljod" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Bassforbetrar-sida som viser ljodkontrollar" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "Convolver-sida viser ljodkontrollar" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:127 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:143 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:201 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:214 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:224 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:293 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +msgid "Features:" +msgstr "Funksjonar:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" +"Førehandsinnstillings-menyen vil no spørje om stadfesting før ei " +"førehandsinnstillings-fil vert lagra/sletta." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:71 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:98 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:175 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:216 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:238 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:283 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:295 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:318 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:385 +msgid "Bug fixes:" +msgstr "Retta feil:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "Plugin-resett skal ikkje gjere kontrollane ubruklege lengre." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:60 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:85 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:162 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:254 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:270 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:61 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:62 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:70 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:72 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:84 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:86 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:99 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:111 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:112 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:113 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:114 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:115 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:116 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:128 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:129 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:130 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:176 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:177 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:178 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:215 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:217 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:225 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:226 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:227 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:228 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:239 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:255 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:256 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:271 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:284 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:285 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:286 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:294 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:296 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:297 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:298 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:315 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:316 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:317 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:319 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:320 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:332 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:333 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:334 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:335 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:336 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:337 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:362 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:363 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:382 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:383 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:384 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:386 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:400 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:401 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/pl.po b/po/news/pl.po new file mode 100644 index 0000000..ab77cde --- /dev/null +++ b/po/news/pl.po @@ -0,0 +1,2967 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the EasyEffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-07-15 14:05+0000\n" +"Last-Translator: Eryk Michalak \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efekty dźwiękowe dla aplikacji PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects to zaawansowane narzędzie do manipulacji dźwiękiem. Zawiera " +"między innymi korektor, limiter, kompresor i narzędzie do generowania " +"pogłosu. Uzupełnieniem tego jest wbudowany analizator widma." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects jest następcą PulseEffects. EasyEffects wspiera jedynie serwer " +"audio PipeWire. Użytkownicy PulseAudio powinni zamiast tego użyć " +"PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Ponieważ EasyEffects używa domyślnego serwera dźwięku PipeWire, będzie on " +"działał z większością, jeśli nie wszystkimi używanymi programami. Wszystkie " +"obsługiwane programy są prezentowane w oknie głównym, gdzie każdy z nich " +"może być aktywowany indywidualnie." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Oprócz sterowania wyjściem dźwiękowym, EasyEffects jest w stanie zastosować " +"efekty do urządzenia wejściowego, takiego jak mikrofon. Jest to przydatne na " +"przykład przy nagrywaniu dźwięku, ale sprawdza się również podczas rozmów " +"głosowych." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Po uruchomieniu programu EasyEffects zapamiętuje on konfigurację użytą " +"podczas ostatniej sesji. Możliwe jest także zapisanie wszystkich bieżących " +"ustawień w postaci profili." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Główna strona z widocznymi dwoma programami odtwarzającymi dźwięk" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Strona wzmacniacza basów z widocznymi elementami sterowania dźwiękiem" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "Strona konwolwera przedstawiająca elementy sterujące dźwiękiem" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Funkcje:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Poprawki błędów:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Inne uwagi:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Uaktualnione tłumaczenia" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Uaktualnione tłumaczenia" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Uaktualnione tłumaczenia" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +#, fuzzy +msgid "Improved translations" +msgstr "Uaktualnione tłumaczenia" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +#, fuzzy +msgid "Many translation updates" +msgstr "Uaktualnione tłumaczenia" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +#, fuzzy +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"Wtyczka automatycznej regulacji wzmocnienia umożliwia teraz użytkownikowi " +"wybór, która z trzech głośności jest używana do obliczania średniej" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +#, fuzzy +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"Wtyczka automatycznej regulacji wzmocnienia umożliwia teraz ustawienie " +"maksymalnej historii i nie używa już trybu histogramu `libebur128`." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"Ikona EasyEffects została uaktualniona w taki sposób, że powinna być " +"widoczna w pulpitach QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"Opcja wiersza poleceń, która zwraca stan globalnego obejścia, działa " +"ponownie." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Filtr krzyżowy powinien lepiej radzić sobie z dynamicznymi przełącznikami " +"opóźnień w systemie PipeWire. W takich sytuacjach nie powinny już występować " +"skoki poziomu głośności." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Naprawiono błąd, który uniemożliwiał prawidłowe działanie mikrofonów " +"monofonicznych z EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Wsparcie dla następnej wersji PipeWire `0.3.44`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Filtr automatycznej regulacji wzmocnienia powinien lepiej radzić sobie z " +"dynamicznymi przełącznikami opóźnień w systemie PipeWire. W takich " +"sytuacjach nie powinny już występować skoki poziomu głośności." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Dodaliśmy opcję, która umożliwia zresetowanie głośności i stanu wyciszenia " +"naszych urządzeń wirtualnych podczas uruchamiania EasyEffects. Powinno to " +"pomóc w przypadkach, gdy z nieznanych przyczyn nasze urządzenia są wyciszane " +"przez serwer audio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Lepsza obsługa uśpienia komputera." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#~ msgid "This release adds the following features:" +#~ msgstr "W tym wydaniu dodano następujące funkcje:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Pasma" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Wprowadzono nowe ustawienie umożliwiające użytkownikowi wybranie limitu " +#~ "czasu bezczynności dla odtwarzaczy. Jeśli żaden klient nie odtwarza " +#~ "dźwięku" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "do lub nagrywanych z naszych urządzeń, których filtry zostaną usunięte po " +#~ "upływie limitu czasu. Ma to na celu zapewnienie" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "" +#~ "tego, że nie będziemy marnować mocy procesora na przetwarzanie ciszy." + +#~ msgid "mean." +#~ msgstr "geometrycznej." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Powinno to zapobiec przypadkom, gdy `Zintegrowana` głośność utknie na " +#~ "zawsze w tej samej wartości." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "To wydanie poprawia następujący błąd:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "W tym wydaniu dodano następującą funkcję:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Korektor, kompresor i inne efekty audio" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limiter;kompresor;pogłos;korektor;autogłośność;" + +#, fuzzy +#~ msgid "\"Presets\"" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Włącz" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Ustawienia" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Gołe ściany" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Programy" + +#~ msgid "Target" +#~ msgstr "Cel" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Maksymalne wzmocnienie" + +#, fuzzy +#~ msgid "Reset History" +#~ msgstr "Resetuj jakość" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Wzmocnienie wej." + +#~ msgid "Input" +#~ msgstr "Wejście" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Wzmocnienie wej." + +#~ msgid "Output" +#~ msgstr "Wyjście" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Wzmocnienie wej." + +#~ msgid "Reset" +#~ msgstr "Zresetuj" + +#, fuzzy +#~ msgid "Device" +#~ msgstr "Urządzenie wejściowe" + +#~ msgid "Name" +#~ msgstr "Nazwa" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Kompresor" + +#~ msgid "Listen" +#~ msgstr "Słuchaj" + +# Wpleć/wmieszaj/dodaj +#~ msgid "Blend Harmonics" +#~ msgstr "Wprowadź harmoniczne" + +#~ msgid "3rd" +#~ msgstr "Trzecie" + +#~ msgid "2nd" +#~ msgstr "Drugie" + +#~ msgid "Amount" +#~ msgstr "Ilość" + +#~ msgid "Harmonics" +#~ msgstr "Harmoniczne" + +#~ msgid "Scope" +#~ msgstr "Zakres" + +#~ msgid "Floor" +#~ msgstr "Podłoga" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Podłoga" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Programy" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Programy" + +#~ msgid "Compressor" +#~ msgstr "Kompresor" + +#~ msgid "Mode" +#~ msgstr "Tryb" + +#, fuzzy +#~ msgid "Downward" +#~ msgstr "Dół" + +#, fuzzy +#~ msgid "Compression Mode" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Ilość" + +#~ msgid "Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Czas zaniku" + +#~ msgid "Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Próg" + +#~ msgid "Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Próg" + +#~ msgid "Ratio" +#~ msgstr "Stosunek" + +#~ msgid "Knee" +#~ msgstr "Kolano" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#~ msgid "Makeup" +#~ msgstr "Wzmocnienie" + +#~ msgid "Sidechain" +#~ msgstr "Łańcuch boczny" + +#~ msgid "Peak" +#~ msgstr "Szczyt" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#, fuzzy +#~ msgid "Low-Pass" +#~ msgstr "Dolnoprzepustowy" + +#~ msgid "Uniform" +#~ msgstr "Równomierny" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Łańcuch boczny" + +#~ msgid "Source" +#~ msgstr "Źródło" + +#, fuzzy +#~ msgid "Middle" +#~ msgstr "Środek" + +#~ msgid "Side" +#~ msgstr "Strona" + +#~ msgid "Left" +#~ msgstr "Lewy" + +#~ msgid "Right" +#~ msgstr "Prawy" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Łańcuch boczny" + +# Wejście? +#, fuzzy +#~ msgid "Feed-back" +#~ msgstr "Feed" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Łańcuch boczny" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Urządzenie wejściowe" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Programy" + +#~ msgid "Reactivity" +#~ msgstr "Reaktywność" + +# Podgląd, albo "patrz w przód", zapas +#~ msgid "Lookahead" +#~ msgstr "Lookahead" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Łańcuch boczny" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Filtr górnoprzepustowy" + +#~ msgid "Frequency" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "12 dB/oct" +#~ msgstr "12dB/okt dolnoprzepustowy" + +#, fuzzy +#~ msgid "24 dB/oct" +#~ msgstr "24dB/okt dolnoprzepustowy" + +#, fuzzy +#~ msgid "36 dB/oct" +#~ msgstr "36dB/okt dolnoprzepustowy" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Filtr górnoprzepustowy" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Tłumienie wysokich tonów" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Filtr górnoprzepustowy" + +#~ msgid "Gain" +#~ msgstr "Wzmocnienie" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Kanały" + +#~ msgid "R" +#~ msgstr "P" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Płaska odpowiedź" + +#, fuzzy +#~ msgid "Stereo Width" +#~ msgstr "Powiązanie stereo" + +#~ msgid "Spectrum" +#~ msgstr "Widmo" + +#~ msgid "Autogain" +#~ msgstr "Autowzmocnienie" + +# Próbkowanie? +#~ msgid "Rate" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Samples" +#~ msgstr "Resampler" + +#, fuzzy +#~ msgid "Duration" +#~ msgstr "Kalibracja" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Płaska odpowiedź" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Wyjście" + +#, fuzzy +#~ msgid "Import Impulse" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Płaska odpowiedź" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Płaska odpowiedź" + +#~ msgid "Default" +#~ msgstr "Domyślne" + +#~ msgid "Cutoff" +#~ msgstr "Odcięcie" + +# Wejście? +#~ msgid "Feed" +#~ msgstr "Feed" + +#~ msgid "Mute" +#~ msgstr "Wycisz" + +#~ msgid "Detection" +#~ msgstr "Wykrycie" + +#~ msgid "Wide" +#~ msgstr "Szeroki" + +#~ msgid "Split" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Szczyt" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Wzmocnienie" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Poziom" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Szczyt Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Częstotliwość" + +#~ msgid "Laxity" +#~ msgstr "Swoboda" + +#~ msgid "Detected" +#~ msgstr "Wykryto" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Redukcja" + +#~ msgid "Frame Size" +#~ msgstr "Rozmiar ramki" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filtr" + +#~ msgid "Bands" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Split Channels" +#~ msgstr "Kanały" + +#~ msgid "Flat Response" +#~ msgstr "Płaska odpowiedź" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Przelicz częstotliwości" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "High Pass" +#~ msgstr "Filtr górnoprzepustowy" + +#~ msgid "High Shelf" +#~ msgstr "Górna wartość" + +#, fuzzy +#~ msgid "Low Pass" +#~ msgstr "Dolnoprzepustowy" + +#~ msgid "Low Shelf" +#~ msgstr "Dolna Wartość" + +#~ msgid "Resonance" +#~ msgstr "Rezonans" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Dolnoprzepustowy" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pasma" + +#~ msgid "Width" +#~ msgstr "Szerokość" + +#~ msgid "Quality" +#~ msgstr "Jakość" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Sufit" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Wykrycie" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Kompresor" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/okt dolnoprzepustowy" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/okt dolnoprzepustowy" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/okt dolnoprzepustowy" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/okt górnoprzepustowy" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/okt górnoprzepustowy" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/okt górnoprzepustowy" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/okt środkowoprzepustowy" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/okt środkowoprzepustowy" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/okt środkowoprzepustowy" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/okt Środkowozaporowy" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/okt środkowozaporowy" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/okt środkowozaporowy" + +#~ msgid "Inertia" +#~ msgstr "Inercja" + +#~ msgid "Gate" +#~ msgstr "Bramka" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Wyzwolenie" + +#~ msgid "Oversampling" +#~ msgstr "Nadpróbkowanie" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Szeroki" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Szeroki" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Szerokość" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Szerokość" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Szerokość" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Programy" + +#~ msgid "Stereo Link" +#~ msgstr "Powiązanie stereo" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Łańcuch boczny" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Lewy" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Prawy" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Łańcuch boczny" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Łańcuch boczny" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Rozmiar ramki" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Wyjście" + +#~ msgid "Ceiling" +#~ msgstr "Sufit" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Tryb" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Łańcuch boczny" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Łańcuch boczny" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtr" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Filtr" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtr górnoprzepustowy" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Filtr górnoprzepustowy" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split 1/2" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Split 2/3" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Split 3/4" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Sub Band" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Wzmocnienie" + +#~ msgid "Max Reduction" +#~ msgstr "Redukcja" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Low Band" +#~ msgstr "Dolnoprzepustowy" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Wzmocnienie" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Mid Band" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Wzmocnienie" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "High Band" +#~ msgstr "Górnoprzepustowy" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Wzmocnienie" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#~ msgid "General" +#~ msgstr "Ogólne" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Użyj domyślnych" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Urządzenie wejściowe" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Użyj domyślnych" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Pogłos" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Nadpróbkowanie" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Maksymalne wzmocnienie" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Domyślne" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Profile: " + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Profile: " + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Urządzenie wejściowe" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Clients" +#~ msgstr "Centy" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Centy" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Sygnały testowe" + +#~ msgid "State" +#~ msgstr "Stan" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Włącz" + +#~ msgid "Channels" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Sinus tabl." + +#~ msgid "White Noise" +#~ msgstr "Biały szum" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Górna wartość" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Jakość" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Czystość" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Wykrycie" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresor" + +#~ msgid "Cents" +#~ msgstr "Centy" + +#~ msgid "Semitones" +#~ msgstr "Półtony" + +#~ msgid "Octaves" +#~ msgstr "Oktawy" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Efekty wejściowe" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "Ogólne" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Urządzenie wejściowe" + +#~ msgid "Use Dark Theme" +#~ msgstr "Używaj ciemnego motywu" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Widmo" + +#~ msgid "Points" +#~ msgstr "Punkty" + +#~ msgid "Height" +#~ msgstr "Wysokość" + +#, fuzzy +#~ msgid "Line Width" +#~ msgstr "Szerokość" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Maksimum" + +#~ msgid "Maximum" +#~ msgstr "Maksimum" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Profile: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Utwórz profil" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Profile: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Profile: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Importuj profile" + +#~ msgid "High Frequency Damping" +#~ msgstr "Tłumienie wysokich tonów" + +#~ msgid "Room Size" +#~ msgstr "Rozmiar pomieszczenia" + +#~ msgid "Small" +#~ msgstr "Mały" + +#~ msgid "Medium" +#~ msgstr "Średni" + +#~ msgid "Large" +#~ msgstr "Duży" + +#~ msgid "Tunnel" +#~ msgstr "Tunel" + +#~ msgid "Large/smooth" +#~ msgstr "Duży/gładki" + +#~ msgid "Experimental" +#~ msgstr "Experymentalne" + +#~ msgid "Diffusion" +#~ msgstr "Rozproszenie" + +#~ msgid "Pre Delay" +#~ msgstr "Przedopóźnienie" + +#~ msgid "Decay Time" +#~ msgstr "Czas zaniku" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Ilość" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Poziom docelowy" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Ilość" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Poziom" + +#~ msgid "Bass Cut" +#~ msgstr "Odcięcie basu" + +#~ msgid "Treble Cut" +#~ msgstr "Odcięcie sopranu" + +#~ msgid "Ambience" +#~ msgstr "Otoczenie" + +#~ msgid "Empty Walls" +#~ msgstr "Gołe ściany" + +#~ msgid "Room" +#~ msgstr "Pokój" + +#~ msgid "Large Empty Hall" +#~ msgstr "Duża pusta sala" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Duża pełna sala" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Models" +#~ msgstr "Tryb" + +#, fuzzy +#~ msgid "Active Model" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Overview" +#~ msgstr "Urządzenie wejściowe" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balans" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Balans" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Poziom" + +#, fuzzy +#~ msgid "Stereo Matrix" +#~ msgstr "Powiązanie stereo" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Wzmacniacz stereo" + +#~ msgid "Invert Phase" +#~ msgstr "Odwróć fazę" + +#, fuzzy +#~ msgid "Side Level" +#~ msgstr "Poziom" + +#, fuzzy +#~ msgid "Side Balance" +#~ msgstr "Balans" + +#, fuzzy +#~ msgid "Middle Level" +#~ msgstr "Środek" + +#, fuzzy +#~ msgid "Middle Panorama" +#~ msgstr "Panorama" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Delay L/R" +#~ msgstr "Opóźnienie" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Opóźnienie" + +#, fuzzy +#~ msgid "Stereo Base" +#~ msgstr "Wzmacniacz stereo" + +#, fuzzy +#~ msgid "Stereo Phase" +#~ msgstr "Wzmacniacz stereo" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "Ustawienia" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "nieznany" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Output Presets: " +#~ msgstr "Presety wyjściowe: " + +#, fuzzy +#~ msgid "Input Presets: " +#~ msgstr "Presety wejściowe: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efekty dźwiękowe dla aplikacji PipeWire" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Wyłącz EasyEffects. Przydatne przy pracy w trybie usługi." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Załaduj profil. Przykład: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Resetuj EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Schowaj okno." + +#~ msgid "Show available presets." +#~ msgstr "Pokaż dostępne profile." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Płaska odpowiedź" + +#~ msgid "Import Impulse File" +#~ msgstr "Importuj plik Impulse" + +#~ msgid "Open" +#~ msgstr "Otwórz" + +#~ msgid "Cancel" +#~ msgstr "Anuluj" + +#, fuzzy +#~ msgid "Impulse Response" +#~ msgstr "Płaska odpowiedź" + +#~ msgid "Load Impulse" +#~ msgstr "Wczytaj Impuls" + +#~ msgid "Remove Impulse" +#~ msgstr "Usuń Impuls" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Płaska odpowiedź" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Nie można załadować pliku Impulse" + +#~ msgid "Recorders" +#~ msgstr "Rejestratory" + +#~ msgid "Players" +#~ msgstr "Odtwarzacze" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "nieskończoność" + +#~ msgid "Import APO Preset File" +#~ msgstr "Importuj plik profilu APO" + +#~ msgid "APO Presets" +#~ msgstr "Profile APO" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Wzmocnienie wej." + +#~ msgid "Add" +#~ msgstr "Dodaj" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Modele RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Wzmacniacz basów" + +#~ msgid "Bass Loudness" +#~ msgstr "Głośność basu" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Krystalizator" + +#~ msgid "Deesser" +#~ msgstr "De-Esser" + +#~ msgid "Delay" +#~ msgstr "Opóźnienie" + +#~ msgid "Echo Canceller" +#~ msgstr "Usuwanie echa" + +#~ msgid "Equalizer" +#~ msgstr "Korektor" + +#~ msgid "Exciter" +#~ msgstr "Exciter" + +#~ msgid "Filter" +#~ msgstr "Filtr" + +#~ msgid "Limiter" +#~ msgstr "Limiter" + +#~ msgid "Maximizer" +#~ msgstr "Maximizer" + +#, fuzzy +#~ msgid "Multiband Compressor" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Multiband Gate" +#~ msgstr "Kompresor" + +#~ msgid "Pitch" +#~ msgstr "Wysokość" + +#~ msgid "Reverberation" +#~ msgstr "Pogłos" + +#~ msgid "Noise Reduction" +#~ msgstr "Redukcja szumu" + +#~ msgid "Stereo Tools" +#~ msgstr "Narzędzia stereo" + +#~ msgid "Average" +#~ msgstr "Średnia" + +#~ msgid "Failed" +#~ msgstr "Niepowodzenie" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Użyj domyślnych" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Kompresor" + +#~ msgid "Import Presets" +#~ msgstr "Importuj profile" + +#~ msgid "Start Service at Login" +#~ msgstr "Uruchom usługę przy logowaniu" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibracja mikrofonu" + +#~ msgid "Plugins" +#~ msgstr "Wtyczki" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Włącz" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Włącz" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Oczekiwanie" + +#~ msgid "Faster" +#~ msgstr "Szybszy" + +#~ msgid "Preserve Formant" +#~ msgstr "Zachowaj formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Podłoga" + +#~ msgid "Output Effects" +#~ msgstr "Efekty wyjściowe" + +#~ msgid "Settings" +#~ msgstr "Ustawienia" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Ustawienia" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Kalibracja" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Sygnały testowe" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Sygnały testowe" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Widmo" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Widmo" + +#~ msgid "Spectrum Color" +#~ msgstr "Kolor widma" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Wysokość" + +#~ msgid "Dry" +#~ msgstr "Suchy" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "Poziom" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Dolnoprzepustowy" + +#~ msgid "Input Limiter" +#~ msgstr "Limiter wejścia" + +#~ msgid "Calibration" +#~ msgstr "Kalibracja" + +#~ msgid "Limit" +#~ msgstr "Limit" + +#~ msgid "ASC" +#~ msgstr "ASC" + +# Tłumienie? +#~ msgid "Attenuation" +#~ msgstr "Tłumienie" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Efekty dźwiękowe dla programu Pulseaudio" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Efekty dźwiękowe dla programu Pulseaudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibracja mikrofonu" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Prostokąt" + +#~ msgid "Saw" +#~ msgstr "Piła" + +#~ msgid "Triangle" +#~ msgstr "Trójkąt" + +#~ msgid "Silence" +#~ msgstr "Cisza" + +#~ msgid "Pink Noise" +#~ msgstr "Różowy szum" + +# tyknięcia, kliknięcia +#~ msgid "Ticks" +#~ msgstr "Działki" + +#~ msgid "Gaussian Noise" +#~ msgstr "Szum Gaussa" + +#~ msgid "Red Noise" +#~ msgstr "Szum czerwony" + +#~ msgid "Blue Noise" +#~ msgstr "Szum niebieski" + +#~ msgid "Violet Noise" +#~ msgstr " Szum fioletowy" + +#~ msgid "Volume" +#~ msgstr "Głośność" + +#~ msgid "Window" +#~ msgstr "Okno" + +#~ msgid "Measure Noise" +#~ msgstr "Mierz szum" + +#~ msgid "Subtract Noise" +#~ msgstr "Odejmij szum" + +#~ msgid "Extended Filter" +#~ msgstr "Rozszerzony Filtr" + +#~ msgid "Low" +#~ msgstr "Nisko" + +#~ msgid "Moderate" +#~ msgstr "Średni" + +#~ msgid "High" +#~ msgstr "Wysoki" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Poziom tłumienia" + +#~ msgid "Delay Agnostic" +#~ msgstr "Niezależny od opóźnienia" + +#~ msgid "Very High" +#~ msgstr "Bardzo wysokie" + +#~ msgid "Noise Suppressor" +#~ msgstr "Tłumienie szumu" + +#~ msgid "Adaptive Digital" +#~ msgstr "Cyfrowy adaptacyjny" + +#~ msgid "Fixed Digital" +#~ msgstr "Cyfrowy ustalony" + +#~ msgid "Gain Controller" +#~ msgstr "Kontroler wzmocnienia" + +#~ msgid "Detection Likelihood" +#~ msgstr "Szansa wykrycia" + +#~ msgid "Very Low" +#~ msgstr "Bardzo niskie" + +#~ msgid "Voice Detector" +#~ msgstr "Wykrywanie głosu" + +#~ msgid "Use Custom Color" +#~ msgstr "Użyj własnego koloru" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Domyślne" + +#, fuzzy +#~ msgid "Default Source" +#~ msgstr "Domyślne" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Kalibracja" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Przelicz częstotliwości" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Ustawienia zaawansowane" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Wykrycie" + +#~ msgid "Muted" +#~ msgstr "Wyciszony" + +#~ msgid "Distant Headphones" +#~ msgstr "Odległe słuchawki" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Channel Mapping" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Resampler" + +#~ msgid "Buffer" +#~ msgstr "Bufor" + +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Rozmiar pomieszczenia" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#~ msgid "paused" +#~ msgstr "zatrzymany" + +#~ msgid "playing" +#~ msgstr "gra" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Redukcja wzmocnienia" diff --git a/po/news/pt.po b/po/news/pt.po new file mode 100644 index 0000000..adbc535 --- /dev/null +++ b/po/news/pt.po @@ -0,0 +1,859 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects-news package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects-news\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-18 00:15+0000\n" +"PO-Revision-Date: 2023-01-11 02:51+0000\n" +"Last-Translator: ssantos \n" +"Language-Team: Portuguese \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.15.1-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Audio Effects para aplicações PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects é uma ferramenta avançada de manipulação de áudio. Algumas de " +"suas funcionalidades são: equalizador, limitador, compressor e uma " +"ferramenta de reverberação. Para complementar também existe um analisador de " +"expectro integrado." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"O Easy Effects é o sucessor do PulseEffects. O Easy Effects suporta apenas o " +"servidor de áudio PipeWire. Os usuários do PulseAudio devem usar o " +"PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Devido ao fato que o Easy Effects usa por padrão o servidor de som Pipewire, " +"a maioria das aplicações - senão todas - irão funcionar. Todas as aplicações " +"compatíveis são exibidas na tela principal, onde podem ser habilitadas " +"individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Além de manipular a saída de som, Easy Effects também é capaz de aplicar " +"efeitos em um dispositivo de entrada, como um microfone, sendo útil - por " +"exemplo - na gravação de áudio e também funciona bem durante chamadas de voz." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Easy Effects irá convenientemente carregar a configuração da última sessão " +"quando iniciado. Também é possível salvar toda a configuração atual como um " +"perfil." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:23 +msgid "The main page showing two audio output apps" +msgstr "A página inicial mostrando duas aplicações reproduzindo audio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:27 +msgid "The bass enhancer page showing audio controls" +msgstr "A página do aprimoramento de graves a mostrar controles de áudio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:31 +msgid "The convolver page showing audio controls" +msgstr "A página de convolução a mostrar os controles de áudio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:39 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:55 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:113 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:126 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:175 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:217 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:225 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:243 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:41 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:42 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:43 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:45 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:46 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:141 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +msgid "Updated translations" +msgstr "Traduções atualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:47 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:71 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:87 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:128 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:142 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:150 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:164 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:179 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:284 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:297 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:74 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:166 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:70 +msgid "" +"The SideChain Gate plugin from `Linux Studio Plugins` is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:72 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:73 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:84 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:85 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:86 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:88 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:89 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:98 +msgid "The interface of the pitch plugin was improved" +msgstr "A interface do plugin de tom foi melhorada" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:99 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "O ícone da nossa aplicação é agora compatível com ambientes que usam QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:100 +msgid "" +"Our blocklist code will use the `application.id` tag if the stream sets it" +msgstr "" +"Nosso código de lista de bloqueio usará a tag `application.id` se o fluxo a " +"definir" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:101 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our `Players/Recorders` tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:102 +msgid "" +"When no application is available for display in the `Players/Recorders` a " +"message will be shown to the user" +msgstr "" +"Quando nenhuma aplicação estiver disponível para exibição em `Reprodutores/" +"Gravadores` uma mensagem será mostrada ao utilizador" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:103 +msgid "Many translation updates" +msgstr "Muitas atualizações de tradução" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"O valor de latência do pipeline exibido em nossa janela pode estar errado em " +"algumas situações. Isso foi corrigido." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:114 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:115 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:116 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use `libebur128` histogram mode anymore. This should avoid the cases where " +"the `Integrated` loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"O ícone do EasyEffects foi atualizado de uma forma que deve torná-lo visível " +"nos desktops QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"A opção de linha de comando que retorna o estado de desvio global está " +"funcionando novamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:127 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"O filtro de alimentação cruzada deve lidar melhor com os interruptores de " +"latência dinâmica PipeWire's. Os saltos no nível de volume não devem mais " +"acontecer nestas situações." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:129 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Corrigido um bug que impedia que os microfones mono funcionassem " +"corretamente com o EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "Support for the next PipeWire release `0.3.44`" +msgstr "Suporte à próxima versão do PipeWire `0.3.44`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:138 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"O filtro de ganho automático deve lidar melhor com as opções de latência " +"dinâmica do PipeWire. Saltos no nível de volume não devem mais acontecer " +"nessas situações." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:139 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Adicionamos uma opção que permite os estados de volume e mudo de nossos " +"aparelhos virtuais serem reiniciados quando EasyEffects inicia. Isto deve " +"ajudar nos casos em que nossos aparelhos são silenciados pelo servidor de " +"áudio por razões desconhecidas." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:140 +msgid "Better support for computer suspending." +msgstr "Melhor suporte para suspensão do computador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:143 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Corrigido um bug em que tentar criar um perfil de carregamento automático " +"sem ter predefinições causava o travamento da aplicação." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:151 +msgid "" +"Fixed a bug where setting a equalizer band `quality` to `zero` would lead to " +"an application crash." +msgstr "" +"Corrigido um bug em que definir uma banda de equalizador `qualidade` para " +"`zero` levaria a uma falha da aplicação." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita é usado para criar algumas partes de nossa janela e para lidar " +"com a alternância entre temas claros e escuros." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "O menu de configurações foi redesenhado usando widgets LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:162 +msgid "" +"The `Reset All Settings` function in our menu should work in Flatpak now." +msgstr "" +"A função `Redefinir todas as configurações` em nosso menu deve funcionar no " +"Flatpak agora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:163 +msgid "" +"We have a new option that allows the user to disable our menus `autohide`. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Temos uma nova opção que permite ao utilizador desativar nossos menus `auto-" +"ocultar`. Isso pode ajudar a solucionar alguns bugs que os menus popover têm " +"atualmente no gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:165 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Análise mais robusta para importar predefinições de APO salvas com vírgula " +"como separador de milhares na banda de frequência central." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:167 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"A biblioteca fmt é uma nova dependência, pelo menos enquanto os compiladores " +"c++ não implementarem os seus recursos. A expectativa é que isso aconteça " +"nos próximos anos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM e GLIBMM não são mais uma dependência. Agora usamos gtk4 diretamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:176 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Agora é possível combinar respostas de impulso na interface Convolução. Um " +"novo ficheiro de impulso é gerado e deve estar visível na lista de impulsos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:177 +msgid "" +"Improved `x axis` drawings in our plots. Now the number of labels is " +"adjusted dynamically depending on our window width." +msgstr "" +"Aprimorados os desenhos de `eixo x` aprimorados em nossas plotagens. Agora a " +"quantidade de rótulos é ajustada dinamicamente dependendo da largura da " +"nossa janela." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:178 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"A documentação foi atualizada refletindo os novos recursos do EasyEffects. " +"Referências antigas sobre PulseEffects foram removidas. O botão de " +"documentação foi adicionado na secção de menu." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:180 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Quando um botão giratório é preenchido com um valor fora do intervalo, agora " +"ele é atualizado com o valor mais baixo/mais alto em vez de redefinir para o " +"anterior." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"A janela da aplicação agora lembra-se do estado maximizado e restaura-o no " +"próximo evento de abertura." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "The `tbb` library is a new dependency" +msgstr "A biblioteca `tbb` é uma nova dependência" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Os plugins limitador e compressor multibanda agora podem usar uma cadeia " +"lateral externa opcional." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"O plugin Ganho Automático agora permite que o utilizador selecione qual " +"volume que é utilizado como referência para a correção do volume." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "O Volume Cúbico opcional pode ser ativado em Configurações Gerais." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:196 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:197 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:198 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "Impediu um caso em que o Spectrum estava travando." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"O Pavucontrol não é mais adicionado à lista de aplicações de entrada em " +"sistemas com localização diferente do inglês." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:226 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:227 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:228 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "Added support for the compressor parameter `Boost Amount`" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:254 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:255 +msgid "" +"When adding more equalizer bands they are set to `Bell` instead of `Off`." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:256 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:257 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:258 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:270 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:271 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:272 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:273 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:274 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:275 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:283 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:285 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:293 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:294 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:295 +msgid "We now support the LSP compressor `Boosting` mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:296 +msgid "" +"When `split-channels` is enabled in the equalizer the imported APO preset " +"will be applied only to the channel being visualized in the window. This " +"will allow to import different presets for each channel instead of just " +"settings the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:298 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:307 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:308 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"`EasyEffects`" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:309 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:310 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:311 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:312 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/pt_BR.po b/po/news/pt_BR.po new file mode 100644 index 0000000..562d34d --- /dev/null +++ b/po/news/pt_BR.po @@ -0,0 +1,3353 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# Wellington Wallace Miguel Melo , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.0-dev\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efeitos de áudio para aplicativos que utilizam PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects é uma ferramenta avançada de edição de áudio. Ele inclui " +"equalizador, limitador, compressor e um plugin de reverberação. Estas " +"ferramentas são complementadas por um analisador de espectro." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects é o sucessor do PulseEffects. EasyEffects suporta apenas o " +"PipeWire como servidor de áudio. Os usuários do PulseAudio devem usar o " +"PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Como o EasyEffects usa o servidor de som PipeWire, ele funcionará com a " +"maioria, se não todos os aplicativos que você usa. Todos os aplicativos " +"suportados são apresentados na janela principal, onde cada um pode ser " +"ativado individualmente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Além de manipular a saída de som, o EasyEffects é capaz de aplicar efeitos a " +"um dispositivo de entrada, como um microfone. Isso é, por exemplo, útil na " +"gravação de áudio, mas também funciona bem durante conversas de voz." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Quando o EasyEffects for iniciado, ele lembrará convenientemente a " +"configuração usada na última sessão. Também é possível salvar todas as " +"configurações atuais como perfis." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "A página principal mostrando dois aplicativos de saída de áudio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "A página do aprimoramento de graves mostrando controles de áudio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "A página de convolução mostrando os controles de áudio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Traduções atualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Traduções atualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Traduções atualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +#, fuzzy +msgid "Improved translations" +msgstr "Traduções atualizadas" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "A interface do plugin de tom foi melhorada" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" +"O ícone do nosso aplicativo é agora compatível com ambientes que usam QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +#, fuzzy +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"Nosso código de lista de bloqueio usará a tag `application.id` se o fluxo a " +"definir" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +#, fuzzy +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Para evitar problemas com mouse, role as entradas na lista de aplicativos " +"mostrada em nossos `Reprodutores/Gravadores`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +#, fuzzy +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Quando nenhum aplicativo estiver disponível para exibição em `Reprodutores/" +"Gravadores` uma mensagem será mostrada ao usuário" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Muitas atualizações de tradução" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +#, fuzzy +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"Corrigido um bug em que o EasyEffects travava quando o número de pontos " +"exibidos no espectro era alterado enquanto" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"O valor de latência do pipeline exibido em nossa janela pode estar errado em " +"algumas situações. Isso foi corrigido." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +#, fuzzy +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"O plugin de ganho automático agora permite que o usuário selecione quais dos " +"três tipos de sonoridade são usados para calcular a" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +#, fuzzy +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"O plugin de ganho automático agora permite que o histórico máximo seja " +"definido e não usa mais o modo de histograma `libebur128`." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"O ícone do EasyEffects foi atualizado de uma forma que deve torná-lo visível " +"nos desktops QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"A opção de linha de comando que retorna o estado de desvio global está " +"funcionando novamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"O filtro de alimentação cruzada deve lidar melhor com os interruptores de " +"latência dinâmica PipeWire's. Os saltos no nível de volume não devem mais " +"acontecer nestas situações." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Corrigido um bug que impedia que os microfones mono funcionassem " +"corretamente com o EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +#, fuzzy +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Suporte à próxima versão do PipeWire `0.3.44`" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"O filtro de ganho automático deve lidar melhor com as opções de latência " +"dinâmica do PipeWire. Saltos no nível de volume não devem mais acontecer " +"nessas situações." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Adicionamos uma opção que permite os estados de volume e mudo de nossos " +"dispositivos virtuais serem reiniciados quando EasyEffects inicia. Isto deve " +"ajudar nos casos em que nossos dispositivos são silenciados pelo servidor de " +"áudio por razões desconhecidas." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Melhor suporte para suspensão do computador." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Corrigido um bug em que tentar criar um perfil de carregamento automático " +"sem ter predefinições causava o travamento do aplicativo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +#, fuzzy +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"Corrigido um bug em que definir uma banda de equalizador `qualidade` para " +"`zero` levaria a uma falha do aplicativo." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita é usado para criar algumas partes de nossa janela e para lidar " +"com a alternância entre temas claros e escuros." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "O menu de configurações foi redesenhado usando widgets LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +#, fuzzy +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"O recurso de importação predefinida do equalizador APO foi aprimorado para " +"aplicar não apenas o filtro Bell, mas também outros suportados" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +#, fuzzy +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"A função `Redefinir todas as configurações` em nosso menu deve funcionar no " +"Flatpak agora." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +#, fuzzy +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Temos uma nova opção que permite ao usuário desabilitar nossos menus `auto-" +"ocultar`. Isso pode ajudar a solucionar alguns bugs que os menus popover têm " +"atualmente no gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Análise mais robusta para importar predefinições de APO salvas com vírgula " +"como separador de milhares na banda de frequência central." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"A biblioteca fmt é uma nova dependência, pelo menos enquanto os compiladores " +"c++ não implementarem seus recursos. A expectativa é que isso aconteça nos " +"próximos anos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM e GLIBMM não são mais uma dependência. Agora usamos gtk4 diretamente." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Agora é possível combinar respostas de impulso na interface Convolução. Um " +"novo arquivo de impulso é gerado e deve estar visível na lista de impulsos." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +#, fuzzy +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"Aprimorados os desenhos de `eixo x` aprimorados em nossas plotagens. Agora o " +"número de rótulos é ajustado dinamicamente dependendo da largura da nossa " +"janela." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"A documentação foi atualizada refletindo os novos recursos do EasyEffects. " +"Referências antigas sobre PulseEffects foram removidas. O botão de " +"documentação foi adicionado na seção de menu." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Quando um botão giratório é preenchido com um valor fora do intervalo, agora " +"ele é atualizado com o valor mais baixo/mais alto em vez de redefinir para o " +"anterior." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"A janela do aplicativo agora lembra o estado maximizado e o restaura no " +"próximo evento de abertura." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +#, fuzzy +msgid "The tbb library is a new dependency" +msgstr "A biblioteca `tbb` é uma nova dependência" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Os plugins limitador e compressor multibanda agora podem usar uma cadeia " +"lateral externa opcional." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"O plugin Ganho Automático agora permite que o usuário selecione qual volume " +"que é utilizado como referência para a correção do volume." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "O Volume Cúbico opcional pode ser ativado em Configurações Gerais." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "Impediu um caso em que o Spectrum estava travando." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"O Pavucontrol não é mais adicionado à lista de aplicativos de entrada em " +"sistemas com localização diferente do inglês." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +#, fuzzy +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"O menu de resposta ao impulso de convolução foi aprimorado para solucionar " +"um problema em que os arquivos de impulso não eram carregados quando apenas " +"um estava disponível no menu" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta versão adiciona os seguintes recursos:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Este lançamento corrige os seguintes bugs:" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "Tab não mostram mais uma escala de volume. Mais detalhes sobre o problema " +#~ "e a solução para ele podem ser encontrados em #1211" + +#~ msgid "and #1427" +#~ msgstr "e #1427" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "nosso pipeline estava ativo e o widget de espectro estava visível" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Há uma nova configuração que permite ao usuário selecionar um tempo " +#~ "limite de inatividade para o pipeline. Quando nenhum cliente está " +#~ "reproduzindo" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "ou gravando de nossos dispositivos, os filtros serão desconectados após o " +#~ "tempo limite ser alcançado. Isso é feito para garantir que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "não desperdiçamos energia da CPU processando silêncio." + +#~ msgid "mean." +#~ msgstr "média geométrica." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Isto deve evitar os casos em que o ruído \"Integrado\" fica preso para " +#~ "sempre no mesmo valor." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta versão corrige o seguinte bug:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esse lançamento adiciona o seguinte recurso:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Equalizador, Compressor e Outros Efeitos de Áudio" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limitador;compressor;reverberação;equalizador;autovolume;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Predefinições\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Habilitar" + +#~ msgid "Exclude" +#~ msgstr "Excluir" + +#~ msgid "Mute Application" +#~ msgstr "Silenciar o Aplicativo" + +#~ msgid "Application Volume" +#~ msgstr "Volume do Aplicativo" + +#~ msgid "_Preferences" +#~ msgstr "_Preferências" + +#~ msgid "_Manual" +#~ msgstr "_Manual" + +#~ msgid "_Shortcuts" +#~ msgstr "_Atalhos" + +#~ msgid "_Reset Settings" +#~ msgstr "_Redefinir as Configurações" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Sobre EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Predefinições" + +#~ msgid "Presets Menu" +#~ msgstr "Menu de Predefinições" + +#~ msgid "Global Bypass" +#~ msgstr "Bypass Global" + +#~ msgid "Primary Menu" +#~ msgstr "Menu Principal" + +#~ msgid "EasyEffects Window" +#~ msgstr "Janela do EasyEffects" + +#~ msgid "Applications List" +#~ msgstr "Lista de Aplicativos" + +#~ msgid "Empty List" +#~ msgstr "Lista vazia" + +#~ msgid "No Audio Application Available" +#~ msgstr "Nenhum aplicativo de áudio disponível" + +#~ msgid "Target" +#~ msgstr "Alvo" + +#~ msgid "Maximum History" +#~ msgstr "Histórico máximo" + +#~ msgid "Reference" +#~ msgstr "Referência" + +#~ msgid "Momentary" +#~ msgstr "Momentâneo" + +#~ msgid "Short-Term" +#~ msgstr "Curto Prazo" + +#~ msgid "Integrated" +#~ msgstr "Integrada" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Média Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Média Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Média Geométrica" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Média Geométrica" + +#~ msgid "Reset History" +#~ msgstr "Redefinir Histórico" + +#~ msgid "Relative" +#~ msgstr "Relativo" + +#~ msgid "Range" +#~ msgstr "Alcance" + +#~ msgid "Loudness" +#~ msgstr "Sonoridade" + +#~ msgid "Output Gain" +#~ msgstr "Ganho de Saída" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Ganho de Entrada do Plugin" + +#~ msgid "Output" +#~ msgstr "Saída" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Ganho de Saída do Plugin" + +#~ msgid "Reset" +#~ msgstr "Resetar" + +#~ msgid "Using" +#~ msgstr "Usando" + +#~ msgid "Device" +#~ msgstr "Dispositivo" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "Profile" +#~ msgstr "Perfil" + +#~ msgid "Preset" +#~ msgstr "Predefinição" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Remover este arquivo de predefinição" + +#~ msgid "Listen" +#~ msgstr "Escutar" + +#~ msgid "Blend Harmonics" +#~ msgstr "Mistura de Harmônicos" + +#~ msgid "3rd" +#~ msgstr "3°" + +#~ msgid "2nd" +#~ msgstr "2°" + +#~ msgid "Amount" +#~ msgstr "Quantidade" + +#~ msgid "Harmonics" +#~ msgstr "Harmônico" + +#~ msgid "Scope" +#~ msgstr "Escopo" + +#~ msgid "Floor" +#~ msgstr "Piso" + +#~ msgid "Floor Value" +#~ msgstr "Valor do piso" + +#~ msgid "Link" +#~ msgstr "Ligação" + +#~ msgid "Application Name" +#~ msgstr "Nome do Aplicativo" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Mostrar aplicativos bloqueados" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Lista de aplicativos bloqueados" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Mostrar aplicativos bloqueados" + +#~ msgid "Compressor" +#~ msgstr "Compressor" + +#~ msgid "Mode" +#~ msgstr "Modo" + +#~ msgid "Downward" +#~ msgstr "Para Baixo" + +#~ msgid "Upward" +#~ msgstr "Para Cima" + +#~ msgid "Boosting" +#~ msgstr "Impulsionando" + +#~ msgid "Compression Mode" +#~ msgstr "Modo de Compressão" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Limiar de Impulso" + +#~ msgid "Boost Amount" +#~ msgstr "Valor do reforço" + +#~ msgid "Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Tempo" + +#~ msgid "Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Tempo de Ataque" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Limiar de Ataque" + +#~ msgid "Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Tempo de liberação" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Limiar de liberação" + +#~ msgid "Ratio" +#~ msgstr "Razão" + +#~ msgid "Knee" +#~ msgstr "Joelho" + +#~ msgid "Makeup" +#~ msgstr "Ganho de Saída" + +#~ msgid "Sidechain" +#~ msgstr "Cadeia Lateral" + +#~ msgid "Peak" +#~ msgstr "Pico" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Passa-Baixa" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Modo de cadeia lateral" + +#~ msgid "Source" +#~ msgstr "Fonte" + +#~ msgid "Middle" +#~ msgstr "Meio" + +#~ msgid "Side" +#~ msgstr "Lado" + +#~ msgid "Left" +#~ msgstr "Esquerda" + +#~ msgid "Right" +#~ msgstr "Direita" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Fonte da cadeia lateral" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Feed-forward" +#~ msgstr "Avanço de alimentação" + +#~ msgid "Feed-back" +#~ msgstr "Retorno" + +#, fuzzy +#~ msgid "External" +#~ msgstr "Externo" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Tipo de cadeia lateral" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Dispositivo de Entrada" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Pré-Amplificação" + +#~ msgid "Reactivity" +#~ msgstr "Reatividade" + +#~ msgid "Lookahead" +#~ msgstr "Antevisão" + +#~ msgid "Sidechain Filters" +#~ msgstr "Filtros da cadeia lateral" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Passa-alta" + +#~ msgid "Frequency" +#~ msgstr "Frequência" + +#~ msgid "Off" +#~ msgstr "Desligado" + +#~ msgid "12 dB/oct" +#~ msgstr "12dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36dB/oct" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Filtro Passa-Alta" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Frequências Mais Altas" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Filtro Passa-Alta" + +#~ msgid "Gain" +#~ msgstr "Ganho" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Inclinação" + +#~ msgid "Curve" +#~ msgstr "Curva" + +#~ msgid "L" +#~ msgstr "L" + +#~ msgid "Left Channel" +#~ msgstr "Canal esquerdo" + +#~ msgid "R" +#~ msgstr "R" + +#~ msgid "Right Channel" +#~ msgstr "Canal direito" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Resposta de Impulso" + +#~ msgid "Combine" +#~ msgstr "Combinar" + +#~ msgid "Stereo Width" +#~ msgstr "Largura do Stereo" + +#~ msgid "Spectrum" +#~ msgstr "Espectro" + +#~ msgid "Log Scale" +#~ msgstr "Escala logarítmica" + +#~ msgid "Autogain" +#~ msgstr "Ganho Automático" + +#~ msgid "Rate" +#~ msgstr "Taxa" + +#~ msgid "Samples" +#~ msgstr "Amostras" + +#~ msgid "Duration" +#~ msgstr "Duração" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Resposta de Impulso" + +#~ msgid "First Kernel" +#~ msgstr "Primeiro Núcleo" + +#~ msgid "Second Kernel" +#~ msgstr "Segundo Núcleo" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Saída" + +#~ msgid "Combined Kernel Name" +#~ msgstr "Nome do Núcleo Combinado" + +#~ msgid "Import Impulse" +#~ msgstr "Importar Impulso" + +#~ msgid "Search" +#~ msgstr "Buscar" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Importar Arquivo com a Resposta de Impulso" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Importar Arquivo com a Resposta de Impulso" + +#~ msgid "Default" +#~ msgstr "Padrão" + +#~ msgid "Cutoff" +#~ msgstr "Corte" + +#~ msgid "Feed" +#~ msgstr "Alimentação" + +#~ msgid "Bypass" +#~ msgstr "Ignorar" + +#~ msgid "Mute" +#~ msgstr "Mudo" + +#~ msgid "Detection" +#~ msgstr "Detecção" + +#~ msgid "Wide" +#~ msgstr "Amplo" + +#~ msgid "Split" +#~ msgstr "Separado" + +#~ msgid "F1 Split" +#~ msgstr "Divisão F1" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frequência" + +#~ msgid "F2 Peak" +#~ msgstr "Pico F2" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frequência" + +#~ msgid "F1 Gain" +#~ msgstr "Ganho F1" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frequência" + +#~ msgid "F2 Level" +#~ msgstr "Nível F2" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frequência" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Pico Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frequência" + +#~ msgid "Laxity" +#~ msgstr "Frouxidão" + +#~ msgid "Detected" +#~ msgstr "Detectado" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Redução" + +#~ msgid "Frame Size" +#~ msgstr "Tamanho do Quadro" + +#~ msgid "Filter Length" +#~ msgstr "Comprimento do filtro" + +#~ msgid "Excluded Apps" +#~ msgstr "Aplicativos excluídos" + +#~ msgid "Bands" +#~ msgstr "Bandas" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Canais Separados" + +#~ msgid "Flat Response" +#~ msgstr "Resposta Plana" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calcular Frequências" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Predefinições" + +#~ msgid "Bell" +#~ msgstr "Sino" + +#~ msgid "High Pass" +#~ msgstr "Passa Altas" + +#~ msgid "High Shelf" +#~ msgstr "High Shelf" + +#~ msgid "Low Pass" +#~ msgstr "Passa-Baixa" + +#~ msgid "Low Shelf" +#~ msgstr "Low Shelf" + +#~ msgid "Notch" +#~ msgstr "Rejeita-faixa" + +#~ msgid "Resonance" +#~ msgstr "Ressonância" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Passa-Baixa" + +#~ msgid "Band Type" +#~ msgstr "Tipo de banda" + +#~ msgid "Band Mode" +#~ msgstr "Modo Banda" + +#~ msgid "Slope" +#~ msgstr "Inclinação" + +#~ msgid "Band Slope" +#~ msgstr "Inclinação da banda" + +#~ msgid "Width" +#~ msgstr "Largura" + +#~ msgid "Quality" +#~ msgstr "Qualidade" + +#~ msgid "Solo" +#~ msgstr "Sozinho" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Teto" + +#, fuzzy +#~ msgid "Ceil Value" +#~ msgstr "Valor do Teto" + +#~ msgid "API" +#~ msgstr "API" + +#, fuzzy +#~ msgid "Access" +#~ msgstr "Acesso" + +#~ msgid "Description" +#~ msgstr "Descrição" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Remover este arquivo de predefinição" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Passa-Baixa" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Passa-Baixa" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Passa-Baixa" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Passa-Alta" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Passa-Alta" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Passa-Alta" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Passa-Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Passa-Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Passa-Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rejeita-Faixa" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rejeita-Faixa" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rejeita-Faixa" + +#~ msgid "Inertia" +#~ msgstr "Inércia" + +#~ msgid "Gate" +#~ msgstr "Portão" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Tempo de liberação" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Externo" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "Oversampling" +#~ msgstr "Sobreamostragem" + +#, fuzzy +#~ msgid "Dither" +#~ msgstr "Dither" + +#, fuzzy +#~ msgid "Herm Thin" +#~ msgstr "Herm Fino" + +#~ msgid "Herm Wide" +#~ msgstr "Herm Amplo" + +#, fuzzy +#~ msgid "Herm Tail" +#~ msgstr "Cauda de Herm" + +#~ msgid "Exp Wide" +#~ msgstr "Exp Amplo" + +#~ msgid "Exp Tail" +#~ msgstr "Cauda de Exp" + +#~ msgid "Line Thin" +#~ msgstr "Linha Fina" + +#~ msgid "Line Wide" +#~ msgstr "Linha Larga" + +#~ msgid "Line Tail" +#~ msgstr "Cauda da Linha" + +#~ msgid "None" +#~ msgstr "Nenhuma" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Pré-amplificação de cadeia lateral" + +#~ msgid "Boost" +#~ msgstr "Impulso" + +#~ msgid "Stereo Link" +#~ msgstr "Elo Stereo" + +#~ msgid "External Sidechain" +#~ msgstr "Cadeia Lateral Externa" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Ganho Automático" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Ganho Automático" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Ganho Automático" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Ganho Automático" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Esquerda" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Direita" + +#~ msgid "Sidechain Left" +#~ msgstr "Cadeia Lateral Esquerda" + +#~ msgid "Sidechain Right" +#~ msgstr "Cadeia Lateral Direita" + +#~ msgid "Standard" +#~ msgstr "Padrão" + +#~ msgid "Flat" +#~ msgstr "Plano" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Tamanho do Quadro" + +#~ msgid "Output Volume" +#~ msgstr "Volume de Saída" + +#~ msgid "Ceiling" +#~ msgstr "Teto" + +#~ msgid "Operating Mode" +#~ msgstr "Modo operacional" + +#~ msgid "Classic" +#~ msgstr "Clássico" + +#~ msgid "Modern" +#~ msgstr "Moderno" + +#~ msgid "Sidechain Boost" +#~ msgstr "Impulso de Cadeia Lateral" + +#~ msgid "Bands List" +#~ msgstr "Lista de Bandas" + +#~ msgid "Band 1" +#~ msgstr "Banda 1" + +#~ msgid "Band 2" +#~ msgstr "Banda 2" + +#~ msgid "Band 3" +#~ msgstr "Banda 3" + +#~ msgid "Band 4" +#~ msgstr "Banda 4" + +#~ msgid "Band 5" +#~ msgstr "Banda 5" + +#~ msgid "Band 6" +#~ msgstr "Banda 6" + +#~ msgid "Band 7" +#~ msgstr "Banda 7" + +#~ msgid "Band 8" +#~ msgstr "Banda 8" + +#~ msgid "Band Start" +#~ msgstr "Início da Banda" + +#~ msgid "Band End" +#~ msgstr "Fim da Banda" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Modo de Compressão" + +#~ msgid "Band Bypass" +#~ msgstr "Ignorar a Banda" + +#, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Cadeia Lateral" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Filtro" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro Passa-Alta" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Filtro Passa-Alta" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Ganho de Entrada" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Curva" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Separado" + +#~ msgid "Split 1/2" +#~ msgstr "Disivão 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frequência" + +#~ msgid "Split 2/3" +#~ msgstr "Disivão 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frequência" + +#~ msgid "Split 3/4" +#~ msgstr "Disivão 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frequência" + +#~ msgid "Sub Band" +#~ msgstr "Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Ganho de Saída" + +#~ msgid "Max Reduction" +#~ msgstr "Redução" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "Low Band" +#~ msgstr "Banda Baixa" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Ganho de Saída" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "Mid Band" +#~ msgstr "Banda Média" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Ganho de Saída" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Ganho de Saída" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "General" +#~ msgstr "Geral" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Usar Padrão" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Dispositivo de Entrada" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Usar Padrão" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Ganho de Entrada" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Reverberação" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Versão" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Versão" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Amostragem" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Frequência" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Ganho Máximo" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Saída Padrão" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Ganho de Entrada" + +#~ msgid "Output Presets" +#~ msgstr "Predefinições de Saída" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Lista de Predefinições de Saída" + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Dispositivo de Entrada" + +#~ msgid "Input Presets" +#~ msgstr "Predefinições de Entrada" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Lista de Predefinições de Entrada" + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Módulos" + +#~ msgid "Clients" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Clientes" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Sinais de Teste" + +#~ msgid "State" +#~ msgstr "Estado" + +#~ msgid "Enabled" +#~ msgstr "Habilitado" + +#~ msgid "Properties" +#~ msgstr "Propriedades" + +#~ msgid "Channels" +#~ msgstr "Canais" + +#~ msgid "Both" +#~ msgstr "Ambos" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Canais" + +#~ msgid "Waveform" +#~ msgstr "Forma de onda" + +#~ msgid "Sine Wave" +#~ msgstr "Onda senoidal" + +#~ msgid "White Noise" +#~ msgstr "Ruído Branco" + +#~ msgid "High Speed" +#~ msgstr "Alta velocidade" + +#~ msgid "High Quality" +#~ msgstr "Alta qualidade" + +#~ msgid "High Consistency" +#~ msgstr "Alta consistência" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formato" + +#~ msgid "Shifted" +#~ msgstr "Deslocado" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Predefinição" + +#~ msgid "Transients" +#~ msgstr "Transientes" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Clareza" + +#~ msgid "Mixed" +#~ msgstr "Misturado" + +#~ msgid "Smooth" +#~ msgstr "Suave" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detecção" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compressão" + +#~ msgid "Percussive" +#~ msgstr "Percussivo" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Clipe Macio" + +#~ msgid "Phase" +#~ msgstr "Estágio" + +#~ msgid "Independent" +#~ msgstr "Independente" + +#~ msgid "Cents" +#~ msgstr "Centavos" + +#~ msgid "Semitones" +#~ msgstr "Semitons" + +#~ msgid "Octaves" +#~ msgstr "Oitavas" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Remover este arquivo de predefinição" + +#~ msgid "Add Effect" +#~ msgstr "Adicionar efeito" + +#~ msgid "No Effects" +#~ msgstr "Sem efeitos" + +#~ msgid "_General" +#~ msgstr "_Geral" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Dispositivo de Entrada" + +#~ msgid "Audio" +#~ msgstr "Áudio" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Processar Todas as Saídas" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Processar Todas as Entradas" + +#~ msgid "Style" +#~ msgstr "Estilo" + +#~ msgid "Use Dark Theme" +#~ msgstr "Usar Tema Escuro" + +#~ msgid "_Spectrum" +#~ msgstr "_Espectro" + +#~ msgid "Shape" +#~ msgstr "Forma" + +#~ msgid "Bars" +#~ msgstr "Barras" + +#~ msgid "Lines" +#~ msgstr "Linhas" + +#~ msgid "Dots" +#~ msgstr "Pontos" + +#~ msgid "Points" +#~ msgstr "Pontos" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Line Width" +#~ msgstr "Largura da Linha" + +#~ msgid "Fill" +#~ msgstr "Preencher" + +#~ msgid "Color" +#~ msgstr "Cor" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frequência" + +#~ msgid "Minimum" +#~ msgstr "Mínimo" + +#~ msgid "Maximum" +#~ msgstr "Máximo" + +#~ msgid "Load" +#~ msgstr "Carregar" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Salvar Configurações atuais para este arquivo de predefinição" + +#~ msgid "Remove this preset file" +#~ msgstr "Remover este arquivo de predefinição" + +#~ msgid "New Output Preset Name" +#~ msgstr "Novo Nome de Predefinição de Saída" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Criar Predefinição" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importar Predefinições" + +#~ msgid "Search Output Preset" +#~ msgstr "Pesquisa de Predefinições de Saída" + +#~ msgid "Output Presets List" +#~ msgstr "Lista de Predefinições de Saída" + +#~ msgid "New Input Preset Name" +#~ msgstr "Novo Nome de Predefinição de Entrada" + +#~ msgid "Search Input Preset" +#~ msgstr "Pesquisar Predefinições de Entrada" + +#~ msgid "Input Presets List" +#~ msgstr "Lista de Predefinições de Entrada" + +#~ msgid "High Frequency Damping" +#~ msgstr "Amortecimento de Alta Frequência" + +#~ msgid "Room Size" +#~ msgstr "Tamanho do quarto" + +#~ msgid "Small" +#~ msgstr "Pequeno" + +#~ msgid "Medium" +#~ msgstr "Médio" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Tunnel" +#~ msgstr "Túnel" + +#~ msgid "Large/smooth" +#~ msgstr "Grande/Suave" + +#~ msgid "Experimental" +#~ msgstr "Experimental" + +#~ msgid "Diffusion" +#~ msgstr "Difusão" + +#~ msgid "Pre Delay" +#~ msgstr "Pré Atraso" + +#~ msgid "Decay Time" +#~ msgstr "Tempo de Decaimento" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Quantidade" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Nível Alvo" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Quantidade" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Nível" + +#~ msgid "Bass Cut" +#~ msgstr "Corte de Grave" + +#~ msgid "Treble Cut" +#~ msgstr "Corte de Agudo" + +#~ msgid "Ambience" +#~ msgstr "Ambiente" + +#~ msgid "Empty Walls" +#~ msgstr "Paredes Vazias" + +#~ msgid "Room" +#~ msgstr "Quarto" + +#~ msgid "Large Empty Hall" +#~ msgstr "Grande Salão Vazio" + +#~ msgid "Disco" +#~ msgstr "Discoteca" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Grande Salão Ocupado" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Importar Impulso" + +#~ msgid "Models" +#~ msgstr "Modelos" + +#, fuzzy +#~ msgid "Active Model" +#~ msgstr "Modo Agressivo" + +#~ msgid "Overview" +#~ msgstr "Visão geral" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Abrir o Manual do EasyEffects" + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balanço" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Balanço" + +#~ msgid "Softclip" +#~ msgstr "Clipe Macio" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Clipe Macio" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matriz Stereo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "ED > ED (Stereo Padrão)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "ED > ML (Stereo para Meio-Lado)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "ML > ED (Meio-Lado para Stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "ED > EE (Canal Esquerdo Mono)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "ED > DD (Canal Direito Mono)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "ED > E+D (Soma Mono E+D)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "ED > DL (Alternar Canais Stereo)" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Base Stereo" + +#~ msgid "Invert Phase" +#~ msgstr "Inverter Fase" + +#~ msgid "Side Level" +#~ msgstr "Nível Lateral" + +#~ msgid "Side Balance" +#~ msgstr "Balanço Lateral" + +#~ msgid "Middle Level" +#~ msgstr "Nível do Meio" + +#~ msgid "Middle Panorama" +#~ msgstr "Panorama do Meio" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Ganho de Entrada" + +#~ msgid "Delay L/R" +#~ msgstr "Atraso E/D" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Atraso E/D" + +#~ msgid "Stereo Base" +#~ msgstr "Base Stereo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fase Stereo" + +#~ msgid "Running" +#~ msgstr "Correndo" + +#~ msgid "Suspended" +#~ msgstr "Suspenso" + +#~ msgid "Idle" +#~ msgstr "Parado" + +#~ msgid "Creating" +#~ msgstr "Criando" + +#~ msgid "Error" +#~ msgstr "Erro" + +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Canais" + +#~ msgid "Output Presets: " +#~ msgstr "Predefinições de Saída: " + +#~ msgid "Input Presets: " +#~ msgstr "Predefinições de Entrada: " + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efeitos de Áudio para Programas que Utilizam Pulseaudio" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Sair do EasyEffects. Útil quando executando em modo de serviço." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Carregar uma predefinição. Exemplo: easyeffects -l musica" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Redefinir o EasyEffects." + +#~ msgid "Show available presets." +#~ msgstr "Mostrar predefinições disponíveis." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Importar Arquivo com a Resposta de Impulso" + +#~ msgid "Import Impulse File" +#~ msgstr "Importar Arquivo com a Resposta de Impulso" + +#~ msgid "Open" +#~ msgstr "Abrir" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Impulse Response" +#~ msgstr "Resposta de Impulso" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Resposta de Impulso" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Importar Impulso" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Importar Arquivo com a Resposta de Impulso" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Não Foi Possível Carregar o Arquivo com o Impulso" + +#~ msgid "Recorders" +#~ msgstr "Gravadores" + +#~ msgid "Players" +#~ msgstr "Reprodutores" + +#~ msgid "Effects" +#~ msgstr "Efeitos" + +#~ msgid "infinity" +#~ msgstr "infinito" + +#, fuzzy +#~ msgid "Import APO Preset File" +#~ msgstr "Importar Predefinições" + +#, fuzzy +#~ msgid "APO Presets" +#~ msgstr "Predefinições" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Remover este arquivo de predefinição" + +#~ msgid "Remove" +#~ msgstr "Remover" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Ganho de Entrada" + +#, fuzzy +#~ msgid "Add" +#~ msgstr "Adicionar" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Importar Predefinições" + +#~ msgid "Import Model File" +#~ msgstr "Importar Arquivo de Modelo" + +#~ msgid "RNNoise Models" +#~ msgstr "Modelos RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Reforçador de Graves" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Volume do baixo" + +#~ msgid "Convolver" +#~ msgstr "Convolução" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Cristalizador" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Atraso" + +#~ msgid "Echo Canceller" +#~ msgstr "Cancelador de Eco" + +#~ msgid "Equalizer" +#~ msgstr "Equalizador" + +#~ msgid "Exciter" +#~ msgstr "Excitador" + +#~ msgid "Filter" +#~ msgstr "Filtro" + +#~ msgid "Limiter" +#~ msgstr "Limitador" + +#~ msgid "Maximizer" +#~ msgstr "Maximizador" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compressor Multibandas" + +#~ msgid "Multiband Gate" +#~ msgstr "Gate Multibandas" + +#~ msgid "Pitch" +#~ msgstr "Altura" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Reverberação" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Redução de Ruído" + +#~ msgid "Stereo Tools" +#~ msgstr "Ferramentas Stereo" + +#~ msgid "Average" +#~ msgstr "Médio" + +#~ msgid "Failed" +#~ msgstr "Falhou" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Usar Padrão" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Remover este arquivo de predefinição" + +#~ msgid "Import Presets" +#~ msgstr "Importar Predefinições" + +#~ msgid "Start Service at Login" +#~ msgstr "Inicializar Serviço no Login" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agressivo" + +#~ msgid "Add to Blocklist" +#~ msgstr "Adicionar à Lista de Bloqueio" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Microfone de Calibração" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latência" + +#~ msgid "Faster" +#~ msgstr "Mais Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Preservar Formante" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Ganho de Entrada" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Canais" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Piso" + +#~ msgid "Output Effects" +#~ msgstr "Efeitos de Saída" + +#~ msgid "Settings" +#~ msgstr "Configurações" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Configurações" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Duração" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Sinais de Teste" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Sinais de Teste" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Border" +#~ msgstr "Borda" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Spectrum Color" +#~ msgstr "Cor do Espectro" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Modo Agressivo" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Pesos" + +#~ msgid "Dry" +#~ msgstr "Seco" + +#~ msgid "S/C Level" +#~ msgstr "Nível de S/C" + +#~ msgid "Short Term" +#~ msgstr "Curto Prazo" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Passa-Baixa" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Definir o volume e ligar / desligar efeitos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Inclui um equalizador com predefinições incorporadas" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibração" + +#~ msgid "Limit" +#~ msgstr "Limite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Atenuação" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Efeitos de Áudio para Programas que Utilizam Pulseaudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Efeitos de áudio para programas que Utilizam Pulseaudio" + +#~ msgid "Help" +#~ msgstr "Ajuda" + +#~ msgid "Calibration Microphone" +#~ msgstr "Microfone de Calibração" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Aplique automaticamente esta predefinição sempre que o dispositivo usado " +#~ "atualmente for conectado no sistema" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Versão" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Quadrada" + +#~ msgid "Saw" +#~ msgstr "Serra" + +#~ msgid "Triangle" +#~ msgstr "Triângulo" + +#~ msgid "Silence" +#~ msgstr "Silencio" + +#~ msgid "Pink Noise" +#~ msgstr "Ruído Rosa" + +#~ msgid "Ticks" +#~ msgstr "Tique-Taque" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruído Gaussiano" + +#~ msgid "Red Noise" +#~ msgstr "Ruído Vermelho" + +#~ msgid "Blue Noise" +#~ msgstr "Ruído Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruído Violeta" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Window" +#~ msgstr "Janela" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruído" + +#~ msgid "Subtract Noise" +#~ msgstr "Subtrair Ruído" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Estendido" + +#~ msgid "Low" +#~ msgstr "Baixo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Nível de Supressão" + +#~ msgid "Delay Agnostic" +#~ msgstr "Atraso Agnóstico" + +#~ msgid "Very High" +#~ msgstr "Muito Alto" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supressor de Ruído" + +#~ msgid "Adaptive Digital" +#~ msgstr "Digital Adaptativo" + +#~ msgid "Fixed Digital" +#~ msgstr "Digital Fixo" + +#~ msgid "Gain Controller" +#~ msgstr "Controlador de Ganho" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidade de Detecção" + +#~ msgid "Very Low" +#~ msgstr "Muito Baixo" + +#~ msgid "Voice Detector" +#~ msgstr "Detector de Voz" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Cor Customizada" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Gradiente" + +#~ msgid "Gradient Color" +#~ msgstr "Cor do Gradiente" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Arquivo da Resposta de Impulso" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Selecione o Arquivo com a Resposta de Impulso" + +#~ msgid "Aggressive Mode" +#~ msgstr "Modo Agressivo" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Depois" + +#~ msgid "Loudness Range" +#~ msgstr "Faixa de Sonoridade" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Taxa de Amostragem Padrão" + +#~ msgid "Default Source" +#~ msgstr "Entrada Padrão" + +#~ msgid "Server" +#~ msgstr "Servidor" + +#~ msgid "File" +#~ msgstr "Arquivo" + +#~ msgid "Configuration" +#~ msgstr "Configuração" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Servidor" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Frequências Mais Baixas" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Configurações Avançadas" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Predefinições" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silêncio" + +#~ msgid "Muted" +#~ msgstr "Mudo" + +#~ msgid "Distant Headphones" +#~ msgstr "Fones de Ouvido Distantes" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridade" + +#~ msgid "Niceness" +#~ msgstr "Gentileza" + +#~ msgid "Priority" +#~ msgstr "Prioridade" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frequência" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frequência" + +#~ msgid "About" +#~ msgstr "Sobre" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Amostra Padrão" + +#~ msgid "Channel Mapping" +#~ msgstr "Mapeamento de Canal" + +#~ msgid "Resamplers" +#~ msgstr "Resamplers" + +#~ msgid "Pipeline Input" +#~ msgstr "Entrada da Pipeline" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Pipeline Output" +#~ msgstr "Saída da Pipeline" + +#~ msgid "Block Size" +#~ msgstr "Tamanho do Bloco" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "tocando" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Importar Predefinições" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Redução de Ganho" + +#~ msgid "Exponent" +#~ msgstr "Expoente" diff --git a/po/news/ro.po b/po/news/ro.po new file mode 100644 index 0000000..4ca1496 --- /dev/null +++ b/po/news/ro.po @@ -0,0 +1,3014 @@ +# Romanian translation for EasyEffects +# Copyright (C) 2021 +# This file is distributed under the same license as the easyeffects package. +# Andrei Dobrete , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Romanian \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +#, fuzzy +msgid "Audio Effects for PipeWire Applications" +msgstr "Efecte Audio pentru Aplicații PulseAudio" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects este un set avansat de unelte pentru manipularea audio. Numind " +"doar câteva din uneltele din acesta, sunt incluse un egalizator, limitator, " +"compresor și o unealtă pentru reverberație." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Pentru că EasyEffects utilizează serverul de sunet prestabilit PulseAudio, " +"acesta va funcționa cu majoritatea, dacă nu cumva chiar toate programele pe " +"care le folosiți. Toate programele suportate sunt prezentate în fereastra " +"principală, unde fiecare poate fi activată individual." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Pe lângă faptul că EasyEffects poate manipula output-ul de sunet, se poate " +"folosi și pentru a aplica efecte pe un dispozitiv de input, ca un microfon. " +"Acest lucru este util, spre exemplu, în înregistrarea audio, dar " +"funcționează bine și în timpul conversațiilor voce." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Când EasyEffects este pornit, acesta va reține configurația din sesiunea " +"anterioară. Este de asemenea posibil să salvați setările curente ca și " +"profile." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Benzi" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Egalizator, compresor și Alte Efecte Audio" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "limitator;compresor;reverberație;egalizator;autovolum" + +#~ msgid "\"Presets\"" +#~ msgstr "”Presetări”" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Activează" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplicații" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplicații" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Setări" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Presetări" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Presetări" + +#~ msgid "Global Bypass" +#~ msgstr "Evitare Globală" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Aplicații" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Pereți Goi" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplicații" + +#~ msgid "Target" +#~ msgstr "Țintă" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Maxim" + +#~ msgid "Momentary" +#~ msgstr "Momentar" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Pe Termen Scurt" + +#~ msgid "Integrated" +#~ msgstr "Integrat" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Utilizarea Mijlocului Geometric" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Utilizarea Mijlocului Geometric" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Utilizarea Mijlocului Geometric" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Utilizarea Mijlocului Geometric" + +#~ msgid "Reset History" +#~ msgstr "Resetare Istoric" + +#~ msgid "Relative" +#~ msgstr "Relativ" + +#~ msgid "Range" +#~ msgstr "Gamă" + +#~ msgid "Loudness" +#~ msgstr "Intensitate" + +#, fuzzy +#~ msgid "Output Gain" +#~ msgstr "Output" + +#~ msgid "Input" +#~ msgstr "Input" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Input Pipeline" + +#~ msgid "Output" +#~ msgstr "Output" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Output Pipeline" + +#~ msgid "Reset" +#~ msgstr "Resetare" + +#~ msgid "Name" +#~ msgstr "Nume" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Presetări" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Șterge fișierul de presetări" + +#~ msgid "Listen" +#~ msgstr "Ascultă" + +#~ msgid "Blend Harmonics" +#~ msgstr "Blend Harmonics" + +#~ msgid "3rd" +#~ msgstr "Al treilea" + +#~ msgid "2nd" +#~ msgstr "Al doilea" + +#~ msgid "Amount" +#~ msgstr "Cantitate" + +#~ msgid "Harmonics" +#~ msgstr "Harmonics" + +#~ msgid "Scope" +#~ msgstr "Scop" + +#~ msgid "Floor" +#~ msgstr "Podea" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Podea" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplicații" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Arată programele din Lista de Blocare în Fila Principală" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Arată programele din Lista de Blocare în Fila Principală" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Arată programele din Lista de Blocare în Fila Principală" + +#~ msgid "Compressor" +#~ msgstr "Compresor" + +#~ msgid "Mode" +#~ msgstr "Mod" + +#~ msgid "Downward" +#~ msgstr "În Jos" + +#~ msgid "Upward" +#~ msgstr "În Sus" + +#~ msgid "Compression Mode" +#~ msgstr "Mod de Compresie" + +#~ msgid "Boost Threshold" +#~ msgstr "Prag de Boost" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Cantitate" + +#~ msgid "Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "În Timp Real" + +#~ msgid "Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Prag" + +#~ msgid "Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "În Timp Real" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Prag Relativ de Eliberare" + +#~ msgid "Ratio" +#~ msgstr "Raport" + +#~ msgid "Knee" +#~ msgstr "Genunchi" + +#~ msgid "Makeup" +#~ msgstr "Compoziție" + +#~ msgid "Sidechain" +#~ msgstr "Lanț Lateral" + +#~ msgid "Peak" +#~ msgstr "Vârf" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Low-Pass" + +#~ msgid "Uniform" +#~ msgstr "Uniform" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Lanț Lateral" + +#~ msgid "Source" +#~ msgstr "Sursă" + +#~ msgid "Middle" +#~ msgstr "Mijloc" + +#~ msgid "Side" +#~ msgstr "Parte" + +#~ msgid "Left" +#~ msgstr "Stânga" + +#~ msgid "Right" +#~ msgstr "Dreapta" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Lanț Lateral" + +#~ msgid "Type" +#~ msgstr "Scrie" + +#~ msgid "Feed-forward" +#~ msgstr "Feed-forward" + +#~ msgid "Feed-back" +#~ msgstr "Feed-back" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Lanț Lateral" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Nivel Input" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Preamplificare" + +#~ msgid "Reactivity" +#~ msgstr "Reactivitate" + +#~ msgid "Lookahead" +#~ msgstr "Privire Înainte" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Lanț Lateral" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "High Pass" + +#~ msgid "Frequency" +#~ msgstr "Frecvență" + +#~ msgid "Off" +#~ msgstr "Oprit" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Mod Filtru High-pass" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Frecvență High-pass" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Mod Filtru Low-pass" + +#~ msgid "Gain" +#~ msgstr "Gain" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Pantă" + +#~ msgid "Curve" +#~ msgstr "Curbă" + +#~ msgid "L" +#~ msgstr "L" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Canale" + +#~ msgid "R" +#~ msgstr "R" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Despică Canalele" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Răspuns Impuls" + +#~ msgid "Stereo Width" +#~ msgstr "Lățime Stereo" + +#~ msgid "Spectrum" +#~ msgstr "Spectru " + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Auto Gain" + +#~ msgid "Rate" +#~ msgstr "Rată" + +#~ msgid "Samples" +#~ msgstr "Probe" + +#~ msgid "Duration" +#~ msgstr "Durație" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Răspuns Impuls" + +#~ msgid "Import Impulse" +#~ msgstr "Importă Impuls" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Importă Fișier Impulse" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Importă Fișier Impulse" + +#~ msgid "Default" +#~ msgstr "Prestablilt" + +#~ msgid "Cutoff" +#~ msgstr "Cutoff" + +#~ msgid "Feed" +#~ msgstr "Feed" + +#~ msgid "Bypass" +#~ msgstr "Evitare" + +#~ msgid "Mute" +#~ msgstr "Mut" + +#~ msgid "Detection" +#~ msgstr "Detectare" + +#~ msgid "Wide" +#~ msgstr "Lat" + +#~ msgid "Split" +#~ msgstr "Despică" + +#~ msgid "F1 Split" +#~ msgstr "F1 Despică" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frecvență" + +#~ msgid "F2 Peak" +#~ msgstr "F2 Vârf" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frecvență" + +#~ msgid "F1 Gain" +#~ msgstr "F1 Gain" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frecvență" + +#~ msgid "F2 Level" +#~ msgstr "F2 Nivel" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frecvență" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2 Vârf Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frecvență" + +#~ msgid "Laxity" +#~ msgstr "Laxitate" + +#~ msgid "Detected" +#~ msgstr "Detectat" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Reducere" + +#~ msgid "Frame Size" +#~ msgstr "Dimensiune Cadru" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filtru" + +#~ msgid "Bands" +#~ msgstr "Benzi" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "Split Channels" +#~ msgstr "Despică Canalele" + +#~ msgid "Flat Response" +#~ msgstr "Răspuns Plat" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Calculează Frecvențele" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Presetări APO" + +#~ msgid "Bell" +#~ msgstr "Clopot" + +#~ msgid "High Pass" +#~ msgstr "High Pass" + +#~ msgid "High Shelf" +#~ msgstr "High Shelf" + +#~ msgid "Low Pass" +#~ msgstr "Low Pass" + +#~ msgid "Low Shelf" +#~ msgstr "Low Shelf" + +#~ msgid "Notch" +#~ msgstr "Crestătură" + +#~ msgid "Resonance" +#~ msgstr "Rezonanță" + +#~ msgid "All Pass" +#~ msgstr "All Pass" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Scrie" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Mod" + +#~ msgid "Slope" +#~ msgstr "Pantă" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pantă" + +#~ msgid "Width" +#~ msgstr "Lățime" + +#~ msgid "Quality" +#~ msgstr "Calitate" + +#~ msgid "Solo" +#~ msgstr "Solo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Tavan" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Șterge fișierul de presetări" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Lowpass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Lowpass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Lowpass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Highpass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Highpass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Highpass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Bandpass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Bandpass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Bandpass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Bandreject" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Bandreject" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Bandreject" + +#~ msgid "Inertia" +#~ msgstr "Inerție" + +#~ msgid "Gate" +#~ msgstr "Gate" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "În Timp Real" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Integrat" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "Oversampling" +#~ msgstr "Supraprelevare" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Lat" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Lat" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Lățime Linie" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Lățime Linie" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Masă Sinusoidală" + +#~ msgid "None" +#~ msgstr "Niciunul" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Preamplificare" + +#~ msgid "Stereo Link" +#~ msgstr "Link Stereo" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Lanț Lateral" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Nivelare Automată" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Nivelare Automată" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Nivelare Automată" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Nivelare Automată" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Gain" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Dreapta" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Lanț Lateral" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Lanț Lateral" + +#~ msgid "Standard" +#~ msgstr "Standard" + +#~ msgid "Flat" +#~ msgstr "Plat" + +#~ msgid "FFT Size" +#~ msgstr "Dimensiune FFT" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Output" + +#~ msgid "Ceiling" +#~ msgstr "Tavan" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Importă Model" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Mod" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Lanț Lateral" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Benzi" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Mod de Compresie" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Mod Filtru Low-pass" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Frecvență Low-pass" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtru High Pass" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Frecvență High-pass" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "F1 Gain" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Curbă" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Despică" + +#~ msgid "Split 1/2" +#~ msgstr "Despicare 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecvență" + +#~ msgid "Split 2/3" +#~ msgstr "Despicare 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecvență" + +#~ msgid "Split 3/4" +#~ msgstr "Despicare 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecvență" + +#~ msgid "Sub Band" +#~ msgstr "Sub Band" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Compoziție" + +#~ msgid "Max Reduction" +#~ msgstr "Reducere" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Reducere" + +#~ msgid "Low Band" +#~ msgstr "Low Band" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Compoziție" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducere" + +#~ msgid "Mid Band" +#~ msgstr "Mid Band" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Compoziție" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducere" + +#~ msgid "High Band" +#~ msgstr "High Band" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Compoziție" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducere" + +#~ msgid "General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Folosește Prestabilit" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Nivel Input" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Folosește Prestabilit" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Reverberație" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Versiune" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Versiune" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Rata de Sample Prestabilită" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Frecvență Minimă" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Gain-ul Maxim" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Sink-ul Prestabilit" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Efecte Output" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Presetări pentru Output:" + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Presetări pentru Output:" + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Nivel Input" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Presetări pentru Input:" + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Presetări pentru Input:" + +#~ msgid "Modules" +#~ msgstr "Module" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Module" + +#~ msgid "Clients" +#~ msgstr "Clienți" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Clienți" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Semnale de Testare" + +#~ msgid "State" +#~ msgstr "Stare" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Activează" + +#~ msgid "Channels" +#~ msgstr "Canale" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Canale" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Masă Sinusoidală" + +#~ msgid "White Noise" +#~ msgstr "Zgomot Alb" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "High Shelf" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calitate" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Presetări" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Claritate" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresie" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Semitones" +#~ msgstr "Semitonuri" + +#~ msgid "Octaves" +#~ msgstr "Octave" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Șterge fișierul de presetări" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Efecte Input" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "General" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Procesează Toate Output-urile" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Procesează Toate Input-urile" + +#, fuzzy +#~ msgid "Inactivity Timeout" +#~ msgstr "Expirarea Activității" + +#~ msgid "Use Dark Theme" +#~ msgstr "Folosește Tema Întunecată" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Spectru " + +#~ msgid "Bars" +#~ msgstr "Bări " + +#~ msgid "Lines" +#~ msgstr "Linii" + +#~ msgid "Points" +#~ msgstr "Puncte" + +#~ msgid "Height" +#~ msgstr "Înălțime" + +#~ msgid "Line Width" +#~ msgstr "Lățime Linie" + +#~ msgid "Fill" +#~ msgstr "Umple" + +#, fuzzy +#~ msgid "Color" +#~ msgstr "Culoare Axă" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frecvență" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Maxim" + +#~ msgid "Maximum" +#~ msgstr "Maxim" + +#~ msgid "Load" +#~ msgstr "Încarcă" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Salvează setările curente în acest fișier cu presetări" + +#~ msgid "Remove this preset file" +#~ msgstr "Șterge fișierul de presetări" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Presetări pentru Output:" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Creează Presetare" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Importă Presetări" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Presetări pentru Output:" + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Presetări pentru Output:" + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Presetări pentru Input:" + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Presetări pentru Input:" + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Presetări pentru Input:" + +#~ msgid "High Frequency Damping" +#~ msgstr "Amortizare Frecvențe Înalte" + +#~ msgid "Room Size" +#~ msgstr "Dimensiunea Camerei" + +#~ msgid "Small" +#~ msgstr "Mic" + +#~ msgid "Medium" +#~ msgstr "Mediu" + +#~ msgid "Large" +#~ msgstr "Mare" + +#~ msgid "Tunnel" +#~ msgstr "Tunel" + +#~ msgid "Large/smooth" +#~ msgstr "Mare/neted" + +#~ msgid "Experimental" +#~ msgstr "Experimental" + +#~ msgid "Diffusion" +#~ msgstr "Difuzie" + +#~ msgid "Pre Delay" +#~ msgstr "Pre Întârziere" + +#~ msgid "Decay Time" +#~ msgstr "Timp Decay" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantitate" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Nivelul Țintă" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantitate" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "F2 Nivel" + +#~ msgid "Bass Cut" +#~ msgstr "Bass Tăiat" + +#~ msgid "Treble Cut" +#~ msgstr "Treble Tăiat" + +#~ msgid "Ambience" +#~ msgstr "Ambianță" + +#~ msgid "Empty Walls" +#~ msgstr "Pereți Goi" + +#~ msgid "Room" +#~ msgstr "Cameră" + +#~ msgid "Large Empty Hall" +#~ msgstr "Hol Gol Mare" + +#~ msgid "Disco" +#~ msgstr "Disco" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Hol Plin Mare" + +#~ msgid "Import Model" +#~ msgstr "Importă Model" + +#, fuzzy +#~ msgid "Models" +#~ msgstr "Mod" + +#, fuzzy +#~ msgid "Standard Model" +#~ msgstr "Model Standard RNNoise" + +#, fuzzy +#~ msgid "RNNoise Models List" +#~ msgstr "Model Standard RNNoise" + +#~ msgid "Active Model" +#~ msgstr "Model Activ" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Model Standard RNNoise" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Resetează EasyEffects." + +#, fuzzy +#~ msgid "Close the Window" +#~ msgstr "Ascunde Fereastra." + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Balans" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Balans" + +#~ msgid "Softclip" +#~ msgstr "Softclip" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Softclip" + +#~ msgid "Stereo Matrix" +#~ msgstr "Matrice Stereo" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Prestabilit Stereo)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Stereo către Mijloc)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Mijloc către Stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (Mono Canal Stânga)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Mono Canal Dreapta)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Mono L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Canalele Stereo Inversate)" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Bază Stereo" + +#~ msgid "Invert Phase" +#~ msgstr "Inversează Faza" + +#~ msgid "Side Level" +#~ msgstr "Nivel Lateral" + +#~ msgid "Side Balance" +#~ msgstr "Balans Lateral" + +#~ msgid "Middle Level" +#~ msgstr "Nivel Mijloc" + +#~ msgid "Middle Panorama" +#~ msgstr "Panoramă Mijloc" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Balans" + +#~ msgid "Delay L/R" +#~ msgstr "Întârziere L/R" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Întârziere L/R" + +#~ msgid "Stereo Base" +#~ msgstr "Bază Stereo" + +#~ msgid "Stereo Phase" +#~ msgstr "Fază Stereo" + +#, fuzzy +#~ msgid "Running" +#~ msgstr "rulează" + +#, fuzzy +#~ msgid "Suspended" +#~ msgstr "suspendat" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "se creează" + +#, fuzzy +#~ msgid "Error" +#~ msgstr "eroare" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Canale" + +#~ msgid "Output Presets: " +#~ msgstr "Presetări pentru Output:" + +#~ msgid "Input Presets: " +#~ msgstr "Presetări pentru Input:" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efecte audio pentru aplicații PulseAudio" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "" +#~ "Închideți EasyEffects. Folositor când este folosit în modul de serviciu." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Încarcă o presetare. Exemplu: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Resetează EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Ascunde Fereastra." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Ocolire Globală. 1 pentru a activa, 2 pentru a dezactiva și 3 pentru a " +#~ "afla statusul" + +#~ msgid "Show available presets." +#~ msgstr "Arată presetările valabile." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Importă Fișier Impulse" + +#~ msgid "Import Impulse File" +#~ msgstr "Importă Fișier Impulse" + +#~ msgid "Open" +#~ msgstr "Deschide" + +#~ msgid "Cancel" +#~ msgstr "Anulare" + +#~ msgid "Impulse Response" +#~ msgstr "Răspuns Impuls" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Importă Impuls" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Importă Impuls" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Importă Fișier Impulse" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Nu s-a putut Încărca Fișierul Impulse" + +#, fuzzy +#~ msgid "Recorders" +#~ msgstr "Bordură" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "infinit" + +#~ msgid "Import APO Preset File" +#~ msgstr "Importă Fișierul de Presetare APO" + +#~ msgid "APO Presets" +#~ msgstr "Presetări APO" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Șterge fișierul de presetări" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Efecte Output" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Importă Presetări" + +#~ msgid "Import Model File" +#~ msgstr "Importă Fișier de Model" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Model Standard RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Amplificator Bass" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Intensitate" + +#~ msgid "Convolver" +#~ msgstr "Convolver" + +#~ msgid "Crossfeed" +#~ msgstr "Crossfeed" + +#~ msgid "Crystalizer" +#~ msgstr "Cristalizator" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Întârziere" + +#~ msgid "Echo Canceller" +#~ msgstr "Anulator de Ecou" + +#~ msgid "Equalizer" +#~ msgstr "Egalizator" + +#~ msgid "Exciter" +#~ msgstr "Excitator" + +#~ msgid "Filter" +#~ msgstr "Filtru" + +#~ msgid "Limiter" +#~ msgstr "Limitator" + +#~ msgid "Maximizer" +#~ msgstr "Maximizator" + +#~ msgid "Multiband Compressor" +#~ msgstr "Compresor Multiband" + +#~ msgid "Multiband Gate" +#~ msgstr "Multiband Gate" + +#~ msgid "Pitch" +#~ msgstr "Pitch" + +#~ msgid "Reverberation" +#~ msgstr "Reverberație" + +#~ msgid "Noise Reduction" +#~ msgstr "Reducere Zgomot" + +#~ msgid "Stereo Tools" +#~ msgstr "Unelte Stereo" + +#~ msgid "Average" +#~ msgstr "În Medie" + +#~ msgid "Failed" +#~ msgstr "A Eșuat" + +#~ msgid "Use Default" +#~ msgstr "Folosește Prestabilit" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Șterge fișierul de presetări" + +#~ msgid "Import Presets" +#~ msgstr "Importă Presetări" + +#~ msgid "Start Service at Login" +#~ msgstr "Începe Serviciul la Login" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Model Activ" + +#~ msgid "Add to Blocklist" +#~ msgstr "Adaugă la Lista de Blocare" + +#~ msgid "Blocklist" +#~ msgstr "Lista de Blocare" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrare Microfon" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Activează" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Activează" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latență" + +#~ msgid "idle" +#~ msgstr "inactiv" + +#~ msgid "Faster" +#~ msgstr "Mai Repede " + +#~ msgid "Preserve Formant" +#~ msgstr "Păstrează Formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Setează volumul și pornește/oprește efectele" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Include un egalizator cu presetări încorporate." + +#~ msgid "Input Limiter" +#~ msgstr "Limitator de Input" + +#~ msgid "Calibration" +#~ msgstr "Calibrare" + +#~ msgid "Help" +#~ msgstr "Ajutor" + +#~ msgid "Based on" +#~ msgstr "Bazat pe" + +#~ msgid "Detect Silence" +#~ msgstr "Detectează Tăcerea" + +#~ msgid "Weights" +#~ msgstr "Greutăți" + +#~ msgid "Provided by" +#~ msgstr "Furnizat de" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Reconectați microfonul pentru a aplica noile schimbări la Lista de Blocare" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Reporniți playerul pentru a aplica schimbările noi la Lista de Blocare" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Pătrat" + +#~ msgid "Saw" +#~ msgstr "Ferăstrău" + +#~ msgid "Triangle" +#~ msgstr "Triunghi" + +#~ msgid "Silence" +#~ msgstr "Liniște" + +#~ msgid "Pink Noise" +#~ msgstr "Zgomot Roz" + +#~ msgid "Ticks" +#~ msgstr "Ticăituri" + +#~ msgid "Gaussian Noise" +#~ msgstr "Zgomot Gaussian" + +#~ msgid "Red Noise" +#~ msgstr "Zgomot Roșu" + +#~ msgid "Blue Noise" +#~ msgstr "Zgomot Albastru" + +#~ msgid "Violet Noise" +#~ msgstr "Zgomot Violet" + +#~ msgid "Volume" +#~ msgstr "Volum" + +#~ msgid "Window" +#~ msgstr "Fereastră" + +#~ msgid "Measure Noise" +#~ msgstr "Măsoară Zgomotul" + +#~ msgid "Subtract Noise" +#~ msgstr "Scade Zgomotul" + +#~ msgid "Advanced" +#~ msgstr "Avansat" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importă Fișier de Răspuns Impuls" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Selectează Fișierul de Răspuns Impuls" + +#~ msgid "Aggressive Mode" +#~ msgstr "Mod Agresiv" + +#~ msgid "Before" +#~ msgstr "Înainte" + +#~ msgid "After" +#~ msgstr "După" + +#~ msgid "Loudness Range" +#~ msgstr "Gama de Sunet" + +#~ msgid "Apply APO Preset" +#~ msgstr "Aplică Presetare APO" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "Apply" +#~ msgstr "Aplică" + +#~ msgid "Muted" +#~ msgstr "Mut" + +#~ msgid "Distant Headphones" +#~ msgstr "Căști Departe" + +#~ msgid "Niceness" +#~ msgstr "Niceness" + +#~ msgid "Priority Type" +#~ msgstr "Tipul Priorității" + +#~ msgid "Priority" +#~ msgstr "Prioritate" + +#~ msgid "About" +#~ msgstr "Despre" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Reducere Maximă a Gain-ului" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "Control Automatic de Smoothing" + +#~ msgid "Limit" +#~ msgstr "Limită" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Atenuare" + +#~ msgid "Loudness Compensator" +#~ msgstr "Compensator de Intensitate" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Gain Reduction" +#~ msgstr "Reducere Gain" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Aplică automat această presetare oricând dispozitivul folosit acum este " +#~ "conectat la sistem" + +#~ msgid "Default Source" +#~ msgstr "Sursa Prestabilită" + +#~ msgid "Protocol" +#~ msgstr "Protocol" + +#~ msgid "Default Sample Format" +#~ msgstr "Formatul de Sample Prestabilit" + +#~ msgid "Channel Mapping" +#~ msgstr "Mapping-ul Canalelor" + +#~ msgid "File" +#~ msgstr "Fișier" + +#~ msgid "Configuration" +#~ msgstr "Configurare" + +#~ msgid "Resamplers" +#~ msgstr "Resampleri" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Block Size" +#~ msgstr "Dimensiune Bloc" + +#~ msgid "Dry" +#~ msgstr "Uscat" + +#~ msgid "Show Spectrum" +#~ msgstr "Arată Spectrul" + +#~ msgid "Use Custom Color" +#~ msgstr "Folosește Culoare Personalizată" + +#~ msgid "Use Gradient" +#~ msgstr "Folosește Gradient" + +#~ msgid "Sampling" +#~ msgstr "Sampling" + +#~ msgid "Maximum Frequency" +#~ msgstr "Frecvență Maximă" + +#~ msgid "Spectrum Type" +#~ msgstr "Tip Spectru" + +#~ msgid "Spectrum Color" +#~ msgstr "Culoare Spectru" + +#~ msgid "Gradient Color" +#~ msgstr "Culoare Gradient" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Extended Filter" +#~ msgstr "Filtru Extins" + +#~ msgid "Low" +#~ msgstr "Jos" + +#~ msgid "Moderate" +#~ msgstr "Moderat" + +#~ msgid "High" +#~ msgstr "Înalt" + +#~ msgid "Suppression Level" +#~ msgstr "Nivel de Suprimare" + +#~ msgid "Delay Agnostic" +#~ msgstr "Întârziere Agnostică" + +#~ msgid "Very High" +#~ msgstr "Foarte Înalt" + +#~ msgid "Noise Suppressor" +#~ msgstr "Supresor de Zgomot" + +#~ msgid "Adaptive Digital" +#~ msgstr "Digital Adaptiv" + +#~ msgid "Fixed Digital" +#~ msgstr "Digital Fix" + +#~ msgid "Gain Controller" +#~ msgstr "Controlor de Gain" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilitatea Detecției" + +#~ msgid "Very Low" +#~ msgstr "Foarte Jos" + +#~ msgid "Voice Detector" +#~ msgstr "Detector de Voce" diff --git a/po/news/ru.po b/po/news/ru.po new file mode 100644 index 0000000..aaea2c3 --- /dev/null +++ b/po/news/ru.po @@ -0,0 +1,3625 @@ +# EasyEffects Russian translation +# This file is distributed under the same license as the EasyEffects package. +# ⓒ Mikhail Novosyolov [mikhailnov] , 2017-2019 +# ⓒ Georgiy Starodubtsov [Mewsimka] , 2018 +# ⓒ Denis Goncharov, 2018 +# ⓒ Vladimir Penchikov , 2018 +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-09-25 06:59+0000\n" +"Last-Translator: Andrei Stepanov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Weblate 5.1-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Звуковые эффекты для приложений PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Веллингтон Уоллис" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects — это продвинутый набор инструментов для работы со звуком. " +"Приложение включает в себя эквалайзер, ограничитель (лимитер), компрессор, " +"утилиту для реверберации и многое другое. Более того, имеется встроенный " +"анализатор аудиоспектра." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects является преемником PulseEffects, но поддерживает только аудио-" +"сервер PipeWire. Пользователям PulseAudio следует оставаться на PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Так как Easy Effects использует стандартный сервер PipeWire, программа будет " +"работать с большинством используемых вами приложений. Все поддерживаемые " +"приложения представлены в главном окне, где каждое может быть настроено " +"индивидуально." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Помимо изменения звука на выходе Easy Effects также может использовать " +"звуковые эффекты для входных устройств, таких как микрофон. К примеру, это " +"может быть полезно во время аудиозаписи или голосовой конференции." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"При запуске Easy Effects автоматически подгрузит ваши настройки из " +"предыдущей сессии. Также вы можете сохранить все ваши текущие настройки в " +"профили запуска." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Главная страница отображает приложения с выходными аудио-потоками" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Страница усиления басов отображает настройки аудио" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "Страница конвольвера отображает настройки аудио" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Возможности:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Исправление ошибок:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" +"Исправлена небольшая ошибка, из-за которой порог голосовой активности " +"шумоподавления не инициализировался должным образом." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Другие изменения:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" +"В плагин шумоподавления добавлен новый элемент управления, позволяющий " +"отключить определение голоса." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" +"Эффект фильтрации был расширен новыми параметрами, так как он был перенесён " +"из Calf Studio в Linux Studio Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" +"Шумоподавление с помощью RNNoise было улучшено благодаря добавлению " +"регуляторов Восстановление и Порог определения голосовой активности." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" +"Шумоподавление с помощью RNNoise теперь позволяет смешивать исходный и " +"шумоочищенный сигналы, чтобы избежать слишком «сухого» звучания на выходе." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" +"Этот выпуск предназначен для работы с версиями Linux Studio Plugins «1.2.10» " +"и выше." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "EasyEffects теперь можно собирать и с помощью libc++." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "Расширитель от Linux Studio Plugins можно использовать в Easy Effects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" +"Полосы эквалайзера теперь имеют дополнительный регулятор усиления, " +"позволяющий более точно вводить значения, которые трудно задать в шкале. " +"Подробности в проблеме 1383." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" +"Добавлена возможность выбора и загрузки нескольких файлов в окнах открытия " +"предустановок, импульсных откликов Convolver и моделей RNNoise." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "Исправлена кнопка Соло в настройках полосы эквалайзера." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" +"Папки Easy Effects в каталоге /etc были устаревшими, и расположенные в них " +"предустановки больше не будут загружаться. Теперь в меню предустановок " +"автоматически загружаются только локальные предустановки из папки ~/.config/" +"easyeffects. В будущем будет реализована новая система установки, управления " +"и импорта предустановок от сообщества." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "В окно настроек добавлен раздел «Испытательные возможности»." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" +"Теперь можно использовать родное окно плагинов LSP. Это пробная функция " +"только для опытных пользователей, поэтому в ней возможны ошибки." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" +"Теперь можно использовать дробные значения полутонов в эффекте Pitch Shift." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" +"Выпадающий список устройств входа/выхода на вкладке PipeWire обновляется при " +"изменении системного устройства по умолчанию и включении параметра " +"«Использовать стандартный». Это исправляет проблему 1989." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "Добавлен новый плагин Уровнемер на основе libebur128." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" +"Плагин Высота тона теперь использует библиотеку SoundTouch вместо " +"Rubberband. Надеемся, что некоторые загадочные сбои, которые происходили с " +"Rubbernand, больше не повторятся." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "Улучшена совместимость с последними версиями PipeWire. Подробности в" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" +"Фильтры активного Эквалайзера больше не устанавливаются в тип Колокольчик " +"при изменении числа полос." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" +"Rabberband больше не является зависимостью, поскольку он был заменён на " +"SoundTouch." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" +"Меню предустановок теперь запрашивает подтверждение перед сохранением/" +"удалением файла предустановки." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" +"Перезагрузка плагина больше не должна делать его элементы управления " +"неработоспособными." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" +"Speex больше не является зависимостью сборки (speexdsp по-прежнему является)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" +"RNNoise больше не является автозависимостью. Теперь он требуется по " +"умолчанию, если он недоступен, его необходимо явно отключить с помощью -" +"Denable-rnnoise=false" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "Обновлённые переводы." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" +"В последнем выпуске была допущена небольшая ошибка. В новом выпуске у людей " +"будет нужная ветка в пакете" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" +"Функция эквалайзера «сортировать полосы» теперь упорядочивает полосы в " +"GSettings, так что результат можно хранить в предустановках." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "Улучшена производительность при сбросе клавиш." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" +"Исправлен выбор предустановки «Большой пустой зал» в эффекте реверберации." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" +"Исправлены некоторые огрехи в API PipeWire, что потенциально может поправить " +"различные ошибки, с которыми сталкивались пользователи." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" +"Поскольку мы удаляем код, устаревший в GTK 4.10, минимальная версия GTK была " +"увеличена." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" +"Улучшена частота обновления плагинов спектра. Различные частоты " +"дискретизации должны теперь визуально приводить к одинаковым частотам " +"обновления." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" +"Интервал обновления, используемый уровнемерами и спектром, может быть " +"настроен пользователем." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" +"Значение ползунка усиления полосы эквалайзера может обновляться с большими " +"шагами. Тонкое управление по-прежнему возможно с помощью клавиш вверх/вниз " +"на клавиатуре." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "Небольшие улучшения в эхоподавителе." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" +"После перехода на использование нескольких фильтров датчики эхоподавителя не " +"были связаны со звуковой картой. Теперь это должно быть исправлено." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" +"Теперь в канал обработки эффектов можно добавить более одного экземпляра " +"фильтра." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"Добавлен новый плагин «Речевой процессор», основанный на библиотеке Speex. " +"Помимо обеспечения подавления шума, он также может обнаруживать голосовую " +"активность. Это достойная альтернатива в тех случаях, когда библиотека " +"rnnoise не работает должным образом." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "Улучшена совместимость с Linux Studio Plugins 1.2.3." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "Пресдустановки GraphicEQ можно импортировать в эффект эквалайзера." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"Название приложения было изменено на «Easy Effects», чтобы соответствовать " +"соглашениям об именовании GNOME Human Interface Guidelines." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "Документация была обновлена." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "Улучшена автозагрузка предустановок." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "Порог тишины автоусилителя теперь может быть настроен пользователем." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" +"В эффект Stereo Tools добавлены элементы управления оригинальным и " +"обработанным сигналами." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" +"В эхоподавителе появился элемент управления остаточным шумоподавлением, " +"основанный на библиотеке Speex." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" +"При наведении мыши на график отображалось неверное значение координаты оси " +"X. Эта регрессия исправлена." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"Из-за новой функции множественных экземпляров формат предустановок " +"изменился, но старый формат по-прежнему поддерживается для загрузки. В любом " +"случае следует учитывать, что сохранение текущей предустановки всегда будет " +"записывать её в новом формате." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" +"Реализация многополосного пропускного уровня была перенесена из CALF в Linux " +"Studio Plugins." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"Улучшена совместимость кода автозагрузки предустановок с устройствами bluez5." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" +"Для некоторых плагинов добавлены элементы управления оригинальным/" +"обработанным сигналами" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"Интерфейс эффектов больше не загружается, если в системе не установлен " +"соответствующий плагин lv2. Вместо него пользователю показывается сообщение " +"о состоянии." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "Документация была обновлена" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "Улучшены отладочные сообщения" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Обновлены переводы" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Улучшены переводы" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Исправлена ошибка, при которой EasyEffects мог аварийно закрывать своё окно " +"во время применения эффектов." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" +"Состояние обхода может быть сохранено в файл предустановок. Причины данного " +"решения можно посмотреть в ошибке 1039" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" +"Была улучшена кодовая база автозагрузки предустановок для лучшей " +"совместимости с USB-устройствами." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" +"Пользователю выводится сообщение, если загрузка предустановки не удалась, " +"или предустановку/файл импульса не удалось импортировать." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"Теперь используется плагин SideChain Gate из набора «Linux Studio Plugins» " +"взамен Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" +"EasyEffects больше не должен падать, если язык пользователя не был правильно " +"настроен." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"Был реализован обходной механизм для отображения иконки, необходимый из-за " +"посредственной поддержки SVG в QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"Когда для приложения отключены эффекты, мы устанавливаем значение его " +"метаданных равным null. Это позволяет менеджеру медиа (wireplumber) " +"корректно переместить аудиопоток на новое устройство." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"Были добавили новые настройки конфигурации. Они позволят EasyEffects " +"игнорировать потоки, которые он создаёт сам. Это должно исправить некоторые " +"проблемы, которые возникали у пользователей в работе с OBS." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "Был улучшен код, ответственный за отображение потока" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"Теперь использование библиотеки rnnoise является опциональным. Это должно " +"помочь кураторам в сборке пакетов для Debian. Подробности в ошибке 1000." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" +"Теперь в наших отчётах отображается строка кода, ответственная за вывод " +"сообщения" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"Флаг \"включить эффекты\" в нашем окне не обновлялся, когда сторонние " +"приложения вроде pavucontrol перемещали поток с наших виртуальных устройств. " +"Теперь должно работать корректно." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" +"Исправлен вылет, происходивший при изменении исторического максимума " +"автоусилителя." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "Предотвращены вылеты, когда запущен pw-mididump" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "Улучшен интерфейс плагина высоты тона" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" +"Значок нашего приложения теперь совместим с рабочими столами, использующими " +"QT" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"Наш код чёрного списка будет использовать тег «application.id», если поток " +"укажет его" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"Во избежание проблем с прокруткой списка «Проигрыватели/рекордеры», в этой " +"вкладке больше не отображается шкала громкости. Подробнее о проблеме и " +"возможные решения можно посмотреть в ошибках 1211 и 1427" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"Когда ни одно приложение не доступно для отображения в «Проигрывателях/" +"рекордерах», пользователю будет показано сообщение" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "Крупное обновление переводов" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"Исправлена ошибка, при которой EasyEffeects аварийно завершал работу, когда " +"изменялось количество точек, отображаемых в спектре, в то время как виджет " +"отображения спектра был видим и канал обработки был активен" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" +"Значение задержки канала обработки, отображаемое в нашем окне, могло быть " +"неверным в некоторых ситуациях. Это было исправлено." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" +"Добавлена новая настройка, позволяющая пользователю установить время простоя " +"для канала обработки. Когда ни один из клиентов не проигрывает или не " +"записывает поток с наших устройств, фильтры будут отключены по истечению " +"указанного периода. Это сделано для того, чтобы CPU не тратил время впустую " +"на обработку тишины." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"Плагин автоусиления громкости теперь позволяет пользователю выбрать один из " +"трёх уровней для расчёта среднего геометрического." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"Плагин автоусиления громкости теперь позволяет устанавливать максимальную " +"историю и больше не использует режим гистограммы «libebur128». Это должно " +"решить проблему, когда громкость застревала на одном уровне." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"Значок EasyEffects был обновлён таким образом, чтобы сделать его видимым на " +"рабочих столах QT." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" +"Параметр командной строки, возвращающий состояние глобального обхода, снова " +"работает." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Фильтр перекрёстной подачи должен лучше работать с динамическим изменением " +"задержек PipeWire. Больше не должны возникать ситуации, приводящие к скачкам " +"громкости." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" +"Исправлена ошибка, не дававшая моно-микрофонам корректно работать с " +"EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "Поддержка PipeWire версии 0.3.44" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"Фильтр автоусилителя должен лучше работать с динамическим изменением " +"задержек PipeWire. Теперь ситуации со скачками уровня громкости больше не " +"должны возникать." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"Мы добавили опцию, позволяющую сбрасывать уровень громкости и заглушение " +"устройства во время запуска EasyEffects. Это должно помочь в случае, когда " +"ваши устройства по неизвестным причинам заглушаются аудио-сервером." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Улучшена поддержка спящего режима." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"Исправлена ошибка, при которой попытка создать профиль для автозагрузки, не " +"имеющий предустановок, приводила к вылету приложения." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" +"Исправлена ошибка, при которой установка полосы эквалайзера в «ноль» " +"приводила к аварийному завершению приложения." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita используется для создания некоторых частей окна приложения и " +"управления переключением между тёмной и светлой темами." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" +"Дизайн меню настроек приложения был изменен с использованием виджетов " +"LibAdwaita." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"Функция импорта предустановок для Equalizer APO была улучшена: теперь " +"возможно применить не только \"Bell\", но и другие поддерживаемые фильтры " +"(На текущий момент, из плагинов LSP не доступен только фильтр Bandpass)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" +"Функция «Сброс всех настроек» в меню теперь должна работать и с Flatpak." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"Теперь у нас есть новая опция, которая позволяет пользователю отключить " +"автоскрытие меню. Это должно помочь обойти некоторые ошибки наложения, " +"имеющиеся в gtk4." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" +"Большинство сложных для обработки при импорте предустановок APO, сохранены с " +"использованием запятой в качестве разделителя в центральный полосе частот." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"Библиотека fmt является новой зависимостью, поскольку компилятор C++ на " +"данный момент не может реализовать её возможности. Поддержка ожидается в " +"ближайшие несколько лет." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM и GLIBMM больше не являются зависимостями. Теперь мы используем gtk4 " +"напрямую." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"Теперь вы можете объединять характеристики импульсов в интерфейсе " +"Конвольвера. Новые файлы импульсов созданы и должны быть видны в списке." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"Улучшена отрисовка горизонтальной оси внутри окна. Теперь число элементов " +"изменяется динамически в зависимости от ширины окна." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"Была обновлена пользовательская документация в связи с добавлением в " +"EasyEffects новых возможностей. Старые отсылки к PulseEffects были удалены. " +"Кнопка для вызова документации была добавлена в качестве секции Меню." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"Когда регулятор установлен в положение, превышающее возможное значение, он " +"будет обновлён до наименьшего/высшего значения, наиболее соответствующего " +"предыдущему." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"Окно приложения теперь запоминает своё состояние, и будет восстановлено при " +"его следующем открытии." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "Библиотека tbb теперь является новой зависимостью" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" +"Плагины Лимитер и Многополосный компрессор теперь могут использоваться в " +"качестве опциональной внешней боковой цепи." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" +"Плагин автоусиления громкости теперь позволяет пользователям выбрать, какая " +"громкость будет использоваться в качестве значения для коррекции её уровня." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" +"Функция импорта предустановок APO для плагина Эквалайзера, теперь считывает " +"параметры Предусиления." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" +"Теперь в главных настройках можно выбрать Кубический Уровень в качестве " +"опции." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" +"Плагин спектра должен осуществлять проброс, когда он станет не видимым, но " +"это произойдёт только после закрытия окна." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "Улучшена поддержка Assistive Technology." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" +"Датчики, используемые в некоторых фильтрах, таких как Компрессор и Лимитер, " +"не пересоединялись после изменения порядка плагинов в канале обработки. " +"Теперь всё должно работать." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" +"Монитор источников PipeWire был исключён и удалён из списка приложений." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "Ожидается, что сбои, подобные сообщённым в проблеме 1172, исправлены." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" +"Предотвращена ошибка, связанная со Спектром, приводящая к аварийному " +"завершению приложения." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"Pavucontrol больше не указывается в списке приложений с источниками " +"аудиопотоков в системах, локализация которых отличается от английской." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"Улучшена совместимость с WirePlumber. Это необходимо для работы на системах, " +"которые решили использовать его вместо встроенного менеджера сессий " +"PipeWire. Подробности в проблеме 1144." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"При попытке добавить профиль для автозагрузки для устройства, находящегося в " +"списке, его цель будет обновлена. С помощью этого, мы сможем изменять " +"предустановки профиля без необходимости удалять и пересоздавать его заново." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"Реализация поддержки автозагрузки предустановок была снова переработана. " +"Теперь она должна работать на большем количестве оборудования. Подробности в " +"проблеме 1051." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"Лимитер и Максимизатор теперь устанавливаются в последнюю позицию цепочки " +"плагинов. Новые плагины добавляются в предыдущую секцию с целью " +"предотвращения порчи оборудования чрезмерным выходным уровнем громкости." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" +"При удалении приложения из чёрного списка, его предшествующее состояние " +"будет восстановлено." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"Иногда, во время удаления импортированной модели в плагине шумоподавления, " +"текущая используемая модель не обновлялась корректно. Теперь должно работать " +"как положено." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" +"Во время правки файла предустановок во внешнем редакторе, повторяющиеся " +"параметры не будут отображаться в меню." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" +"Теперь чёрный список правильно устанавливается при смене предустановок." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" +"Теперь статус при нажатии на кнопку глобального обхода корректно " +"отображается при смене набора плагинов." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" +"Отсутствующие в системе значки не должны отображаться в пользовательском " +"интерфейсе информации о приложении (если значок приложения все ещё не " +"отображается, даже если вы уверены, что оно правильно установлено, " +"пожалуйста, откройте проблему)." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"Некоторые значки, которые не отображались в окружении рабочего стола Plasma " +"с темой Breeze, теперь должны отображаться." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Обновлён китайский перевод." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "Обновлён итальянский перевод." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "В компрессор добавлена поддержка параметра «Величина усиления»" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"Плагин многополосного компрессора теперь использует плагин стерео " +"многополосного компрессора из набора плагинов Linux Studio Plugins взамен " +"Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"Плагин лимитера теперь использует стерео плагин лимитера из набора Linux " +"Studio Plugins взамен Calf Studio." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"Наборы LV2 фильтров отображаются в графе PipeWire только во время первой " +"загрузки. Однажды загруженные, они останутся включёнными до тех пор пока " +"EasyEffects продолжает работу." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "Теперь для модуля эхоподавления возможно установить частотный спектр." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" +"Уровень порогового значения в плагине антишипения (деэссера) теперь " +"сохраняется в файле предустановки." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" +"Улучшено полосное разделение для кристаллизатора с новыми значениями " +"интенсивности по умолчанию." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" +"Зависимости во входных и выходных уровнях громкости теперь коррелируют со " +"значениями регулятора, которые ранее нельзя было выровнять." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" +"При добавлении новых полос в эквалайзер их значение равно «Колокол» вместо " +"«Отключено»." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" +"Предустановки для Эквалайзера APO теперь работают корректно с языками, " +"отличными от С." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" +"Улучшено взаимодействие между точками пересечения портов фильтров в PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" +"Ранее, усиление сигнала в плагине кристаллизатора было слишком высоким. " +"Установлены более адекватные значения." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "Улучшена работа ресемлера с некоторыми плагинами (rnnoise и пр.)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" +"Установка множества предустановок для автозагрузки теперь должно работать " +"корректно" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" +"Временные окна для взаимодействия с некоторыми плагинами теперь работают " +"корректно" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"Меню импульсного отклика конвольвера было улучшено для устранения проблемы, " +"когда файлы импульсов не загружались, если в меню был доступен только один, " +"см. проблему 1011" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" +"Исправлена ошибка, при которой плагин высоты тона не мог правильно " +"инициализироваться" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" +"Предупреждение о переполнении больше не должно менять расположение соседних " +"виджетов" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "Исправлен перевод некоторых виджетов" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "Исправлено неправильное выравнивание некоторых виджетов" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" +"Плагин Loudness снова используется по причинам, описанным в проблеме 820. " +"Это означает, что он снова является необязательной зависимостью." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" +"Исправлена ошибка сегментирования, возникавшая в случае, когда опциональные " +"зависимости не были установлены" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "Улучшен интерфейс эквалайзера." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" +"Теперь используется компрессор боковой цепи LSP, что позволяет пользователю " +"выбирать внешний источник в качестве боковой цепи входа." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "Теперь поддерживается режим усиления компрессора LSP." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" +"Когда «разделить каналы» активировано в эквалайзере, предустановки " +"импортированные из APO будут применены только к каналу, отображаемому в " +"окне. Это позволяет применять различные предустановки для каждого канала " +"вместо установки одинакового значения в обоих каналах." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" +"Исправлены ошибки сегментирования, возникавшие при создании или удалении " +"предустановок, используемых для автозагрузки" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" +"Этот выпуск является одним из самых крупных, что мы делали за всё время. " +"Объём изменений обширен, поэтому очень трудно описать их все." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" +"Ниже перечислены только самые важные из них. Люди, интересующиеся историей, " +"которая привела нас сюда, могут заглянуть в проблемы 904 и 874." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" +"Название приложения и его репозитория было изменено с PulseEffects на " +"EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 был заменён на gtkmm4" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Фильтры GStreamer были заменены на собственные фильтры PipeWire." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" +"Множество возможностей были переписаны с нуля. Например предустановки для " +"автозагрузки. Другие изменения, которые стоит упомянуть, можно увидеть в " +"меню выбора плагинов. Теперь пользователь может отобразить в окне только те " +"плагины, которые посчитает необходимыми." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" +"Библиотека Boost более не является зависимостью. Ценой данного решения " +"является небольшое изменение структуры предустановок. Имея немного терпения, " +"можно отредактировать предустановки PulseEffects в любом текстовом " +"редакторе, чтобы сделать их совместимыми с EasyEffects. Надеемся, кто-нибудь " +"создаст скрипт для автоматизации данной возможности." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"Наличие некоторых новых библиотек, ранее считавшиеся опциональными, теперь " +"является обязательным" + +#~ msgid "This release adds the following features:" +#~ msgstr "Этот выпуск привносит следующие возможности:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Этот выпуск исправляет следующие ошибки:" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "вкладка больше не показывает шкалу громкости. Подробнее о проблеме и её " +#~ "решении можно узнать в #1211" + +#~ msgid "and #1427" +#~ msgstr "и #1427" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "наш канал обработки был активен, и виджет спектра отображался" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Появился новый параметр, позволяющая пользователю выбирать тайм-аут " +#~ "бездействия для канала обработки. Когда ни один клиент не играет" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "или записывает с наших устройств, фильтры будут отключены после " +#~ "достижения тайм-аута. Это делается для уверенности в том, что" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "не тратится мощность процессора на обработку тишины." + +#~ msgid "mean." +#~ msgstr "геометрического." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Это поможет избегать случаев, когда «встроенная» громкость навсегда " +#~ "застревает на одном и том же значении." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "В этом выпуске исправлены следующие ошибки:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Этот выпуск добавляет следующие возможности:" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "менеджера управления сессиями PipeWire. Больше информации в отчете [1144]" + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Потерянные системные значки теперь не должны отображаться внутри " +#~ "пользовательского интерфейса приложения" + +#~ msgid "a look at and" +#~ msgstr "и опробуйте их" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Эквалайзер, компрессор и прочие звуковые эффекты" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "лимитер;компрессор;ребербатор;эквалайзер;автогромкость;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Предустановки\"" + +#~ msgid "Enable" +#~ msgstr "Включить" + +#~ msgid "Exclude" +#~ msgstr "Исключить" + +#~ msgid "Mute Application" +#~ msgstr "Заглушить Приложение" + +#~ msgid "Application Volume" +#~ msgstr "Громкость Приложения" + +#~ msgid "_Preferences" +#~ msgstr "_Настройки" + +#~ msgid "_Manual" +#~ msgstr "_Руководство" + +#~ msgid "_Shortcuts" +#~ msgstr "_Горячие клавиши" + +#~ msgid "_Reset Settings" +#~ msgstr "_Сброс настроек" + +#~ msgid "_About EasyEffects" +#~ msgstr "_О программе EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Предустановки" + +#~ msgid "Presets Menu" +#~ msgstr "Меню предустановок" + +#~ msgid "Global Bypass" +#~ msgstr "Общий обход" + +#~ msgid "Primary Menu" +#~ msgstr "Главное меню" + +#~ msgid "EasyEffects Window" +#~ msgstr "Окно EasyEffects" + +#~ msgid "Applications List" +#~ msgstr "Список приложений" + +#~ msgid "Empty List" +#~ msgstr "Пустой список" + +#~ msgid "No Audio Application Available" +#~ msgstr "Нет доступных приложений аудио" + +#~ msgid "Target" +#~ msgstr "Целевая громкость" + +#~ msgid "Maximum History" +#~ msgstr "Исторически максимальный" + +#~ msgid "Reference" +#~ msgstr "База" + +#~ msgid "Momentary" +#~ msgstr "Моментальные измерения" + +#~ msgid "Short-Term" +#~ msgstr "Краткосрочные измерения" + +# Время интеграции — это величина, характеризующая быстродействие измерителя. +# https://tech.ebu.ch/docs/factsheets/Factsheet-R128-2011-RUS.pdf +# В документе выше переводчик перевел 'Integrated' как 'Интегрированные', +# хотя сам же написал, что это "измерения от начала до конца" +# Яндекс.Переводчик перевел лучше — "Комплексные измерения" +#~ msgid "Integrated" +#~ msgstr "Комплексные измерения" + +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Среднее геометрическое (MSI)" + +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Среднее геометрическое (MS)" + +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Среднее геометрическое (MI)" + +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Среднее геометрическое (SI)" + +# #, fuzzy +#~ msgid "Reset History" +#~ msgstr "Сброс истории" + +#~ msgid "Relative" +#~ msgstr "Относительное значение" + +# ??? Не уверен в переводе +#~ msgid "Range" +#~ msgstr "Диапазон" + +#~ msgid "Loudness" +#~ msgstr "Громкость" + +#~ msgid "Output Gain" +#~ msgstr "Усиление выхода" + +# ############################################### +# https://github.com/wwmm/easyeffects/pull/289 +# Left here for future thinking +# msgid "Influence of measurements with momentary integration time" +# msgstr "Влияние измерений с моментальным временем интеграции" +# msgid "Influence of measurements with short integration time" +# msgstr "Влияние измерений с малым временем интеграции" +# msgid "Influence of integrated measurements" +# msgstr "Влияние комплексных измерений" +# ############################################### +#~ msgid "Input" +#~ msgstr "Вход" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Усиление входа" + +#~ msgid "Output" +#~ msgstr "Выход" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Усиление выхода" + +#~ msgid "Reset" +#~ msgstr "Сброс" + +#~ msgid "Using" +#~ msgstr "Используется" + +# #, fuzzy +#~ msgid "Device" +#~ msgstr "Устройство" + +#~ msgid "Name" +#~ msgstr "Название" + +#~ msgid "Profile" +#~ msgstr "Профиль" + +#~ msgid "Preset" +#~ msgstr "Предустановка" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Удалить автозагрузку предустановки" + +#~ msgid "Listen" +#~ msgstr "Прослушать" + +#~ msgid "Blend Harmonics" +#~ msgstr "Смешение гармоник" + +#~ msgid "3rd" +#~ msgstr "3-ий" + +#~ msgid "2nd" +#~ msgstr "2-ой" + +#~ msgid "Amount" +#~ msgstr "Величина" + +#~ msgid "Harmonics" +#~ msgstr "Гармоники" + +#~ msgid "Scope" +#~ msgstr "Диапазон частот" + +#~ msgid "Floor" +#~ msgstr "Нижний порог" + +#~ msgid "Floor Value" +#~ msgstr "Величина нижнего порога" + +#~ msgid "Link" +#~ msgstr "Указатель" + +#~ msgid "Application Name" +#~ msgstr "Название приложения" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "Добавить в чёрный список приложений" + +#~ msgid "Excluded Applications List" +#~ msgstr "Чёрный список приложений" + +#~ msgid "Show Excluded Applications" +#~ msgstr "Отобразить чёрный список приложений" + +#~ msgid "Compressor" +#~ msgstr "Компрессор" + +#~ msgid "Mode" +#~ msgstr "Режим" + +#~ msgid "Downward" +#~ msgstr "Нисходящий" + +#~ msgid "Upward" +#~ msgstr "Восходящий" + +#~ msgid "Boosting" +#~ msgstr "Усиление" + +#~ msgid "Compression Mode" +#~ msgstr "Режим сжатия" + +#~ msgid "Boost Threshold" +#~ msgstr "Порог усиления" + +#~ msgid "Boost Amount" +#~ msgstr "Величина Усиления" + +#~ msgid "Attack" +#~ msgstr "Атака" + +#~ msgid "Time" +#~ msgstr "Время" + +#~ msgid "Threshold" +#~ msgstr "Порог срабатывания" + +#~ msgid "Attack Time" +#~ msgstr "Время атаки" + +#~ msgid "Attack Threshold" +#~ msgstr "Порог атаки" + +#~ msgid "Release" +#~ msgstr "Восстановление" + +#~ msgid "Release Time" +#~ msgstr "Время восстановления" + +#~ msgid "Release Threshold" +#~ msgstr "Порог восстановления" + +#~ msgid "Ratio" +#~ msgstr "Степень сжатия" + +#~ msgid "Knee" +#~ msgstr "Колено (излом)" + +#~ msgid "Makeup" +#~ msgstr "Усиление вверх" + +# #, fuzzy +#~ msgid "Sidechain" +#~ msgstr "Сайдчейн" + +#~ msgid "Peak" +#~ msgstr "Пик" + +#~ msgid "RMS" +#~ msgstr "RMS (среднеквадратичный уровень сигнала)" + +#~ msgid "Low-Pass" +#~ msgstr "Фильтр НЧ" + +#~ msgid "Uniform" +#~ msgstr "Равномерно" + +# #, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Режим сайдчейна" + +# #, fuzzy +#~ msgid "Source" +#~ msgstr "Источник" + +#~ msgid "Middle" +#~ msgstr "Средний" + +# #, fuzzy +#~ msgid "Side" +#~ msgstr "Боковой" + +#~ msgid "Left" +#~ msgstr "Левый" + +#~ msgid "Right" +#~ msgstr "Правый" + +# #, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Источник сайдчейна" + +#~ msgid "Type" +#~ msgstr "Тип" + +#~ msgid "Feed-forward" +#~ msgstr "Прямая связь" + +#~ msgid "Feed-back" +#~ msgstr "Обратная связь" + +#~ msgid "External" +#~ msgstr "Внешний" + +# #, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Тип сайдчейна" + +# #, fuzzy +#~ msgid "Input Device" +#~ msgstr "Устройство ввода" + +#~ msgid "PreAmplification" +#~ msgstr "Предусиление" + +#~ msgid "Reactivity" +#~ msgstr "Скорость реакции" + +#~ msgid "Lookahead" +#~ msgstr "Задержка (lookahead)" + +# #, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Фильтры сайдчейна" + +#~ msgid "High-Pass" +#~ msgstr "Фильтр ВЧ" + +#~ msgid "Frequency" +#~ msgstr "Частота" + +#~ msgid "Off" +#~ msgstr "Откл" + +#~ msgid "12 dB/oct" +#~ msgstr "12 Дб/окт" + +#~ msgid "24 dB/oct" +#~ msgstr "24 Дб/окт" + +#~ msgid "36 dB/oct" +#~ msgstr "36 Дб/окт" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Режим высокочастотного фильтра" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Частота высокочастотного фильтра" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Режим низкочастотного фильтра" + +#~ msgid "Gain" +#~ msgstr "Усиление" + +#~ msgid "Envelope" +#~ msgstr "Огибающая" + +#~ msgid "Curve" +#~ msgstr "Кривая" + +#~ msgid "L" +#~ msgstr "Л" + +#~ msgid "Left Channel" +#~ msgstr "Левый Канал" + +#~ msgid "R" +#~ msgstr "П" + +#~ msgid "Right Channel" +#~ msgstr "Правый Канал" + +#~ msgid "Impulses" +#~ msgstr "Импульсы" + +#~ msgid "Combine" +#~ msgstr "Объединить" + +#~ msgid "Stereo Width" +#~ msgstr "Ширина стерео" + +#~ msgid "Spectrum" +#~ msgstr "Спектр" + +#~ msgid "Log Scale" +#~ msgstr "Логарифмическая шкала" + +#~ msgid "Autogain" +#~ msgstr "Нормализация громкости" + +#~ msgid "Rate" +#~ msgstr "Частота" + +#~ msgid "Samples" +#~ msgstr "Образцы" + +#~ msgid "Duration" +#~ msgstr "Длительность" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "Объединить импульсные характеристики" + +#~ msgid "First Kernel" +#~ msgstr "Первое ядро" + +#~ msgid "Second Kernel" +#~ msgstr "Второе ядро" + +#~ msgid "Output File Name" +#~ msgstr "Имя файла на выходе" + +#~ msgid "Combined Kernel Name" +#~ msgstr "Имя суммарного ядра" + +#~ msgid "Import Impulse" +#~ msgstr "Импортировать импульс" + +#~ msgid "Search" +#~ msgstr "Поиск" + +#~ msgid "Search Impulse File" +#~ msgstr "Поиск файла импульса" + +#~ msgid "Impulse Files List" +#~ msgstr "Список файлов импульса" + +#~ msgid "Default" +#~ msgstr "По умолчанию" + +#~ msgid "Cutoff" +#~ msgstr "Усечение" + +#~ msgid "Feed" +#~ msgstr "Подача" + +#~ msgid "Bypass" +#~ msgstr "Обход" + +#~ msgid "Mute" +#~ msgstr "Приглушить" + +#~ msgid "Detection" +#~ msgstr "Определение" + +#~ msgid "Wide" +#~ msgstr "Ширина" + +#~ msgid "Split" +#~ msgstr "Частота раздела" + +#~ msgid "F1 Split" +#~ msgstr "Ч1 раздела" + +#~ msgid "Frequency 1 Split" +#~ msgstr "Частота 1 раздела" + +#~ msgid "F2 Peak" +#~ msgstr "Ч1 пик" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "Частота 2 пик" + +#~ msgid "F1 Gain" +#~ msgstr "Ч1 усиление" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "Частота 1 усиление" + +#~ msgid "F2 Level" +#~ msgstr "Ч2 уровень" + +#~ msgid "Frequency 2 Level" +#~ msgstr "Частота 2 уровень" + +#~ msgid "F2 Peak Q" +#~ msgstr "Ч2 пик добротности" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Частота 2 пик добротности" + +#~ msgid "Laxity" +#~ msgstr "Допуск на срабатывание" + +#~ msgid "Detected" +#~ msgstr "Определено" + +#~ msgid "Reduction" +#~ msgstr "Ослабление" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Frame Size" +#~ msgstr "Размер кадра" + +#~ msgid "Filter Length" +#~ msgstr "Длина фильтра" + +#~ msgid "Excluded Apps" +#~ msgstr "Приложения чёрного списка" + +#~ msgid "Bands" +#~ msgstr "Число полос" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Разделить каналы" + +#~ msgid "Flat Response" +#~ msgstr "Плоская АЧХ" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Подсчитать частоты" + +#~ msgid "Load APO Preset" +#~ msgstr "Загрузить предустановку APO" + +#~ msgid "Bell" +#~ msgstr "Колокол" + +#~ msgid "High Pass" +#~ msgstr "Высокочастотный фильтр" + +#~ msgid "High Shelf" +#~ msgstr "Высокочастотный полочный фильтр" + +#~ msgid "Low Pass" +#~ msgstr "Фильтр низких частот" + +#~ msgid "Low Shelf" +#~ msgstr "Низкочастотный полочный фильтр" + +#~ msgid "Notch" +#~ msgstr "Вырез" + +#~ msgid "Resonance" +#~ msgstr "Резонансы" + +#~ msgid "All Pass" +#~ msgstr "Фазовый" + +#~ msgid "Band Type" +#~ msgstr "Тип полосы" + +#~ msgid "Band Mode" +#~ msgstr "Режим полосы" + +#~ msgid "Slope" +#~ msgstr "Наклон" + +#~ msgid "Band Slope" +#~ msgstr "Наклон полосы" + +#~ msgid "Width" +#~ msgstr "Ширина" + +#~ msgid "Quality" +#~ msgstr "Качество" + +#~ msgid "Solo" +#~ msgstr "Соло" + +#~ msgid "Ceil" +#~ msgstr "Потолок" + +#~ msgid "Ceil Value" +#~ msgstr "Величина потолка" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "Доступ" + +#~ msgid "Description" +#~ msgstr "Описание" + +#~ msgid "Remove this model file" +#~ msgstr "Удалить этот файл модели" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12 дБ/окт фильтр НЧ" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24 дБ/окт фильтр НЧ" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36 дБ/окт фильтр НЧ" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12 дБ/окт фильтр ВЧ" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24 дБ/окт фильтр ВЧ" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36 дБ/окт фильтр ВЧ" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6 дБ/окт полосовой" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12 дБ/окт полосовой" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18 дБ/окт полосовой" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6 дБ/окт полосно-заграждающий" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12 дБ/окт полосно-заграждающий" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18 дБ/окт полосно-заграждающий" + +#~ msgid "Inertia" +#~ msgstr "Инертность" + +# http://wikisound.org/Гейт: шумовой гейт или просто гейт — это электронное устройство или плагин динамической обработки, который используется для контроля уровня звукового сигнала. Гейт пропускает или глушит сигнал в зависимости от установленного порогового значения. Он очень часто используется для подавления шума в паузах. +#~ msgid "Gate" +#~ msgstr "Шумовые ворота (гейт)" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Время восстановления" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Внешний" + +#~ msgid "Gating" +#~ msgstr "Гейтинг" + +#~ msgid "Oversampling" +#~ msgstr "Передискретизация" + +#~ msgid "Dither" +#~ msgstr "Подмешивание шума" + +#~ msgid "Herm Thin" +#~ msgstr "Эрмит узкий" + +#~ msgid "Herm Wide" +#~ msgstr "Эрмит широкий" + +#~ msgid "Herm Tail" +#~ msgstr "Эрмит хвост" + +#~ msgid "Herm Duck" +#~ msgstr "Эрмит нос" + +#~ msgid "Exp Thin" +#~ msgstr "Эксп. узкий" + +#~ msgid "Exp Wide" +#~ msgstr "Эксп. широкий" + +#~ msgid "Exp Tail" +#~ msgstr "Эксп. хвост" + +#~ msgid "Exp Duck" +#~ msgstr "Эксп. нос" + +#~ msgid "Line Thin" +#~ msgstr "Лин. узкий" + +#~ msgid "Line Wide" +#~ msgstr "Лин. широкий" + +#~ msgid "Line Tail" +#~ msgstr "Лин. хвост" + +#~ msgid "Line Duck" +#~ msgstr "Лин. нос" + +#~ msgid "None" +#~ msgstr "Нет" + +#~ msgid "Half x2(2L)" +#~ msgstr "Половинный x2(2L)" + +#~ msgid "Half x2(3L)" +#~ msgstr "Половинный x2(3L)" + +#~ msgid "Half x3(2L)" +#~ msgstr "Половинный x3(2L)" + +#~ msgid "Half x3(3L)" +#~ msgstr "Половинный x3(3L)" + +#~ msgid "Half x4(2L)" +#~ msgstr "Половинный x4(2L)" + +#~ msgid "Half x4(3L)" +#~ msgstr "Половинный x4(3L)" + +#~ msgid "Half x6(2L)" +#~ msgstr "Половинный x6(2L)" + +#~ msgid "Half x6(3L)" +#~ msgstr "Половинный x6(3L)" + +#~ msgid "Half x8(2L)" +#~ msgstr "Половинный x8(2L)" + +#~ msgid "Half x8(3L)" +#~ msgstr "Половинный x8(3L)" + +#~ msgid "Full x2(2L)" +#~ msgstr "Полный x2(2L)" + +#~ msgid "Full x2(3L)" +#~ msgstr "Полный x2(3L)" + +#~ msgid "Full x3(2L)" +#~ msgstr "Полный x3(2L)" + +#~ msgid "Full x3(3L)" +#~ msgstr "Полный x3(3L)" + +#~ msgid "Full x4(2L)" +#~ msgstr "Полный x4(2L)" + +#~ msgid "Full x4(3L)" +#~ msgstr "Полный x4(3L)" + +#~ msgid "Full x6(2L)" +#~ msgstr "Полный x6(2L)" + +#~ msgid "Full x6(3L)" +#~ msgstr "Полный x6(3L)" + +#~ msgid "Full x8(2L)" +#~ msgstr "Полный x8(2L)" + +#~ msgid "Full x8(3L)" +#~ msgstr "Полный x8(3L)" + +#~ msgid "SC PreAmp" +#~ msgstr "Усиление сайдчейна" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Предусиление сайдчейна" + +#~ msgid "Boost" +#~ msgstr "Усиление" + +# В данном режиме «Компрессор» обрабатывает сигналы сразу двух каналов (стерео), уравнивая их уровни. +#~ msgid "Stereo Link" +#~ msgstr "Стереосвязка" + +# #, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Внешняя Цепочка" + +#~ msgid "External Sidechain Source" +#~ msgstr "Источник Внешней Цепочки" + +#~ msgid "Auto Leveling" +#~ msgstr "Автовыравнивание" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "Атака автовыравнивания" + +#~ msgid "Auto Leveling Release" +#~ msgstr "Восстановление автовыравнивания" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "Колено автовыравнивания" + +#~ msgid "Gain Left" +#~ msgstr "Усиление левого" + +#~ msgid "Gain Right" +#~ msgstr "Усиление правого" + +# #, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Левый сайдчейн" + +# #, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Правый сайдчейн" + +#~ msgid "Standard" +#~ msgstr "Стандартный" + +#~ msgid "Flat" +#~ msgstr "Плоский" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "FFT Size" +#~ msgstr "Размер FFT" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Размер быстрого преобразования Фурье" + +#~ msgid "Output Volume" +#~ msgstr "Громкость на выходе" + +#~ msgid "Ceiling" +#~ msgstr "Верхний порог" + +#~ msgid "Operating Mode" +#~ msgstr "Режим работы" + +#~ msgid "Classic" +#~ msgstr "Классический" + +#~ msgid "Modern" +#~ msgstr "Современный" + +# #, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Усиление сайдчейна" + +#~ msgid "Pink BT" +#~ msgstr "БП розового" + +#~ msgid "Pink MT" +#~ msgstr "СП розового" + +#~ msgid "Brown BT" +#~ msgstr "БП коричневого" + +#~ msgid "Brown MT" +#~ msgstr "СП коричневого" + +#~ msgid "Bands List" +#~ msgstr "Полосы" + +#~ msgid "Band 1" +#~ msgstr "Полоса 1" + +#~ msgid "Band 2" +#~ msgstr "Полоса 2" + +#~ msgid "Band 3" +#~ msgstr "Полоса 3" + +#~ msgid "Band 4" +#~ msgstr "Полоса 4" + +#~ msgid "Band 5" +#~ msgstr "Полоса 5" + +#~ msgid "Band 6" +#~ msgstr "Полоса 6" + +#~ msgid "Band 7" +#~ msgstr "Полоса 7" + +#~ msgid "Band 8" +#~ msgstr "Полоса 8" + +#~ msgid "Band Start" +#~ msgstr "Начало полосы" + +#~ msgid "Band End" +#~ msgstr "Конец полосы" + +#~ msgid "Band Compression Mode" +#~ msgstr "Режим компрессии полосы" + +#~ msgid "Band Bypass" +#~ msgstr "Обход полосы" + +# #, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Параметры сайдчейна полосы" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Фильтр среза НЧ" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Частота фильтра среза НЧ" + +#~ msgid "High-Cut Filter" +#~ msgstr "Фильтр среза ВЧ" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Частота фильтра среза ВЧ" + +#~ msgid "PreAmp" +#~ msgstr "Предусиление" + +#~ msgid "Band Gain" +#~ msgstr "Усиление полосы" + +#~ msgid "Band Envelope" +#~ msgstr "Огибающая полосы" + +#~ msgid "Band Curve" +#~ msgstr "Кривая полосы" + +#~ msgid "Split Mode" +#~ msgstr "Режим раздела" + +#~ msgid "Split 1/2" +#~ msgstr "Разделение 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Частота раздела 1" + +#~ msgid "Split 2/3" +#~ msgstr "Разделение 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Частота раздела 2" + +#~ msgid "Split 3/4" +#~ msgstr "Разделение 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Частота раздела 3" + +#~ msgid "Sub Band" +#~ msgstr "Подполоса" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Полоса 1 обход" + +#~ msgid "Band 1 Solo" +#~ msgstr "Полоса 1 соло" + +#~ msgid "Band 1 Detection" +#~ msgstr "Полоса 1 обнаружение" + +#~ msgid "Band 1 Attack" +#~ msgstr "Полоса 1 атака" + +#~ msgid "Band 1 Release" +#~ msgstr "Полоса 1 восстановление" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Полоса 1 порог" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Полоса 1 соотношение" + +#~ msgid "Band 1 Knee" +#~ msgstr "Полоса 1 колено" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Полоса 1 усиление вверх" + +#~ msgid "Max Reduction" +#~ msgstr "Максимум подавления" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Полоса 1 макс. подавление" + +#~ msgid "Low Band" +#~ msgstr "Низкие частоты" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Полоса 2 обход" + +#~ msgid "Band 2 Solo" +#~ msgstr "Полоса 2 соло" + +#~ msgid "Band 2 Detection" +#~ msgstr "Полоса 2 обнаружение" + +#~ msgid "Band 2 Attack" +#~ msgstr "Полоса 2 атака" + +#~ msgid "Band 2 Release" +#~ msgstr "Полоса 2 восстановление" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Полоса 2 порог" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Полоса 2 соотношение" + +#~ msgid "Band 2 Knee" +#~ msgstr "Полоса 2 колено" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Полоса 2 усиление вверх" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Полоса 2 макс. подавление" + +#~ msgid "Mid Band" +#~ msgstr "Средние частоты" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Полоса 3 обход" + +#~ msgid "Band 3 Solo" +#~ msgstr "Полоса 3 соло" + +#~ msgid "Band 3 Detection" +#~ msgstr "Полоса 3 обнаружение" + +#~ msgid "Band 3 Attack" +#~ msgstr "Полоса 3 атака" + +#~ msgid "Band 3 Release" +#~ msgstr "Полоса 3 восстановление" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Полоса 3 порог" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Полоса 3 соотношение" + +#~ msgid "Band 3 Knee" +#~ msgstr "Полоса 3 колено" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Полоса 3 усиление вверх" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Полоса 3 макс. подавление" + +#~ msgid "High Band" +#~ msgstr "Высокие частоты" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Полоса 4 обход" + +#~ msgid "Band 4 Solo" +#~ msgstr "Полоса 4 соло" + +#~ msgid "Band 4 Detection" +#~ msgstr "Полоса 4 обнаружение" + +#~ msgid "Band 4 Attack" +#~ msgstr "Полоса 4 атака" + +#~ msgid "Band 4 Release" +#~ msgstr "Полоса 4 восстановление" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Полоса 4 порог" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Полоса 4 соотношение" + +#~ msgid "Band 4 Knee" +#~ msgstr "Полоса 4 колено" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Полоса 4 усиление вверх" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Полоса 4 макс. подавление" + +#~ msgid "General" +#~ msgstr "Общие" + +#~ msgid "Use Default Input" +#~ msgstr "Использовать стандартный вход" + +# #, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Выбрать устройство ввода" + +#~ msgid "Use Default Output" +#~ msgstr "Использовать стандартный выход" + +#~ msgid "Custom Output Device" +#~ msgstr "Выбрать устройство вывода" + +#~ msgid "Server Information" +#~ msgstr "Информация о сервере" + +#~ msgid "Header Version" +#~ msgstr "Версия оболочки" + +#~ msgid "Library Version" +#~ msgstr "Версия библиотеки" + +#~ msgid "Sampling Rate" +#~ msgstr "Частота дискретизации" + +#~ msgid "Minimum Quantum" +#~ msgstr "Минимальное квантование" + +#~ msgid "Maximum Quantum" +#~ msgstr "Максимальное квантование" + +#~ msgid "Default Quantum" +#~ msgstr "Стандартное квантование" + +#~ msgid "Output Devices" +#~ msgstr "Устройства вывода" + +#~ msgid "Output Presets" +#~ msgstr "Предустановки выхода" + +#~ msgid "Create Association" +#~ msgstr "Создать ассоциацию" + +#~ msgid "Add Autoloading Output Preset" +#~ msgstr "Добавить в автозагрузку предустановку выхода" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Список автозагружаемых предустановок выхода" + +# #, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Устройства ввода" + +#~ msgid "Input Presets" +#~ msgstr "Предустановки входа" + +#~ msgid "Add Autoloading Input Preset" +#~ msgstr "Добавить в автозагрузку предустановку входа" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Список автозагружаемых предустановок входа" + +#~ msgid "Modules" +#~ msgstr "Модули" + +#~ msgid "Modules List" +#~ msgstr "Список модулей" + +#~ msgid "Clients" +#~ msgstr "Клиенты" + +#~ msgid "Clients List" +#~ msgstr "Список клиентов" + +#~ msgid "Test Signal" +#~ msgstr "Проверочный сигнал" + +#~ msgid "State" +#~ msgstr "Состояние" + +#~ msgid "Enabled" +#~ msgstr "Включено" + +#~ msgid "Properties" +#~ msgstr "Свойства" + +#~ msgid "Channels" +#~ msgstr "Каналы" + +#~ msgid "Both" +#~ msgstr "Оба" + +#~ msgid "Both Channels" +#~ msgstr "Оба канала" + +#~ msgid "Waveform" +#~ msgstr "Форма волны" + +#~ msgid "Sine Wave" +#~ msgstr "Синусоида" + +#~ msgid "White Noise" +#~ msgstr "Белый шум" + +#~ msgid "High Speed" +#~ msgstr "Высокая скорость" + +#~ msgid "High Quality" +#~ msgstr "Высокое качество" + +#~ msgid "High Consistency" +#~ msgstr "Высокая согласованность" + +#~ msgid "Formant" +#~ msgstr "Форманта" + +#~ msgid "Shifted" +#~ msgstr "Смещённый" + +#~ msgid "Preserved" +#~ msgstr "Сохраняемый" + +#~ msgid "Transients" +#~ msgstr "Переходные звуки" + +#~ msgid "Crisp" +#~ msgstr "Чёткость" + +#~ msgid "Mixed" +#~ msgstr "Смешанный" + +#~ msgid "Smooth" +#~ msgstr "Гладкий" + +#~ msgid "Detector" +#~ msgstr "Детектор" + +#~ msgid "Compound" +#~ msgstr "Составной" + +#~ msgid "Percussive" +#~ msgstr "Ударный" + +#~ msgid "Soft" +#~ msgstr "Мягкий" + +#~ msgid "Phase" +#~ msgstr "Фаза" + +#~ msgid "Laminar" +#~ msgstr "Ламинарный" + +#~ msgid "Independent" +#~ msgstr "Независимый" + +#~ msgid "Cents" +#~ msgstr "Центы" + +#~ msgid "Semitones" +#~ msgstr "Полутона" + +#~ msgid "Octaves" +#~ msgstr "Октавы" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Удалить этот файл модели" + +#~ msgid "Add Effect" +#~ msgstr "Добавить эффект" + +#~ msgid "Used Plugins List" +#~ msgstr "Список используемых плагинов" + +#~ msgid "No Effects" +#~ msgstr "Без эффектов" + +#~ msgid "Audio Stream Not Modified" +#~ msgstr "Аудиопоток не изменён" + +#~ msgid "Search Plugin" +#~ msgstr "Найти плагин" + +#~ msgid "Plugins List" +#~ msgstr "Список плагинов" + +#~ msgid "_General" +#~ msgstr "_Общие" + +# #, fuzzy +#~ msgid "Service" +#~ msgstr "Служба" + +#~ msgid "Launch Service at System Startup" +#~ msgstr "Запускать службу при старте системы" + +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Завершать работу при закрытии окна" + +#~ msgid "Audio" +#~ msgstr "Аудио" + +#~ msgid "Process All Output Streams" +#~ msgstr "Обрабатывать все выходные потоки" + +#~ msgid "Process All Input Streams" +#~ msgstr "Обрабатывать все входные потоки" + +#~ msgid "Ignore Streams from Monitor of Devices" +#~ msgstr "Игнорировать потоки с монитора устройств" + +#~ msgid "Use Cubic Volume" +#~ msgstr "Использовать кубическую громкость" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "Сбрасывать громкость виртуальных устройств EasyEffects при запуске" + +#~ msgid "Inactivity Timeout" +#~ msgstr "Тайм-аут бездействия" + +#~ msgid "Style" +#~ msgstr "Стиль" + +#~ msgid "Use Dark Theme" +#~ msgstr "Использовать тёмную тему" + +#~ msgid "Hide Menus on Outside Clicks" +#~ msgstr "Скрывать меню по щелчку вне фокуса" + +#~ msgid "_Spectrum" +#~ msgstr "_Спектр" + +#~ msgid "Shape" +#~ msgstr "Форма" + +#~ msgid "Bars" +#~ msgstr "Полосы" + +#~ msgid "Lines" +#~ msgstr "Линии" + +#~ msgid "Dots" +#~ msgstr "Точки" + +#~ msgid "Points" +#~ msgstr "Пункты" + +#~ msgid "Height" +#~ msgstr "Высота" + +#~ msgid "Line Width" +#~ msgstr "Ширина линии" + +#~ msgid "Fill" +#~ msgstr "Заполнять" + +#~ msgid "Show Bars Border" +#~ msgstr "Отобразить границы полос" + +#~ msgid "Rounded Corners" +#~ msgstr "Скруглённые углы" + +#~ msgid "Color" +#~ msgstr "Цвет" + +#~ msgid "Lines and Bars" +#~ msgstr "Линии и полосы" + +#~ msgid "Axis Labels" +#~ msgstr "Разметка осей" + +#~ msgid "Frequency Range" +#~ msgstr "Диапазон частот" + +#~ msgid "Minimum" +#~ msgstr "Минимум" + +#~ msgid "Maximum" +#~ msgstr "Максимум" + +#~ msgid "Load" +#~ msgstr "Загрузить" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Сохранить текущие настройки в этот файл предустановки" + +#~ msgid "Remove this preset file" +#~ msgstr "Удалить этот файл с предустановками" + +#~ msgid "New Output Preset Name" +#~ msgstr "Имя новой предустановки выхода" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Создать предустановку" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Импорт предустановки" + +#~ msgid "Search Output Preset" +#~ msgstr "Поиск предустановки выхода" + +#~ msgid "Output Presets List" +#~ msgstr "Список предустановок выхода" + +#~ msgid "New Input Preset Name" +#~ msgstr "Имя новой предустановки входа" + +#~ msgid "Search Input Preset" +#~ msgstr "Поиск предустановки входа" + +#~ msgid "Input Presets List" +#~ msgstr "Список предустановок входа" + +#~ msgid "High Frequency Damping" +#~ msgstr "Высокочастотное демпфирование" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Room Size" +#~ msgstr "Размер комнаты" + +#~ msgid "Small" +#~ msgstr "Маленькая" + +#~ msgid "Medium" +#~ msgstr "Средняя" + +#~ msgid "Large" +#~ msgstr "Огромная" + +#~ msgid "Tunnel" +#~ msgstr "Туннель" + +#~ msgid "Large/smooth" +#~ msgstr "Большой/плавный" + +#~ msgid "Experimental" +#~ msgstr "Экспериментальный" + +#~ msgid "Diffusion" +#~ msgstr "Диффузия" + +#~ msgid "Pre Delay" +#~ msgstr "Предзадержка" + +#~ msgid "Decay Time" +#~ msgstr "Время распада" + +#~ msgid "Wet Amount" +#~ msgstr "Влажность" + +#~ msgid "Wet Level" +#~ msgstr "Уровень влаж." + +#~ msgid "Dry Amount" +#~ msgstr "Сухость" + +#~ msgid "Dry Level" +#~ msgstr "Уровень сух." + +#~ msgid "Bass Cut" +#~ msgstr "Срез басов" + +#~ msgid "Treble Cut" +#~ msgstr "Срез тембра" + +#~ msgid "Ambience" +#~ msgstr "Окр. среда" + +#~ msgid "Empty Walls" +#~ msgstr "Пустые стены" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Room" +#~ msgstr "Комната" + +#~ msgid "Large Empty Hall" +#~ msgstr "Большой пустой зал" + +#~ msgid "Disco" +#~ msgstr "Диско" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Большой занятый чем-то зал" + +#~ msgid "Import Model" +#~ msgstr "Импортировать модель" + +#~ msgid "Models" +#~ msgstr "Модели" + +#~ msgid "Standard Model" +#~ msgstr "Стандартная модель" + +#~ msgid "RNNoise Models List" +#~ msgstr "Список моделей RNNoise" + +#~ msgid "Active Model" +#~ msgstr "Активная модель" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Стандартная модель RNNoise" + +# #, fuzzy +#~ msgid "Overview" +#~ msgstr "Обзор" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Открыть руководство EasyEffects" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Полноэкраный режим / выйти из полного экрана" + +#~ msgid "Close the Window" +#~ msgstr "Закрыть окно" + +#~ msgid "Quit EasyEffects" +#~ msgstr "Выход из EasyEffects" + +#~ msgid "Balance" +#~ msgstr "Баланс" + +#~ msgid "Input Balance" +#~ msgstr "Баланс входа" + +#~ msgid "Softclip" +#~ msgstr "Софтклиппер" + +#~ msgid "Softclip Level" +#~ msgstr "Уровень софтклипа" + +#~ msgid "Stereo Matrix" +#~ msgstr "Матрица стерео" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "ЛП > ЛП (стерео по умолчанию)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "Стерео > Моно-Раздельно" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "Моно-Раздельно > Стерео" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "Стерео > Моно левый канал" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "Стерео > Моно правый канал" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "Стерео > Моно левый+правый каналы" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "Стерео > Поменять каналы местами" + +#~ msgid "Stereo Mode" +#~ msgstr "Режим стерео" + +#~ msgid "Invert Phase" +#~ msgstr "Инвертировать фазу" + +#~ msgid "Side Level" +#~ msgstr "Боковой уровень" + +#~ msgid "Side Balance" +#~ msgstr "Боковой баланс" + +#~ msgid "Middle Level" +#~ msgstr "Средний уровень" + +#~ msgid "Middle Panorama" +#~ msgstr "Срединная панорама" + +#~ msgid "Output Balance" +#~ msgstr "Баланс выхода" + +#~ msgid "Delay L/R" +#~ msgstr "Задержка Л/П" + +#~ msgid "Delay Left Right" +#~ msgstr "Задержка левый правый" + +#~ msgid "Stereo Base" +#~ msgstr "Стерео база" + +#~ msgid "Stereo Phase" +#~ msgstr "Стерео фаза" + +#~ msgid "Running" +#~ msgstr "Выполняется" + +#~ msgid "Suspended" +#~ msgstr "Приостановлено" + +#~ msgid "Idle" +#~ msgstr "Простаивает" + +#~ msgid "Creating" +#~ msgstr "Создание" + +#~ msgid "Error" +#~ msgstr "Ошибка" + +#~ msgid "Unknown" +#~ msgstr "Неизвестно" + +#~ msgid "channels" +#~ msgstr "каналы" + +#~ msgid "Output Presets: " +#~ msgstr "Предустановки выхода: " + +#~ msgid "Input Presets: " +#~ msgstr "Предустановки входа: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Звуковые эффекты для приложений PipeWire" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Выход из EasyEffects. Полезно при запуске в режиме службы." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Загрузить предустановку. Пример: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Сброс настроек EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Скрыть окно." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Глобальный обход. 1 — включить, 2 — отключить, 3 — получение статуса" + +#~ msgid "Show available presets." +#~ msgstr "Показать доступные предустановки." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Список файлов импульса" + +#~ msgid "Import Impulse File" +#~ msgstr "Импортировать файл импульса" + +#~ msgid "Open" +#~ msgstr "Открыть" + +#~ msgid "Cancel" +#~ msgstr "Отмена" + +#~ msgid "Impulse Response" +#~ msgstr "Импульсная реакция" + +#~ msgid "Load Impulse" +#~ msgstr "Загрузить импульс" + +#~ msgid "Remove Impulse" +#~ msgstr "Удалить Импульс" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Список файлов импульса" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Не удалось загрузить файл импульса" + +#~ msgid "Recorders" +#~ msgstr "Рекордеры" + +#~ msgid "Players" +#~ msgstr "Проигрыватели" + +#~ msgid "Effects" +#~ msgstr "Эффекты" + +#~ msgid "infinity" +#~ msgstr "бесконечно" + +#~ msgid "Import APO Preset File" +#~ msgstr "Импортировать файл предустановки APO" + +#~ msgid "APO Presets" +#~ msgstr "Предустановки APO" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Удалить автозагрузку предустановки" + +#~ msgid "Remove" +#~ msgstr "Удалить" + +#~ msgid "Output Device" +#~ msgstr "Устройство вывода" + +#~ msgid "Add" +#~ msgstr "Добавить" + +#~ msgid "Import Preset" +#~ msgstr "Импорт предустановки" + +#~ msgid "Import Model File" +#~ msgstr "Импорт файла модели" + +#~ msgid "RNNoise Models" +#~ msgstr "Модели RNNoise" + +# Энхансер (он же Эксайтер) — это прибор, который генерирует высшие гармоники низких частот, благодаря чему повышается локализация низких частот и их «читаемость». +# «Бас-Энхансер» или «Глубокий бас» +#~ msgid "Bass Enhancer" +#~ msgstr "Усиление басов (бас-энхансер)" + +#~ msgid "Bass Loudness" +#~ msgstr "Громкость баса" + +#~ msgid "Convolver" +#~ msgstr "Конвольвер" + +#~ msgid "Crossfeed" +#~ msgstr "Перекрёстная подача" + +#~ msgid "Crystalizer" +#~ msgstr "Кристаллизатор" + +# http://wikisound.org/Деэссер; предназначен для уменьшения или устранения избыточно шипящих звуков в записи человеческого голоса +#~ msgid "Deesser" +#~ msgstr "Антишипение (деэссер)" + +#~ msgid "Delay" +#~ msgstr "Задержка" + +#~ msgid "Echo Canceller" +#~ msgstr "Эхоподавление" + +#~ msgid "Equalizer" +#~ msgstr "Эквалайзер" + +#~ msgid "Exciter" +#~ msgstr "Эксайтер" + +#~ msgid "Filter" +#~ msgstr "Фильтр" + +#~ msgid "Limiter" +#~ msgstr "Ограничитель уровня звука (лимитер)" + +#~ msgid "Maximizer" +#~ msgstr "Максимизатор" + +#~ msgid "Multiband Compressor" +#~ msgstr "Многополосный компрессор" + +#~ msgid "Multiband Gate" +#~ msgstr "Многополосные шумовые ворота" + +#~ msgid "Pitch" +#~ msgstr "Высота тона" + +#~ msgid "Reverberation" +#~ msgstr "Реверберация" + +#~ msgid "Noise Reduction" +#~ msgstr "Подавление шума" + +#~ msgid "Stereo Tools" +#~ msgstr "Стереокорректоры" + +#~ msgid "Average" +#~ msgstr "Средняя" + +#~ msgid "Failed" +#~ msgstr "Не удалось" + +#~ msgid "Use Default" +#~ msgstr "Установить по умолчанию" + +#~ msgid "Remove this plugin" +#~ msgstr "Удалить этот плагин" + +#~ msgid "Import Presets" +#~ msgstr "Импорт предустановок" + +#~ msgid "Start Service at Login" +#~ msgstr "Запуск службы при запуске" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Сброс громкости устройств при запуске" + +#~ msgid "Activate" +#~ msgstr "Активировать" + +#~ msgid "Add to Blocklist" +#~ msgstr "Добавить в чёрный список" + +#~ msgid "Blocklist" +#~ msgstr "Чёрный список" + +#~ msgid "Add Plugin" +#~ msgstr "Добавить плагин" + +#~ msgid "Speakers" +#~ msgstr "Динамики" + +#~ msgid "Microphone" +#~ msgstr "Микрофон" + +#~ msgid "Plugins" +#~ msgstr "Плагины" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Включено" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Включено" + +#~ msgid "Format" +#~ msgstr "Формат" + +#~ msgid "Latency" +#~ msgstr "Задержка" + +#~ msgid "idle" +#~ msgstr "простаивание" + +#~ msgid "Faster" +#~ msgstr "Быстрее" + +#~ msgid "Preserve Formant" +#~ msgstr "Сохранить формат" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Усиление выхода" + +#~ msgid "Channel" +#~ msgstr "Канал" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Нижний порог" + +#~ msgid "Output Effects" +#~ msgstr "Эффекты для вывода звука" + +#~ msgid "Settings" +#~ msgstr "Настройки" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Настройки" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Продолжительность" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Проверочный сигнал" + +#~ msgid "Signal" +#~ msgstr "Сигнал" + +#~ msgid "Show Spectrum" +#~ msgstr "Показывать спектр" + +#~ msgid "Border" +#~ msgstr "Граница" + +#~ msgid "Spectrum Type" +#~ msgstr "Тип спектра" + +#~ msgid "Spectrum Color" +#~ msgstr "Цвет спектра" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Активная модель" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Увеличение ослабления" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Вес в расчете громкости" + +#~ msgid "Dry" +#~ msgstr "Влажность" + +#~ msgid "S/C Level" +#~ msgstr "Уровень Раздельный/Центр" + +#~ msgid "Phase Correlation" +#~ msgstr "Корреляция фазы" + +#~ msgid "Short Term" +#~ msgstr "Короткие измерения" + +#~ msgid "Id" +#~ msgstr "Id" + +#~ msgid "Low-pass" +#~ msgstr "Низкочастотный фильтр" + +#~ msgid "Preamp" +#~ msgstr "Предусилитель" + +#~ msgid "Run in Background" +#~ msgstr "Запускать в фоновом режиме" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Настройка громкости и вкл/откл эффектов" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Содержит эквалайзер с предустановками" + +#~ msgid "Input Limiter" +#~ msgstr "Ограничитель ввода" + +#~ msgid "Calibration" +#~ msgstr "Калибровка" + +#~ msgid "Limit" +#~ msgstr "Ограничение" + +#~ msgid "ASC" +#~ msgstr "Адаптивное управление наклоном" + +#~ msgid "Attenuation" +#~ msgstr "Затухание" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Аудиоэффекты для приложений PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Аудиоэффекты для приложений PulseAudio" + +#~ msgid "Help" +#~ msgstr "Справка" + +#~ msgid "Calibration Microphone" +#~ msgstr "Калибровка корректировки микрофона" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Автоматически применять этот набор предустановок, когда текущее звукое " +#~ "устройство подключают к системе" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Версия" + +#~ msgid "Sine" +#~ msgstr "Синусоида" + +#~ msgid "Square" +#~ msgstr "Квадратный" + +#~ msgid "Saw" +#~ msgstr "Пилообразный" + +#~ msgid "Triangle" +#~ msgstr "Треугольный" + +#~ msgid "Silence" +#~ msgstr "Тишина" + +#~ msgid "Pink Noise" +#~ msgstr "Розовый шум" + +#~ msgid "Ticks" +#~ msgstr "Тики" + +#~ msgid "Gaussian Noise" +#~ msgstr "Гауссовский шум" + +#~ msgid "Red Noise" +#~ msgstr "Красный шум" + +#~ msgid "Blue Noise" +#~ msgstr "Голубой шум" + +#~ msgid "Violet Noise" +#~ msgstr "Фиолетовый шум" + +#~ msgid "Volume" +#~ msgstr "Громкость" + +#~ msgid "Window" +#~ msgstr "Окно" + +#~ msgid "Measure Noise" +#~ msgstr "Измерение шума" + +#~ msgid "Subtract Noise" +#~ msgstr "Вычетание шума" + +#~ msgid "Extended Filter" +#~ msgstr "Расширенный фильтр" + +#~ msgid "Low" +#~ msgstr "Низкочастотный фильтр" + +#~ msgid "Moderate" +#~ msgstr "Средний" + +#~ msgid "High" +#~ msgstr "Высокий" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Уровень подавления" + +#~ msgid "Delay Agnostic" +#~ msgstr "Задержка" + +#~ msgid "Very High" +#~ msgstr "Очень высокий" + +#~ msgid "Noise Suppressor" +#~ msgstr "Простой шумодав" + +# # TODO: Mode/Режим заменить на "Режим сжатия" +#~ msgid "Adaptive Digital" +#~ msgstr "Адаптивное цифровое сжатие" + +#~ msgid "Fixed Digital" +#~ msgstr "Фиксированное цифровое сжатие" + +#~ msgid "Gain Controller" +#~ msgstr "Автоконтроль усиления (AGC)" + +#~ msgid "Detection Likelihood" +#~ msgstr "Вероятность обнаружения" + +#~ msgid "Very Low" +#~ msgstr "Очень низкий" + +#~ msgid "Voice Detector" +#~ msgstr "Обнаруживатель голоса" + +#~ msgid "Use Custom Color" +#~ msgstr "Использовать свой цвет" + +#~ msgid "Use Gradient" +#~ msgstr "Использовать градиент" + +#~ msgid "Gradient Color" +#~ msgstr "Цвет градиента" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Импортировать файл импульсной реакции" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Выбрать файл с импульсной реакцией" + +#~ msgid "Aggressive Mode" +#~ msgstr "Агрессивный режим" + +#~ msgid "Before" +#~ msgstr "До" + +#~ msgid "After" +#~ msgstr "После" + +#~ msgid "Loudness Range" +#~ msgstr "Диапазон громкости" + +#~ msgid "Apply" +#~ msgstr "Применить" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Частота дискретизации по умолчанию" + +#~ msgid "Default Source" +#~ msgstr "Устройство ввода по умолчанию" + +#~ msgid "Server" +#~ msgstr "Сервер" + +#~ msgid "File" +#~ msgstr "Файл" + +#~ msgid "Configuration" +#~ msgstr "Параметры" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Сервер" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Подсчитать частоты" + +# #, fuzzy +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Параметры" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Предустановки" + +#~ msgid "Detect Silence" +#~ msgstr "Определять тишину" + +#~ msgid "Muted" +#~ msgstr "Приглушенный" + +#~ msgid "Distant Headphones" +#~ msgstr "Находящиеся далеко наушники" + +#~ msgid "Priority Type" +#~ msgstr "Тип приоритета процесса" + +#~ msgid "Niceness" +#~ msgstr "Приоритет процесса (nice)" + +#~ msgid "Priority" +#~ msgstr "Приоритет" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Частота" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Частота" + +#~ msgid "About" +#~ msgstr "О программе" + +#~ msgid "Protocol" +#~ msgstr "Версия протокола сервера" + +#~ msgid "Default Sample Format" +#~ msgstr "Спецификация отсчётов по умолчанию" + +#~ msgid "Channel Mapping" +#~ msgstr "Схема каналов" + +#~ msgid "Resamplers" +#~ msgstr "Ресемплеры" + +#~ msgid "Buffer" +#~ msgstr "Буфер" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Эквалайзер - Выход" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Block Size" +#~ msgstr "Размер блока" + +#~ msgid "Resampler" +#~ msgstr "Ресемплер" + +#~ msgid "paused" +#~ msgstr "на паузе" + +#~ msgid "playing" +#~ msgstr "воспроизводится" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Импортировать предустановки" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Увеличение ослабления" + +#~ msgid "Exponent" +#~ msgstr "Степень" diff --git a/po/news/sk.po b/po/news/sk.po new file mode 100644 index 0000000..114dd34 --- /dev/null +++ b/po/news/sk.po @@ -0,0 +1,3210 @@ +# Slovak translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Mlocik97 , 2020. +# Jose Riha , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Zvukové efekty pre aplikácie využívajúce PipeWire" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects je pokročilý nástroj pre úpravu zvuku. Obsahuje ekvalizér, " +"obmedzovač, kompresor, nástroj ozveny a množstvo ďalších efektov. Pre " +"doplnenie je napríklad zabudovaný aj analyzátor spektra." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects je následovník PulseEffects. EasyEffects podporuje len zvukový " +"server PipeWire. Použivatelia PulseAudio by mali používať PulseEffects." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Pretože EasyEffects štandardne používa zvukový server PulseWire, funguje s " +"väčšinou (ak nie so všetkými) aplikácií. Všetky podprované programy sú " +"zobrazené v hlavnom okne, kde je ich možné individuálne povoliť." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Popri práci s úpravou výstupného zvuku, EasyEffects je možné použiť aj na " +"úpravu vstupných zvukov z mikrofónu. To môžete využiť napríklad pri " +"nahrávaní, ale funguje to dobre aj pri audiohovoroch." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Keď je EasyEffects spustený, zapamätá si posledné používané nastavenia. " +"Taktiež je možné uložiť všetky aktuálne nastavenia ako profily." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "Hlavná stránka ukazujújca dve výstupové aplikácie." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Aktualizované preklady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +#, fuzzy +msgid "Improved presets autoloading." +msgstr "Aktualizované preklady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Aktualizované preklady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +#, fuzzy +msgid "Improved translations" +msgstr "Aktualizované preklady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +#, fuzzy +msgid "Many translation updates" +msgstr "Aktualizované preklady" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Pásma" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "neplýtvame výkonom procesora počas ticha." + +#~ msgid "mean." +#~ msgstr "geometrický priemer." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Toto vydanie pridáva následujúcu vlastnosť:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ekvalizér, kompresor a ďalšie audio efekty" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "obmedzovač;kompresor;ozvena;ekvalizér;automatická hlasitosť;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Predvoľby\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Povolené" + +#, fuzzy +#~ msgid "Mute Application" +#~ msgstr "Aplikácie" + +#, fuzzy +#~ msgid "Application Volume" +#~ msgstr "Aplikácie" + +#, fuzzy +#~ msgid "_Preferences" +#~ msgstr "Referenčný Signál" + +#, fuzzy +#~ msgid "_Shortcuts" +#~ msgstr "Krátkodobá" + +#, fuzzy +#~ msgid "_Reset Settings" +#~ msgstr "Nastavenia" + +#, fuzzy +#~ msgid "_About EasyEffects" +#~ msgstr "Vstupné efekty" + +#~ msgid "Presets" +#~ msgstr "Predvoľby" + +#, fuzzy +#~ msgid "Presets Menu" +#~ msgstr "Predvoľby" + +#~ msgid "Global Bypass" +#~ msgstr "Globálne premostenie" + +#, fuzzy +#~ msgid "EasyEffects Window" +#~ msgstr "PulseEffects" + +#, fuzzy +#~ msgid "Applications List" +#~ msgstr "Aplikácie" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Prázdne steny" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Aplikácie" + +#~ msgid "Target" +#~ msgstr "Cieľ" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Maximálna" + +#, fuzzy +#~ msgid "Reference" +#~ msgstr "Referenčný Signál" + +#~ msgid "Momentary" +#~ msgstr "Okamžitá" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Krátkodobá" + +#~ msgid "Integrated" +#~ msgstr "Integrovaná" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Použiť geometrický priemer" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Použiť geometrický priemer" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Použiť geometrický priemer" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Použiť geometrický priemer" + +#~ msgid "Reset History" +#~ msgstr "Vymazať históriu" + +#~ msgid "Relative" +#~ msgstr "Relatívna" + +#~ msgid "Range" +#~ msgstr "Rozsah" + +#~ msgid "Loudness" +#~ msgstr "Hlasitosť" + +#~ msgid "Output Gain" +#~ msgstr "Výstupný Zisk" + +#~ msgid "Input" +#~ msgstr "Vstup" + +#, fuzzy +#~ msgid "Plugin Input Gain" +#~ msgstr "Výstupný Zisk" + +#~ msgid "Output" +#~ msgstr "Výstup" + +#, fuzzy +#~ msgid "Plugin Output Gain" +#~ msgstr "Výstupný Zisk" + +#~ msgid "Reset" +#~ msgstr "Obnoviť pôvodné hodnoty" + +#~ msgid "Name" +#~ msgstr "Názov" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Predvoľby" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Odstrániť predvoľbu" + +#~ msgid "Listen" +#~ msgstr "Počúvať" + +#~ msgid "Blend Harmonics" +#~ msgstr "Miešať harmonické kmity" + +#~ msgid "3rd" +#~ msgstr "3." + +#~ msgid "2nd" +#~ msgstr "2." + +#~ msgid "Amount" +#~ msgstr "Množstvo" + +#~ msgid "Harmonics" +#~ msgstr "Harmonickosť" + +#~ msgid "Scope" +#~ msgstr "Rozsah" + +#~ msgid "Floor" +#~ msgstr "Spodná hranica" + +#, fuzzy +#~ msgid "Floor Value" +#~ msgstr "Spodná hranica" + +#, fuzzy +#~ msgid "Application Name" +#~ msgstr "Aplikácie" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Zobraziť aplikácie zo zoznamu blokovaných na hlavnej karte" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Aplikácie" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Zobraziť aplikácie zo zoznamu blokovaných na hlavnej karte" + +#~ msgid "Compressor" +#~ msgstr "Kompresor" + +#~ msgid "Mode" +#~ msgstr "Režim" + +#~ msgid "Downward" +#~ msgstr "Dole" + +#~ msgid "Upward" +#~ msgstr "Hore" + +#~ msgid "Compression Mode" +#~ msgstr "Mód kompresora" + +#~ msgid "Boost Threshold" +#~ msgstr "Zvýrazniť prah" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Množstvo" + +#~ msgid "Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "V reálnom čase" + +#~ msgid "Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Prah" + +#~ msgid "Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Relatívny prah uvoľnenia" + +#~ msgid "Ratio" +#~ msgstr "Pomer" + +#~ msgid "Knee" +#~ msgstr "Prechod" + +#~ msgid "Makeup" +#~ msgstr "Pozdvihnutie" + +#~ msgid "Sidechain" +#~ msgstr "Postranný reťazec" + +#~ msgid "Peak" +#~ msgstr "Vrchol" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Dolná priepusť" + +#~ msgid "Uniform" +#~ msgstr "Rovnomerný" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Postranný reťazec" + +#~ msgid "Source" +#~ msgstr "Zdroj" + +#~ msgid "Middle" +#~ msgstr "Stredný" + +#~ msgid "Side" +#~ msgstr "Postranný" + +#~ msgid "Left" +#~ msgstr "Ľavý" + +#~ msgid "Right" +#~ msgstr "Pravý" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Postranný reťazec" + +#~ msgid "Type" +#~ msgstr "Typ" + +#~ msgid "Feed-forward" +#~ msgstr "Kanál-Vpred" + +#~ msgid "Feed-back" +#~ msgstr "Kanál-Vzad" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Postranný reťazec" + +#, fuzzy +#~ msgid "Input Device" +#~ msgstr "Obmedzovač na vstupe" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Predzosilnenie" + +#~ msgid "Reactivity" +#~ msgstr "Reaktivita" + +#~ msgid "Lookahead" +#~ msgstr "Výhľad" + +#, fuzzy +#~ msgid "Sidechain Filters" +#~ msgstr "Postranný reťazec" + +#, fuzzy +#~ msgid "High-Pass" +#~ msgstr "Horné pásmo" + +#~ msgid "Frequency" +#~ msgstr "Frekvencia" + +#~ msgid "Off" +#~ msgstr "Vyp" + +#~ msgid "12 dB/oct" +#~ msgstr "Nízka pásmová priepusť 12dB/okt" + +#~ msgid "24 dB/oct" +#~ msgstr "Nízka pásmová priepusť 24dB/okt" + +#~ msgid "36 dB/oct" +#~ msgstr "Nízka pásmová priepusť 36dB/okt" + +#, fuzzy +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Režim filtra vysokej priepuste" + +#, fuzzy +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Frekvencia vysokej priepuste" + +#, fuzzy +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Režim filtra vysokej priepuste" + +#~ msgid "Gain" +#~ msgstr "Zisk" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Sklon" + +#~ msgid "Curve" +#~ msgstr "Krivka" + +#~ msgid "L" +#~ msgstr "Ľ" + +#, fuzzy +#~ msgid "Left Channel" +#~ msgstr "Kanály" + +#~ msgid "R" +#~ msgstr "P" + +#, fuzzy +#~ msgid "Right Channel" +#~ msgstr "Rozdeliť kanály" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Odpoveď impulzu" + +#~ msgid "Stereo Width" +#~ msgstr "Šírka sterea" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Log Scale" +#~ msgstr "Mierka" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Automatická hlasitosť" + +#~ msgid "Rate" +#~ msgstr "Kmitočet" + +#~ msgid "Samples" +#~ msgstr "Vzorky" + +#~ msgid "Duration" +#~ msgstr "Trvanie" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Odpoveď impulzu" + +#, fuzzy +#~ msgid "Output File Name" +#~ msgstr "Výstup" + +#~ msgid "Import Impulse" +#~ msgstr "Importovať impulz" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Načítať súbor impulzu" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Načítať súbor impulzu" + +#~ msgid "Default" +#~ msgstr "Predvolený" + +#~ msgid "Cutoff" +#~ msgstr "Zrezanie" + +#~ msgid "Feed" +#~ msgstr "Kanál" + +#~ msgid "Bypass" +#~ msgstr "Premostiť" + +#~ msgid "Mute" +#~ msgstr "Stíšený" + +#~ msgid "Detection" +#~ msgstr "Detekcia" + +#~ msgid "Wide" +#~ msgstr "Široký" + +#~ msgid "Split" +#~ msgstr "Rozdeliť" + +#~ msgid "F1 Split" +#~ msgstr "Rozdeliť F1" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Frekvencia" + +#~ msgid "F2 Peak" +#~ msgstr "Vrchol F2" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frekvencia" + +#~ msgid "F1 Gain" +#~ msgstr "Zisk F1" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frekvencia" + +#~ msgid "F2 Level" +#~ msgstr "Úroveň F2" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Frekvencia" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2 vrchol Q" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frekvencia" + +#~ msgid "Laxity" +#~ msgstr "Nedbanlivosť" + +#~ msgid "Detected" +#~ msgstr "Zistené" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Redukcia" + +#~ msgid "Frame Size" +#~ msgstr "Veľkosť rámca" + +#, fuzzy +#~ msgid "Filter Length" +#~ msgstr "Filter" + +#~ msgid "Bands" +#~ msgstr "Pásma" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "Split Channels" +#~ msgstr "Rozdeliť kanály" + +#~ msgid "Flat Response" +#~ msgstr "Vyhladiť" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Vypočítať frekvencie" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "APO predvoľby" + +#~ msgid "Bell" +#~ msgstr "Zvonček" + +#~ msgid "High Pass" +#~ msgstr "Horné pásmo" + +#~ msgid "High Shelf" +#~ msgstr "Horný prah" + +#~ msgid "Low Pass" +#~ msgstr "Spodné pásmo" + +#~ msgid "Low Shelf" +#~ msgstr "Spodný prah" + +#~ msgid "Notch" +#~ msgstr "Zárez" + +#~ msgid "Resonance" +#~ msgstr "Rezonancia" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Dolné Pásmo" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Pásma" + +#~ msgid "Slope" +#~ msgstr "Sklon" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Sklon" + +#~ msgid "Width" +#~ msgstr "Šírka" + +#~ msgid "Quality" +#~ msgstr "Kvalita" + +#~ msgid "Solo" +#~ msgstr "Sólo" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Strop" + +#, fuzzy +#~ msgid "Description" +#~ msgstr "Detekcia" + +#, fuzzy +#~ msgid "Remove this model file" +#~ msgstr "Odstrániť predvoľbu" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Nízka pásmová priepusť 12dB/okt" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Nízka pásmová priepusť 24dB/okt" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Nízka pásmová priepusť 36dB/okt" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Vysoká pásmová priepusť 12dB/okt" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Vysoká pásmová priepusť 24dB/okt" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Vysoká pásmová priepusť 36dB/okt" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Pásmová priepusť 6dB/okt" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Pásmová priepusť 12dB/okt" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Pásmová priepusť 18dB/okt" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Vylúčenie pásma 6dB/okt" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Vylúčenie pásma 12dB/okt" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Vylúčenie pásma 18dB/okt" + +#~ msgid "Inertia" +#~ msgstr "Zotrvačnosť" + +#~ msgid "Gate" +#~ msgstr "Brána" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Integrovaná" + +#~ msgid "Gating" +#~ msgstr "Hradlo" + +#~ msgid "Oversampling" +#~ msgstr "Prevzorkovanie" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Široký" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Široký" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Šírka čiary" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Šírka čiary" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Šírka čiary" + +#~ msgid "None" +#~ msgstr "Žiadny" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Predzosilnenie" + +#~ msgid "Stereo Link" +#~ msgstr "Spojenie sterea" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Postranný reťazec" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Automatické úrovne" + +#, fuzzy +#~ msgid "Auto Leveling Attack" +#~ msgstr "Automatické úrovne" + +#, fuzzy +#~ msgid "Auto Leveling Release" +#~ msgstr "Automatické úrovne" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "Automatické úrovne" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Ľavý" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Pravý" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Postranný reťazec" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Postranný reťazec" + +#~ msgid "Standard" +#~ msgstr "Štandardný" + +#~ msgid "Flat" +#~ msgstr "Rovný" + +#~ msgid "FFT Size" +#~ msgstr "Veľkosť FFT" + +#, fuzzy +#~ msgid "Output Volume" +#~ msgstr "Výstup" + +#~ msgid "Ceiling" +#~ msgstr "Strop" + +#, fuzzy +#~ msgid "Operating Mode" +#~ msgstr "Importovať model" + +#, fuzzy +#~ msgid "Modern" +#~ msgstr "Režim" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Postranný reťazec" + +#, fuzzy +#~ msgid "Bands List" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 5" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 6" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 7" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 8" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band Compression Mode" +#~ msgstr "Mód kompresora" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band Sidechain Options" +#~ msgstr "Postranný reťazec" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Režim filtra nízkej priepuste" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Režim filtra nízkej priepuste" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Horný prechod" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Horný prechod" + +#, fuzzy +#~ msgid "Band Gain" +#~ msgstr "Vstupné Zosilnenie" + +#, fuzzy +#~ msgid "Band Curve" +#~ msgstr "Krivka" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Rozdeliť" + +#~ msgid "Split 1/2" +#~ msgstr "Rozdeliť 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frekvencia" + +#~ msgid "Split 2/3" +#~ msgstr "Rozdeliť 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frekvencia" + +#~ msgid "Split 3/4" +#~ msgstr "Rozdeliť 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frekvencia" + +#~ msgid "Sub Band" +#~ msgstr "Spodné pásmo" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Pozdvihnutie" + +#~ msgid "Max Reduction" +#~ msgstr "Redukcia" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "Low Band" +#~ msgstr "Nízke pásmo" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Pozdvihnutie" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "Mid Band" +#~ msgstr "Stredné pásmo" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Pozdvihnutie" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "High Band" +#~ msgstr "Vysoké pásmo" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Pozdvihnutie" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "General" +#~ msgstr "Všeobecné" + +#, fuzzy +#~ msgid "Use Default Input" +#~ msgstr "Použiť predvolený" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Obmedzovač na vstupe" + +#, fuzzy +#~ msgid "Use Default Output" +#~ msgstr "Použiť predvolený" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Výstupné efekty" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Ozvena (reverb)" + +#, fuzzy +#~ msgid "Header Version" +#~ msgstr "Verzia" + +#, fuzzy +#~ msgid "Library Version" +#~ msgstr "Verzia" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Predvolená rýchlosť vzorkovania" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Minimálna frekvencia" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Maximálny zisk" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Predvolené Zoslabnutie" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Výstupné efekty" + +#~ msgid "Output Presets" +#~ msgstr "Výstupné predvoľby:" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Výstupné predvoľby:" + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Obmedzovač na vstupe" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Vstupné predvoľby: " + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Vstupné predvoľby: " + +#~ msgid "Modules" +#~ msgstr "Moduly" + +#, fuzzy +#~ msgid "Modules List" +#~ msgstr "Moduly" + +#~ msgid "Clients" +#~ msgstr "Klienti" + +#, fuzzy +#~ msgid "Clients List" +#~ msgstr "Klienti" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Skúšobné signály" + +#~ msgid "State" +#~ msgstr "Stav" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Povolené" + +#~ msgid "Channels" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Sínusová tabuľka" + +#~ msgid "White Noise" +#~ msgstr "Biely šum" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Horný prah" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvalita" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formát" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Predvoľby" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Krehkosť" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detekcia" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresia" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Centy" + +#~ msgid "Semitones" +#~ msgstr "Poltóny" + +#~ msgid "Octaves" +#~ msgstr "Oktávy" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Odstrániť predvoľbu" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "Vstupné predvoľby: " + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "Všeobecné" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Spracovať všetky výstupy" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Spracovať všetky vstupy" + +#, fuzzy +#~ msgid "Inactivity Timeout" +#~ msgstr "Čas. limit aktivity" + +#~ msgid "Use Dark Theme" +#~ msgstr "Použiť tmavý motív" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Spektrum" + +#~ msgid "Bars" +#~ msgstr "Pruhy" + +#~ msgid "Lines" +#~ msgstr "Čiary" + +#~ msgid "Points" +#~ msgstr "Body" + +#~ msgid "Height" +#~ msgstr "Výška" + +#~ msgid "Line Width" +#~ msgstr "Šírka čiary" + +#~ msgid "Fill" +#~ msgstr "Výplň" + +#, fuzzy +#~ msgid "Color" +#~ msgstr "Farba osi" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frekvencia" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Maximálna" + +#~ msgid "Maximum" +#~ msgstr "Maximálna" + +#~ msgid "Load" +#~ msgstr "Načítať" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Uložiť aktuálne nastavenia do tejto predvoľby" + +#~ msgid "Remove this preset file" +#~ msgstr "Odstrániť predvoľbu" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Výstupné predvoľby: " + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Vytvoriť predvoľbu" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Načítať predvoľbu" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Výstupné predvoľby: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Výstupné predvoľby: " + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Vstupné predvoľby: " + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Vstupné predvoľby: " + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Vstupné predvoľby: " + +#~ msgid "High Frequency Damping" +#~ msgstr "Vysokofrekvenčné tlmenie" + +#~ msgid "Room Size" +#~ msgstr "Veľkosť miestnosti" + +#~ msgid "Small" +#~ msgstr "Malá" + +#~ msgid "Medium" +#~ msgstr "Stredná" + +#~ msgid "Large" +#~ msgstr "Veľká" + +#~ msgid "Tunnel" +#~ msgstr "Tunel" + +#~ msgid "Large/smooth" +#~ msgstr "Veľká/hladká" + +#~ msgid "Experimental" +#~ msgstr "Experimentálna" + +#~ msgid "Diffusion" +#~ msgstr "Rozptyl" + +#~ msgid "Pre Delay" +#~ msgstr "Predoneskorenie" + +#~ msgid "Decay Time" +#~ msgstr "Čas dozvuku" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Množstvo" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Cieľová úroveň" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Množstvo" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Úroveň F2" + +#~ msgid "Bass Cut" +#~ msgstr "Odrezanie basov" + +#~ msgid "Treble Cut" +#~ msgstr "Odrezanie výšok" + +#~ msgid "Ambience" +#~ msgstr "Okolie" + +#~ msgid "Empty Walls" +#~ msgstr "Prázdne steny" + +#~ msgid "Room" +#~ msgstr "Miestnosť" + +#~ msgid "Large Empty Hall" +#~ msgstr "Veľká miestnosť (prázdna)" + +#~ msgid "Disco" +#~ msgstr "Disko" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Veľká miestnosť (plná)" + +#~ msgid "Import Model" +#~ msgstr "Importovať model" + +#, fuzzy +#~ msgid "Models" +#~ msgstr "Režim" + +#, fuzzy +#~ msgid "Standard Model" +#~ msgstr "Štandardný model RNNoise" + +#, fuzzy +#~ msgid "RNNoise Models List" +#~ msgstr "Štandardný model RNNoise" + +#~ msgid "Active Model" +#~ msgstr "Aktívny model" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "Štandardný model RNNoise" + +#, fuzzy +#~ msgid "Overview" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "Obnoviť PulseEffects" + +#, fuzzy +#~ msgid "Close the Window" +#~ msgstr "Skryť okno" + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "Vstupné efekty" + +#~ msgid "Balance" +#~ msgstr "Vyváženie" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Vyváženie" + +#~ msgid "Softclip" +#~ msgstr "Softclip" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Softclip" + +#~ msgid "Stereo Matrix" +#~ msgstr "Stereo matica" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "ĽP > PĽ (štandardné Stereo)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "ĽP > SS (stereo ku strednej strane)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "SS > ĽP (stredná strana ku stereu)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "ĽP > ĽĽ (mono ľavý kanál)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "ĽP > PP (mono pravý kanál)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "ĽP > Ľ+P (mono sčítanie Ľ+P)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "ĽP > PĽ (stereo preklopené Kanály)" + +#~ msgid "Stereo Mode" +#~ msgstr "Režim sterea" + +#~ msgid "Invert Phase" +#~ msgstr "Preklopiť fázu" + +#~ msgid "Side Level" +#~ msgstr "Úroveň strán" + +#~ msgid "Side Balance" +#~ msgstr "Vyváženie strán" + +#~ msgid "Middle Level" +#~ msgstr "Stredová úroveň" + +#~ msgid "Middle Panorama" +#~ msgstr "Stredná paronáma" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Výstupný Zisk" + +#~ msgid "Delay L/R" +#~ msgstr "Oneskorenie Ľ/P" + +#~ msgid "Delay Left Right" +#~ msgstr "Oneskorenie Ľavo/Pravo" + +#~ msgid "Stereo Base" +#~ msgstr "Základ sterea" + +#~ msgid "Stereo Phase" +#~ msgstr "Fáza sterea" + +#, fuzzy +#~ msgid "Running" +#~ msgstr "beží" + +#, fuzzy +#~ msgid "Suspended" +#~ msgstr "pozastavené" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "vytváram" + +#, fuzzy +#~ msgid "Error" +#~ msgstr "chyba" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Kanály" + +#~ msgid "Output Presets: " +#~ msgstr "Výstupné predvoľby: " + +#~ msgid "Input Presets: " +#~ msgstr "Vstupné predvoľby: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Zvukové efekty pre aplikácie využívajúce PipeWire" + +#, fuzzy +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "Ukončiť PulseEffect. Užitočné pre beh v režime služby." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Načítať predvoľby. Napr.: easyffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Obnoviť EasyEffects." + +#~ msgid "Hide the Window." +#~ msgstr "Skryť okno." + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "" +#~ "Globálne premostenie. 1 pre zapnutie, 2 pre vypnutie, 3 pre získanie stavu" + +#~ msgid "Show available presets." +#~ msgstr "Zobraziť dostupné predvoľby." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Načítať súbor impulzu" + +#~ msgid "Import Impulse File" +#~ msgstr "Načítať súbor impulzu" + +#~ msgid "Open" +#~ msgstr "Otvoriť" + +#~ msgid "Cancel" +#~ msgstr "Zrušiť" + +#~ msgid "Impulse Response" +#~ msgstr "Odpoveď impulzu" + +#~ msgid "Load Impulse" +#~ msgstr "Načítať impulz" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Importovať impulz" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Načítať súbor impulzu" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Nedá sa načítať súbor s impulzom" + +#, fuzzy +#~ msgid "Recorders" +#~ msgstr "Okraj" + +#~ msgid "Players" +#~ msgstr "Prehrávače" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "nekonečno" + +#~ msgid "Import APO Preset File" +#~ msgstr "Načítať APO predvoľbu" + +#~ msgid "APO Presets" +#~ msgstr "APO predvoľby" + +#, fuzzy +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Odstrániť predvoľbu" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Výstupné efekty" + +#~ msgid "Add" +#~ msgstr "Pridať" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Načítať predvoľbu" + +#~ msgid "Import Model File" +#~ msgstr "Importovať model zo súboru" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Štandardný model RNNoise" + +#~ msgid "Bass Enhancer" +#~ msgstr "Vylepšovač hĺbok" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Hlasitosť" + +#~ msgid "Convolver" +#~ msgstr "Zbaľovač" + +#~ msgid "Crossfeed" +#~ msgstr "Prelínanie kanálov" + +#~ msgid "Crystalizer" +#~ msgstr "Kryštalizátor" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Oneskorenie" + +#~ msgid "Echo Canceller" +#~ msgstr "Rušenie ozveny" + +#~ msgid "Equalizer" +#~ msgstr "Ekvalizér" + +#~ msgid "Exciter" +#~ msgstr "Budič" + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Limiter" +#~ msgstr "Obmedzovač" + +#~ msgid "Maximizer" +#~ msgstr "Zosilňovač" + +#~ msgid "Multiband Compressor" +#~ msgstr "Viacpásmový kompresor" + +#~ msgid "Multiband Gate" +#~ msgstr "Viacpásmová brána" + +#~ msgid "Pitch" +#~ msgstr "Výška tónu" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Ozvena (reverb)" + +#~ msgid "Noise Reduction" +#~ msgstr "Redukcia šumu" + +#~ msgid "Stereo Tools" +#~ msgstr "Stereo nástroje" + +#~ msgid "Average" +#~ msgstr "Priemerná" + +#~ msgid "Failed" +#~ msgstr "Zlyhalo" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Použiť predvolený" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Odstrániť predvoľbu" + +#~ msgid "Import Presets" +#~ msgstr "Načítať predvoľbu" + +#~ msgid "Start Service at Login" +#~ msgstr "Spustiť službu pri prihlásení" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktívny model" + +#~ msgid "Add to Blocklist" +#~ msgstr "Pridať na zoznam blokovaných" + +#~ msgid "Blocklist" +#~ msgstr "Zoznam blokovaných" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibrovať mikrofón" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Povolené" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Povolené" + +#~ msgid "Format" +#~ msgstr "Formát" + +#~ msgid "Latency" +#~ msgstr "Odozva" + +#~ msgid "idle" +#~ msgstr "nečinné" + +#~ msgid "running" +#~ msgstr "beží" + +#~ msgid "suspended" +#~ msgstr "pozastavené" + +#~ msgid "creating" +#~ msgstr "vytváram" + +#~ msgid "error" +#~ msgstr "chyba" + +#~ msgid "unknown" +#~ msgstr "neznáme" + +#~ msgid "Faster" +#~ msgstr "Rýchlo" + +#~ msgid "Preserve Formant" +#~ msgstr "Zachovať zložku rozhodujúcu o farbe zvuku" + +#~ msgid "Cmoy" +#~ msgstr "Slúchadlový zosilňovač (CMoy)" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Výstupný Zisk" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Spodná hranica" + +#, fuzzy +#~ msgid "Output Effects" +#~ msgstr "Výstupné efekty" + +#~ msgid "Settings" +#~ msgstr "Nastavenia" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Nastavenia" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Trvanie" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Skúšobné signály" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Skúšobné signály" + +#~ msgid "Show Spectrum" +#~ msgstr "Zobraziť spektrum" + +#~ msgid "Border" +#~ msgstr "Okraj" + +#~ msgid "Spectrum Type" +#~ msgstr "Typ spektra" + +#~ msgid "Spectrum Color" +#~ msgstr "Farba spektra" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Aktívny model" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Najvyššia redukcia zisku" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Váhy" + +#~ msgid "Dry" +#~ msgstr "Skúšobný" + +#~ msgid "S/C Level" +#~ msgstr "S/C Úroveň" + +#~ msgid "Short Term" +#~ msgstr "Krátkodobá" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Dolná priepusť" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Nastaviť hlasitosť a zapnúť/vypnúť efekty" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Zahŕňa ekvalizér s prednastavenými profilmi" + +#~ msgid "Input Limiter" +#~ msgstr "Obmedzovač na vstupe" + +#~ msgid "Calibration" +#~ msgstr "Kalibrácia" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "Automatické vyhladenie" + +#~ msgid "Limit" +#~ msgstr "Obmedzenie" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Zoslabenie" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Zvukové efekty pre aplikácie využívajúce PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Zvukové efekty pre aplikácie PulseAudio" + +#~ msgid "Help" +#~ msgstr "Pomocník" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrovať mikrofón" + +#~ msgid "Based on" +#~ msgstr "Na základe" + +#~ msgid "Detect Silence" +#~ msgstr "Detekcia ticha" + +#~ msgid "Provided by" +#~ msgstr "Poskytuje" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Znovu pripojiť mikrofón pre použitie zmien vykonaných v zozname " +#~ "blokovaných" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "Reštartovať prehrávač, aby sa uplatnili zmeny v zozname blokovaných" + +#~ msgid "Sine" +#~ msgstr "Sínus" + +#~ msgid "Square" +#~ msgstr "Štvorec" + +#~ msgid "Saw" +#~ msgstr "Píla" + +#~ msgid "Triangle" +#~ msgstr "Trojuholník" + +#~ msgid "Silence" +#~ msgstr "Ticho" + +#~ msgid "Pink Noise" +#~ msgstr "Ružový Šum" + +#~ msgid "Ticks" +#~ msgstr "Tiky" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussový šum" + +#~ msgid "Red Noise" +#~ msgstr "Červený šum" + +#~ msgid "Blue Noise" +#~ msgstr "Modrý šum" + +#~ msgid "Violet Noise" +#~ msgstr "Fialový Šum" + +#~ msgid "Volume" +#~ msgstr "Hlasitosť" + +#~ msgid "Window" +#~ msgstr "Okno" + +#~ msgid "Measure Noise" +#~ msgstr "Merať šum" + +#~ msgid "Subtract Noise" +#~ msgstr "Odčítať šum" + +#~ msgid "Low-pass Frequency" +#~ msgstr "Frekvencia nízkej priepuste" + +#~ msgid "Advanced" +#~ msgstr "Pokročilé" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importovať súbor s odpoveďou impulzu" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Vyberte súbor s odpoveďou impulzu" + +#~ msgid "Aggressive Mode" +#~ msgstr "Agresívny režim" + +#~ msgid "Before" +#~ msgstr "Pred" + +#~ msgid "After" +#~ msgstr "Po" + +#~ msgid "Loudness Range" +#~ msgstr "Dynamický Rozsah" + +#~ msgid "Apply APO Preset" +#~ msgstr "Použiť APO predvoľby" + +#~ msgid "Apply" +#~ msgstr "Použiť" + +#~ msgid "Muted" +#~ msgstr "Stíšený" + +#~ msgid "Distant Headphones" +#~ msgstr "Vzdialené slúchadlá" + +#~ msgid "Niceness" +#~ msgstr "Hodnota nice" + +#~ msgid "Priority Type" +#~ msgstr "Typ priority" + +#~ msgid "Priority" +#~ msgstr "Priorita" + +#~ msgid "About" +#~ msgstr "O programe" + +#~ msgid "Loudness Compensator" +#~ msgstr "Kompenzácia hlasitosti" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automaticky použiť toto nastavenie, ak je aktuálne používané zariadenie " +#~ "pripojené" + +#~ msgid "Default Source" +#~ msgstr "Predvolený bdroj" + +#~ msgid "Protocol" +#~ msgstr "Protokol" + +#~ msgid "Default Sample Format" +#~ msgstr "Predvolený formát vzorkovania" + +#~ msgid "Channel Mapping" +#~ msgstr "Priradenie kanála" + +#~ msgid "File" +#~ msgstr "Súbor" + +#~ msgid "Configuration" +#~ msgstr "Konfigurácia" + +#~ msgid "Resamplers" +#~ msgstr "Prevzorkovače" + +#~ msgid "Pipeline Input" +#~ msgstr "Pipeline vstup" + +#~ msgid "Buffer" +#~ msgstr "Vyrovnávacia pamäť" + +#~ msgid "Pipeline Output" +#~ msgstr "Pipeline výstup" + +#~ msgid "Block Size" +#~ msgstr "Veľkosť bloku" + +#~ msgid "Use Custom Color" +#~ msgstr "Použiť vlastnú Farbu" + +#~ msgid "Use Gradient" +#~ msgstr "Použiť tieňovanie" + +#~ msgid "Sampling" +#~ msgstr "Vzorkovanie" + +#~ msgid "Maximum Frequency" +#~ msgstr "Maximálna frekvencia" + +#~ msgid "Gradient Color" +#~ msgstr "Farba prechodu" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Extended Filter" +#~ msgstr "Rozšírený filter" + +#~ msgid "Low" +#~ msgstr "Nízky" + +#~ msgid "Moderate" +#~ msgstr "Stredný" + +#~ msgid "High" +#~ msgstr "Vysoký" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "Delay Agnostic" +#~ msgstr "Absolútne oneskorenie" + +#~ msgid "Very High" +#~ msgstr "Veľmi vysoká" + +#~ msgid "Noise Suppressor" +#~ msgstr "Potlačenie šumu" + +#~ msgid "Adaptive Digital" +#~ msgstr "Prispôsobivý digitálny" + +#~ msgid "Fixed Digital" +#~ msgstr "Pevný digitálny" + +#~ msgid "Gain Controller" +#~ msgstr "Ovládač zosilnenia" + +#~ msgid "Detection Likelihood" +#~ msgstr "Pravdepodobnosť zistenia" + +#~ msgid "Very Low" +#~ msgstr "Veľmi nízka" + +#~ msgid "Voice Detector" +#~ msgstr "Detekcia reči" + +#~ msgid "Resampler" +#~ msgstr "Prevzorkovač" + +#~ msgid "paused" +#~ msgstr "pozastavené" + +#~ msgid "playing" +#~ msgstr "hrá" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "Import APO Presets" +#~ msgstr "Načítať APO predvoľbu" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "Exponent" +#~ msgstr "Exponent" diff --git a/po/news/sv.po b/po/news/sv.po new file mode 100644 index 0000000..9173a9d --- /dev/null +++ b/po/news/sv.po @@ -0,0 +1,2363 @@ +# Swedish translation of EasyEffects application. +# Copyright (C) 2017 +# This file is distributed under the same license as the easyeffects package. +# Patrik Nilsson , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "Ljudeffekter för PipeWire-applikationer" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects är ett avancerat verktyg för manipulation av ljud. Det " +"innehåller en ljudutjämnare (equalizer), ljudbegränsare (limiter), " +"kompressor och ett efterklangsverktyg (eko), för att bara nämna några få. " +"Där finns även en inbyggd frekvensanalysator som kompletterar dessa." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +#, fuzzy +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"Eftersom EasyEffects använder sig av standard PipeWire som ljudserver " +"stödjer den de flesta, om inte alla, program du använder. Alla applikationer " +"som stöds presenteras i huvudfönstret, där var och en kan aktiveras " +"individuellt." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Förutom att manipulera dina programs ljud kan EasyEffects tillämpa effekter " +"på en ingångsenhet, såsom en mikrofon. Detta är exempelvis användbart vid " +"ljudinspelning, men det fungerar även bra under röstsamtal." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"När EasyEffects startas kommer det ihåg konfigurationen som användes under " +"den senaste sessionen. Det är också möjligt att spara alla aktuella " +"inställningar som profiler." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "" +#~ "limiter;begränsare;kompressor;eko;efterklang;equalizer;utjämnare;auto;" +#~ "volym;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Förinställningar\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Sinustabell" + +#~ msgid "Mute Application" +#~ msgstr "Tysta applikationen" + +#~ msgid "Application Volume" +#~ msgstr "Applikationsvolym" + +#~ msgid "_Reset Settings" +#~ msgstr "_Återställ inställningar" + +#~ msgid "_About EasyEffects" +#~ msgstr "_Om EasyEffects" + +#~ msgid "Presets" +#~ msgstr "Profiler" + +#~ msgid "Presets Menu" +#~ msgstr "Förinställningsmeny" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects-fönster" + +#~ msgid "Applications List" +#~ msgstr "Applikationslista" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Applikationsnamn" + +#~ msgid "Target" +#~ msgstr "Målvärde (dB)" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Frekvens (Hz)" + +#~ msgid "Reset History" +#~ msgstr "Återställ historik" + +#~ msgid "Output Gain" +#~ msgstr "Utgångsförstärkning (dB)" + +#~ msgid "Input" +#~ msgstr "Ingång" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Plugin ingångsförstärkning (dB)" + +#~ msgid "Output" +#~ msgstr "Utgång" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Plugin utgångsförstärkning (dB)" + +#~ msgid "Reset" +#~ msgstr "Återställ" + +#~ msgid "Using" +#~ msgstr "Använder" + +#~ msgid "Device" +#~ msgstr "Enhet" + +#~ msgid "Name" +#~ msgstr "Namn" + +#~ msgid "Profile" +#~ msgstr "Profil" + +#~ msgid "Preset" +#~ msgstr "Förinställning" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Ta bort denna modellfil" + +#~ msgid "Listen" +#~ msgstr "Lyssna" + +#~ msgid "Application Name" +#~ msgstr "Applikationsnamn" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Visa blocklistade applikationer" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Applikationslista" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Visa blocklistade applikationer" + +#~ msgid "Compressor" +#~ msgstr "Kompressor" + +#~ msgid "Boosting" +#~ msgstr "Förstärkning" + +#~ msgid "Compression Mode" +#~ msgstr "Komprimeringsläge" + +#~ msgid "Boost Threshold" +#~ msgstr "Tröskelvärde för förstärkning (dB)" + +#~ msgid "Boost Amount" +#~ msgstr "Förstärkningsmängd" + +#~ msgid "Attack" +#~ msgstr "Attack (ms)" + +#~ msgid "Threshold" +#~ msgstr "Tröskelvärde (dB)" + +#~ msgid "Attack Time" +#~ msgstr "Attacktid (ms)" + +#~ msgid "Attack Threshold" +#~ msgstr "Tröskelvärde för attack (dB)" + +#~ msgid "Release" +#~ msgstr "Släpp (s)" + +#~ msgid "Release Time" +#~ msgstr "Tid för frisläppning (s)" + +#~ msgid "Release Threshold" +#~ msgstr "Tröskelvärde för frisläppning (dB)" + +#~ msgid "Ratio" +#~ msgstr "Förhållande (n:1)" + +#~ msgid "Knee" +#~ msgstr "Knävärde (dB)" + +#~ msgid "Makeup" +#~ msgstr "Makeup (dB)" + +#~ msgid "Sidechain" +#~ msgstr "Sidokedja" + +#~ msgid "Peak" +#~ msgstr "Topp" + +#~ msgid "Low-Pass" +#~ msgstr "Lågpass" + +#~ msgid "Sidechain Mode" +#~ msgstr "Sidokedjeläge" + +#~ msgid "Middle" +#~ msgstr "Mitten" + +#~ msgid "Side" +#~ msgstr "Sida" + +#~ msgid "Sidechain Source" +#~ msgstr "Sidokedjekälla" + +#~ msgid "Feed-back" +#~ msgstr "Respons" + +#~ msgid "Sidechain Type" +#~ msgstr "Typ av sidokedja" + +#~ msgid "Input Device" +#~ msgstr "Ingångsenhet" + +#~ msgid "PreAmplification" +#~ msgstr "Förförstärkning" + +#~ msgid "Sidechain Filters" +#~ msgstr "Sidokedjefilter" + +#~ msgid "High-Pass" +#~ msgstr "Högpass" + +#~ msgid "Frequency" +#~ msgstr "Frekvens (Hz)" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Högpassfilterläge" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Högpassfilterfrekvens" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Lågpassfilterläge" + +#~ msgid "Gain" +#~ msgstr "Förstärkning" + +#~ msgid "L" +#~ msgstr "V" + +#~ msgid "Left Channel" +#~ msgstr "Vänster kanal" + +#~ msgid "R" +#~ msgstr "H" + +#~ msgid "Right Channel" +#~ msgstr "Höger kanal" + +#~ msgid "Impulses" +#~ msgstr "Impulser" + +#~ msgid "Stereo Width" +#~ msgstr "Stereobredd" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Ingångsförstärkning (dB)" + +#~ msgid "Rate" +#~ msgstr "Takt" + +#~ msgid "Samples" +#~ msgstr "Prover" + +#~ msgid "Duration" +#~ msgstr "Varaktighet" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "Kombinera impulssvar" + +#~ msgid "Output File Name" +#~ msgstr "Utdatafilnamn" + +#~ msgid "Import Impulse" +#~ msgstr "Importera impuls" + +#~ msgid "Search Impulse File" +#~ msgstr "Sök impulsfil" + +#~ msgid "Impulse Files List" +#~ msgstr "Lista över impulsfiler" + +#~ msgid "Cutoff" +#~ msgstr "Gräns (Hz)" + +#~ msgid "Feed" +#~ msgstr "Mata (dB)" + +#~ msgid "Detection" +#~ msgstr "Upptäckt" + +#~ msgid "Frequency 1 Split" +#~ msgstr "Frekvens 1 delning (Hz)" + +#~ msgid "F2 Peak" +#~ msgstr "F2 topp" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "Frekvens 2 topp (Hz)" + +#~ msgid "F1 Gain" +#~ msgstr "F1 förstärkning (dB)" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "Frekvens 1 förstärkning (Hz)" + +#~ msgid "F2 Level" +#~ msgstr "F2 nivå" + +#~ msgid "Frequency 2 Level" +#~ msgstr "Frekvens 2 nivå (Hz)" + +#~ msgid "F2 Peak Q" +#~ msgstr "F2 topp Q" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Frekvens 2 topp Q" + +#~ msgid "Detected" +#~ msgstr "Upptäckt" + +#~ msgid "Reduction" +#~ msgstr "Reduktion" + +#~ msgid "Frame Size" +#~ msgstr "Ramstorlek" + +#~ msgid "Filter Length" +#~ msgstr "Filterlängd" + +#~ msgid "Split Channels" +#~ msgstr "Delade kanaler" + +#~ msgid "Flat Response" +#~ msgstr "Platt respons" + +#~ msgid "Load APO Preset" +#~ msgstr "Ladda APO-förinställning" + +#~ msgid "High Pass" +#~ msgstr "Högpass" + +#~ msgid "High Shelf" +#~ msgstr "Hög hylla" + +#~ msgid "Low Pass" +#~ msgstr "Lågpass" + +#~ msgid "Low Shelf" +#~ msgstr "Låg hylla" + +#~ msgid "All Pass" +#~ msgstr "Lågpass" + +#~ msgid "Band Type" +#~ msgstr "Bandtyp" + +#~ msgid "Band Mode" +#~ msgstr "Bandläge" + +#~ msgid "Width" +#~ msgstr "Bredd" + +#~ msgid "Quality" +#~ msgstr "Kvalitet" + +#~ msgid "Ceil" +#~ msgstr "Tak (dB)" + +#~ msgid "Description" +#~ msgstr "Beskrivning" + +#~ msgid "Remove this model file" +#~ msgstr "Ta bort denna modellfil" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Tid för frisläppning (s)" + +#~ msgid "Line Thin" +#~ msgstr "Linje tunn" + +#~ msgid "Line Wide" +#~ msgstr "Linje bred" + +#~ msgid "Line Tail" +#~ msgstr "Linje svans" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Sidokedjeförförstärkning" + +#~ msgid "Boost" +#~ msgstr "Förstärkning" + +#~ msgid "Stereo Link" +#~ msgstr "Stereolänk" + +#~ msgid "External Sidechain" +#~ msgstr "Extern sidokedja" + +#~ msgid "Auto Leveling" +#~ msgstr "Automatisk utjämning" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "Automatisk utjämningsattack" + +#~ msgid "Auto Leveling Release" +#~ msgstr "Automatisk utjämningsutlösning" + +#~ msgid "Auto Leveling Knee" +#~ msgstr "Automatisk knäutjämning" + +#~ msgid "Gain Left" +#~ msgstr "Förstärkning vänster" + +#~ msgid "Sidechain Left" +#~ msgstr "Sidokedja vänster" + +#~ msgid "Sidechain Right" +#~ msgstr "Sidokedja höger" + +#~ msgid "FFT Size" +#~ msgstr "FFT-storlek" + +#~ msgid "Output Volume" +#~ msgstr "Utgångsvolym" + +#~ msgid "Ceiling" +#~ msgstr "Tak" + +#~ msgid "Operating Mode" +#~ msgstr "Driftläge" + +#~ msgid "Sidechain Boost" +#~ msgstr "Sidokedjeförstärkning" + +#~ msgid "Bands List" +#~ msgstr "Lista över band" + +#~ msgid "Band Compression Mode" +#~ msgstr "Bandkomprimeringsläge" + +#~ msgid "Band Sidechain Options" +#~ msgstr "Alternativ för bandsidokedja" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Lågklippt filter" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Lågklippt filterfrekvens" + +#~ msgid "High-Cut Filter" +#~ msgstr "Högklippt filter" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Högklippt filterfrekvens" + +#~ msgid "Band Gain" +#~ msgstr "Bandförstärkning" + +#~ msgid "Split Mode" +#~ msgstr "Delat läge" + +#~ msgid "Split Frequency 1" +#~ msgstr "Delad frekvens 1" + +#~ msgid "Split Frequency 2" +#~ msgstr "Delad frekvens 2" + +#~ msgid "Split Frequency 3" +#~ msgstr "Delad frekvens 3" + +#~ msgid "Sub Band" +#~ msgstr "Underband" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Förbikoppling av band 1" + +#~ msgid "Band 1 Solo" +#~ msgstr "Band 1 solo" + +#~ msgid "Band 1 Detection" +#~ msgstr "Band 1-detektering" + +#~ msgid "Band 1 Attack" +#~ msgstr "Band 1 attack" + +#~ msgid "Band 1 Release" +#~ msgstr "Band 1 släpp" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Band 1 tröskel" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Band 1-förhållande" + +#~ msgid "Band 1 Knee" +#~ msgstr "Band 1 knä" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Band 1 sammansättning" + +#~ msgid "Max Reduction" +#~ msgstr "Maximal minskning" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Band 1 max reduktion" + +#~ msgid "Low Band" +#~ msgstr "Lågt band" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Förbikoppling av band 2" + +#~ msgid "Band 2 Solo" +#~ msgstr "Band 2 solo" + +#~ msgid "Band 2 Detection" +#~ msgstr "Band 2-detektering" + +#~ msgid "Band 2 Attack" +#~ msgstr "Band 2 attack" + +#~ msgid "Band 2 Release" +#~ msgstr "Band 2 släpp" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Tröskelvärde för band 2" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Band 2-förhållande" + +#~ msgid "Band 2 Knee" +#~ msgstr "Band 2 knä" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Band 2 sammansättning" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Band 2 max reduktion" + +#~ msgid "Mid Band" +#~ msgstr "Mittband" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Förbikoppling av band 3" + +#~ msgid "Band 3 Solo" +#~ msgstr "Band 3 solo" + +#~ msgid "Band 3 Detection" +#~ msgstr "Band 3-detektering" + +#~ msgid "Band 3 Attack" +#~ msgstr "Band 3 attack" + +#~ msgid "Band 3 Release" +#~ msgstr "Band 3 släpp" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Band 3 tröskelvärde" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Makeup (dB)" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "High Band" +#~ msgstr "Högpass" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Release (s)" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Attack (ms)" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Release (s)" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Tröskelvärde (dB)" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Makeup (dB)" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Förstärkningsreducering" + +#~ msgid "General" +#~ msgstr "Allmänt" + +#, fuzzy +#~ msgid "Custom Input Device" +#~ msgstr "Ingångs-begränsning" + +#, fuzzy +#~ msgid "Custom Output Device" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Server Information" +#~ msgstr "Efterljud (eko)" + +#, fuzzy +#~ msgid "Sampling Rate" +#~ msgstr "Resampler" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "Frekvens (Hz)" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Frekvens (Hz)" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Frekvens (Hz)" + +#, fuzzy +#~ msgid "Output Devices" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Output Presets" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Input Devices" +#~ msgstr "Ingångs-begränsning" + +#, fuzzy +#~ msgid "Input Presets" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Test Signal" +#~ msgstr "Testsignal" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Sinustabell" + +#~ msgid "Channels" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "Both Channels" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "Sine Wave" +#~ msgstr "Sinustabell" + +#~ msgid "White Noise" +#~ msgstr "Vitt brus" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Hög hylla" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvalitet" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Förinställning" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Upptäckt" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Ta bort denna modellfil" + +#, fuzzy +#~ msgid "Add Effect" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "_General" +#~ msgstr "Allmänt" + +#, fuzzy +#~ msgid "Service" +#~ msgstr "Ingångs-begränsning" + +#~ msgid "Use Dark Theme" +#~ msgstr "Använd mörkt tema" + +#, fuzzy +#~ msgid "_Spectrum" +#~ msgstr "Spektrum" + +#~ msgid "Points" +#~ msgstr "Punkter" + +#, fuzzy +#~ msgid "Line Width" +#~ msgstr "Bredd" + +#, fuzzy +#~ msgid "Frequency Range" +#~ msgstr "Frekvens (Hz)" + +#, fuzzy +#~ msgid "Minimum" +#~ msgstr "Frekvens (Hz)" + +#, fuzzy +#~ msgid "Save current settings to this preset file" +#~ msgstr "Spara nuvarande inställningar som profil" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Ta bort profil" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "New Input Preset Name" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Search Input Preset" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Input Presets List" +#~ msgstr "Öppna förinställning" + +#~ msgid "Room Size" +#~ msgstr "Rumsstorlek" + +#, fuzzy +#~ msgid "Small" +#~ msgstr "Litet rum" + +#, fuzzy +#~ msgid "Large" +#~ msgstr "Målvärde (dB)" + +#, fuzzy +#~ msgid "Pre Delay" +#~ msgstr "Release (ms)" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Målvärde (dB)" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Nivå" + +#, fuzzy +#~ msgid "Ambience" +#~ msgstr "Tystnad" + +#, fuzzy +#~ msgid "Room" +#~ msgstr "Rumsstorlek" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "Active Model" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Overview" +#~ msgstr "Ingångs-begränsning" + +#, fuzzy +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Balance" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Input Balance" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Nivå" + +#, fuzzy +#~ msgid "Stereo Matrix" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "Stereo Mode" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Side Level" +#~ msgstr "Nivå" + +#, fuzzy +#~ msgid "Side Balance" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Middle Level" +#~ msgstr "Nivå" + +#, fuzzy +#~ msgid "Middle Panorama" +#~ msgstr "Panorama" + +#, fuzzy +#~ msgid "Output Balance" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Delay L/R" +#~ msgstr "Release (ms)" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Release (ms)" + +#, fuzzy +#~ msgid "Stereo Base" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Stereo Phase" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Creating" +#~ msgstr "Inställningar" + +#, fuzzy +#~ msgid "channels" +#~ msgstr "Kanaler" + +#~ msgid "Output Presets: " +#~ msgstr "Utgångsförinställningar: " + +#~ msgid "Input Presets: " +#~ msgstr "Ingångsförinställningar: " + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Ljudeffekter för PulseAudio applikationer" + +#~ msgid "Reset EasyEffects." +#~ msgstr "Återställ EasyEffects." + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Lista över impulsfiler" + +#, fuzzy +#~ msgid "Import Impulse File" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "Cancel" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Impulse Response" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Lista över impulsfiler" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Sök impulsfil" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Import APO Preset File" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "APO Presets" +#~ msgstr "Profiler" + +#~ msgid "Remove" +#~ msgstr "Ta bort" + +#, fuzzy +#~ msgid "Output Device" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Import Preset" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Import Model File" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "RNNoise Models" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Bass Enhancer" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Crystalizer" +#~ msgstr "Utjämnare" + +#, fuzzy +#~ msgid "Delay" +#~ msgstr "Release (ms)" + +#, fuzzy +#~ msgid "Echo Canceller" +#~ msgstr "Ljudförstärkare" + +#~ msgid "Equalizer" +#~ msgstr "Utjämnare" + +#, fuzzy +#~ msgid "Filter" +#~ msgstr "Filter typ" + +#, fuzzy +#~ msgid "Limiter" +#~ msgstr "Gränsvärde (dB)" + +#, fuzzy +#~ msgid "Multiband Compressor" +#~ msgstr "Kompressor" + +#, fuzzy +#~ msgid "Multiband Gate" +#~ msgstr "Kompressor" + +#, fuzzy +#~ msgid "Reverberation" +#~ msgstr "Efterljud (eko)" + +#, fuzzy +#~ msgid "Noise Reduction" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "Stereo Tools" +#~ msgstr "Ljudförstärkare" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Import Presets" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibrering och mikrofon korrigering" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Sinustabell" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Sinustabell" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latens" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "Output Effects" +#~ msgstr "Ingångs-begränsning" + +#~ msgid "Settings" +#~ msgstr "Inställningar" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Inställningar" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Kalibrering" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Testsignal" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Testsignal" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Spectrum Color" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "Nivå" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Lågpass" + +#~ msgid "Input Limiter" +#~ msgstr "Ingångs-begränsning" + +#~ msgid "Calibration" +#~ msgstr "Kalibrering" + +#, fuzzy +#~ msgid "Limit" +#~ msgstr "Gränsvärde (dB)" + +#~ msgid "Attenuation" +#~ msgstr "Försvagning" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Ljudeffekter för PulseAudio applikationer" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Ljudeffekter för PulseAudio applikationer" + +#, fuzzy +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrering och mikrofon korrigering" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Fyrkant" + +#~ msgid "Saw" +#~ msgstr "Sågtand" + +#~ msgid "Triangle" +#~ msgstr "Triangel" + +#, fuzzy +#~ msgid "Silence" +#~ msgstr "Tystnad" + +#~ msgid "Pink Noise" +#~ msgstr "Skärt brus" + +#~ msgid "Ticks" +#~ msgstr "Tickande" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussiskt brus" + +#~ msgid "Red Noise" +#~ msgstr "Rött brus" + +#~ msgid "Blue Noise" +#~ msgstr "Blått brus" + +#~ msgid "Violet Noise" +#~ msgstr "Violett brus" + +#~ msgid "Volume" +#~ msgstr "Volym" + +#, fuzzy +#~ msgid "Window" +#~ msgstr "Mellanrum (s)" + +#~ msgid "Measure Noise" +#~ msgstr "Mät brus" + +#~ msgid "Subtract Noise" +#~ msgstr "Ta bort brus" + +#, fuzzy +#~ msgid "High" +#~ msgstr "Högpass" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "Very High" +#~ msgstr "Högpass" + +#, fuzzy +#~ msgid "Noise Suppressor" +#~ msgstr "Kompressor" + +#, fuzzy +#~ msgid "Detection Likelihood" +#~ msgstr "Försvagning" + +#, fuzzy +#~ msgid "Voice Detector" +#~ msgstr "Försvagning" + +#, fuzzy +#~ msgid "Select the impulse Response File" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Kalibrering" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Återställ frekvens" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Inställningar" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Försvagning" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frekvens (Hz)" + +#, fuzzy +#~ msgid "Channel Mapping" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Resampler" + +#, fuzzy +#~ msgid "Buffer" +#~ msgstr "Latens" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Ljudutjämnare - Utgång" + +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Rumsstorlek" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Förstärkningsreducering" diff --git a/po/news/th.po b/po/news/th.po new file mode 100644 index 0000000..b8c0f74 --- /dev/null +++ b/po/news/th.po @@ -0,0 +1,1084 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Thai \n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +msgid "Updated translations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" diff --git a/po/news/tr.po b/po/news/tr.po new file mode 100644 index 0000000..a8a8c40 --- /dev/null +++ b/po/news/tr.po @@ -0,0 +1,3026 @@ +# EasyEffects Türkçe Çeviri Dosyası. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# Serdar Sağlam , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 08:17+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.0-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +#, fuzzy +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "PipeWire Uygulamaları için Ses Efektleri" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +#, fuzzy +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"EasyEffects gelişmiş bir ses işleme aracıdır. Ekolayzır, sınırlayıcı, " +"sıkıştırıcı ve yankılanma araçları içerir. Bunları tamamlamak için ayrıca " +"bir spektrum analizörü bulunmaktadır." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +#, fuzzy +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"EasyEffects, PulseEffects'in devamıdır. EasyEffects yalnızca PipeWire'ın ses " +"sunucusunu destekler. PulseAudio kullanıcıları bunun yerine PulseEffects " +"kullanmalıdır." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"EasyEffects, varsayılan PipeWire ses sunucusunu kullandığından, " +"kullandığınız uygulamaların tümü olmasa da çoğu ile çalışacaktır. " +"Desteklenen tüm uygulamalar, her birinin ayrı ayrı etkinleştirilebileceği " +"ana pencerede sunulur." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +#, fuzzy +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"Ses çıkışını manipüle etmenin yanı sıra, EasyEffects, mikrofon gibi bir " +"giriş cihazına da efektler uygulayabilir. Bu özellik ses kaydında da " +"kullanışlıdır ve sesli konuşmalarda da iyi çalışır." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +#, fuzzy +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"EasyEffects başlatıldığında, son oturumda kullanılan ayarlamaları rahatlıkla " +"hatırlayacaktır. Tüm mevcut ayarları profil olarak kaydetmek de mümkündür." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "İki ses çıkışı uygulamasını gösteren ana sayfa" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "Ses denetimlerini gösteren bas yükseltici sayfası" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "Ses denetimlerini gösteren sarsıcı sayfası" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "Özellikler:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "Hata düzeltmeleri:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "Diğer notlar:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "Çeviriler güncellendi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "Belgeler güncellendi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "" +"Önceden ayarlanmış otomatik yükleme kodunun bluez5 cihazlarıyla uyumluluğu " +"geliştirildi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"İlgili lv2 eklentisi sistemde yüklü olmadığında efekt arayüzü artık " +"yüklenmiyor. Onun yerine kullanıcıya bir durum mesajı gösterilir." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "Belgeler güncellendi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "Çeviriler güncellendi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "Çeviriler güncellendi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "" +"Efektler uygulanırken, EasyEffects'in penceresini kapatırken çökmesine neden " +"olan bir hata düzeltildi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +#, fuzzy +msgid "Many translation updates" +msgstr "Çeviriler güncellendi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "" +"EasyEffects simgesi, QT masaüstlerinde görünmesini sağlayacak şekilde " +"güncellendi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "Bilgisayarın askıya alınması için daha iyi destek." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"LibAdwaita, penceremizin bazı bölümlerini oluşturmak ve koyu ile açık " +"temalar arasında geçiş yapmak için kullanılır." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "" +"Ayarlar menüsü, LibAdwaita widget'ları kullanılarak yeniden tasarlandı." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "" +"GTKMM ve GLIBMM artık bir bağımlılık değil. Artık doğrudan gtk4 kullanıyoruz." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "" +"İngilizce'den farklı yerelleştirmeye sahip sistemlerde giriş uygulamaları " +"listesine Pavucontrol artık eklenmiyor." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "Çince çeviri güncellendi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "İtalyanca çeviri güncellendi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "Birkaç widget'ta yerel ayar düzeltildi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "Birkaç widget'ta yanlış hizalama düzeltildi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "Ekolayzır arayüzü iyileştirildi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +#, fuzzy +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "" +"Uygulama ve deposu, PulseEffects'ten `EasyEffects` olarak yeniden " +"adlandırıldı" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3, gtkmm4 ile değiştirildi" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Gstreamer, yerel PipeWire süzgeçleriyle değiştirildi." + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "" +"Yeni kütüphaneler kullanılıyor ve daha önce isteğe bağlı olan " +"kütüphanelerden bazıları artık gerekli" + +#~ msgid "This release adds the following features:" +#~ msgstr "Bu sürüm aşağıdaki özellikleri ekler:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Bu sürüm aşağıdaki hataları düzeltir:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bant 1" + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Bu sürüm aşağıdaki hatayı düzeltir:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Bu sürüm aşağıdaki özelliği ekler:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "Ekolayzır, Sıkıştırıcı ve Diğer Ses Efektleri" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "" +#~ "sınırlayıcı,kompresör,yankı,ekolayzır,otomatikses;yükseltici;sıkıştırıcı;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"Ön Ayarlar\"" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Etkinleştir" + +#~ msgid "Mute Application" +#~ msgstr "Uygulamayı Sessize Al" + +#~ msgid "Application Volume" +#~ msgstr "Uygulama Ses Seviyesi" + +#~ msgid "_Preferences" +#~ msgstr "_Tercihler" + +#~ msgid "_Manual" +#~ msgstr "_Kılavuz" + +#~ msgid "_Shortcuts" +#~ msgstr "Kısa_yollar" + +#~ msgid "_Reset Settings" +#~ msgstr "Ayarları _Sıfırla" + +#~ msgid "_About EasyEffects" +#~ msgstr "EasyEffects _Hakkında" + +#~ msgid "Presets" +#~ msgstr "Ön Ayarlar" + +#~ msgid "Presets Menu" +#~ msgstr "Ön Ayarlar Menüsü" + +#, fuzzy +#~ msgid "Global Bypass" +#~ msgstr "Atla" + +#~ msgid "Primary Menu" +#~ msgstr "Ana Menü" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects Penceresi" + +#~ msgid "Applications List" +#~ msgstr "Uygulama Listesi" + +#, fuzzy +#~ msgid "Empty List" +#~ msgstr "Boş Duvarlar" + +#, fuzzy +#~ msgid "No Audio Application Available" +#~ msgstr "Uygulama Adı" + +#~ msgid "Target" +#~ msgstr "Hedef" + +#, fuzzy +#~ msgid "Maximum History" +#~ msgstr "Azami" + +#~ msgid "Momentary" +#~ msgstr "Anlık" + +#, fuzzy +#~ msgid "Short-Term" +#~ msgstr "Kısa Süreli" + +#~ msgid "Integrated" +#~ msgstr "Tümleşik" + +#, fuzzy +#~ msgid "Geometric Mean (MSI)" +#~ msgstr "Geometrik Ortalama" + +#, fuzzy +#~ msgid "Geometric Mean (MS)" +#~ msgstr "Geometrik Ortalama" + +#, fuzzy +#~ msgid "Geometric Mean (MI)" +#~ msgstr "Geometrik Ortalama" + +#, fuzzy +#~ msgid "Geometric Mean (SI)" +#~ msgstr "Geometrik Ortalama" + +#~ msgid "Reset History" +#~ msgstr "Geçmişi Sıfırla" + +#~ msgid "Relative" +#~ msgstr "Göreceli" + +#~ msgid "Range" +#~ msgstr "Sınır" + +#~ msgid "Loudness" +#~ msgstr "Yüksek Ses" + +#~ msgid "Output Gain" +#~ msgstr "Çıkış Kazancı" + +#~ msgid "Input" +#~ msgstr "Giriş" + +#~ msgid "Plugin Input Gain" +#~ msgstr "Eklenti Giriş Kazancı" + +#~ msgid "Output" +#~ msgstr "Çıkış" + +#~ msgid "Plugin Output Gain" +#~ msgstr "Eklenti Çıkış Kazancı" + +#~ msgid "Reset" +#~ msgstr "Sıfırla" + +#~ msgid "Device" +#~ msgstr "Aygıt" + +#~ msgid "Name" +#~ msgstr "İsim" + +#~ msgid "Profile" +#~ msgstr "Profil" + +#, fuzzy +#~ msgid "Preset" +#~ msgstr "Ön Ayarlar" + +#, fuzzy +#~ msgid "Remove this autoload preset" +#~ msgstr "Otomatik Yükleme Ön Ayarını Kaldır" + +#~ msgid "Listen" +#~ msgstr "Liste" + +#~ msgid "Blend Harmonics" +#~ msgstr "Harmonik Karışımları" + +#~ msgid "3rd" +#~ msgstr "3." + +#~ msgid "2nd" +#~ msgstr "2." + +#~ msgid "Amount" +#~ msgstr "Miktar" + +#~ msgid "Harmonics" +#~ msgstr "Harmonikler" + +#~ msgid "Scope" +#~ msgstr "Kapsam" + +#~ msgid "Floor" +#~ msgstr "Zemin" + +#~ msgid "Floor Value" +#~ msgstr "Zemin Değeri" + +#~ msgid "Link" +#~ msgstr "Bağ" + +#~ msgid "Application Name" +#~ msgstr "Uygulama Adı" + +#, fuzzy +#~ msgid "Add to Excluded Applications" +#~ msgstr "Kara Listeye Alınan Uygulamaları Göster" + +#, fuzzy +#~ msgid "Excluded Applications List" +#~ msgstr "Kara Listeye Alınan Uygulamalar Listesi" + +#, fuzzy +#~ msgid "Show Excluded Applications" +#~ msgstr "Kara Listeye Alınan Uygulamaları Göster" + +#~ msgid "Compressor" +#~ msgstr "Sıkıştırıcı" + +#~ msgid "Mode" +#~ msgstr "Kip" + +#~ msgid "Downward" +#~ msgstr "Aşağıya" + +#~ msgid "Upward" +#~ msgstr "Yukarıya" + +#~ msgid "Compression Mode" +#~ msgstr "Sıkıştırma Kipi" + +#, fuzzy +#~ msgid "Boost Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Boost Amount" +#~ msgstr "Miktar" + +#~ msgid "Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Time" +#~ msgstr "Eş Zamanlı" + +#~ msgid "Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Attack Time" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Attack Threshold" +#~ msgstr "Eşik" + +#~ msgid "Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Release Time" +#~ msgstr "Eş Zamanlı" + +#, fuzzy +#~ msgid "Release Threshold" +#~ msgstr "Eşik" + +#~ msgid "Ratio" +#~ msgstr "Oran" + +#~ msgid "Knee" +#~ msgstr "Oynak" + +#~ msgid "Makeup" +#~ msgstr "Süs" + +#~ msgid "Sidechain" +#~ msgstr "Yanzincir" + +#~ msgid "Peak" +#~ msgstr "Doruk" + +#~ msgid "RMS" +#~ msgstr "RMS" + +#~ msgid "Low-Pass" +#~ msgstr "Düşük-Geçiş" + +#~ msgid "Uniform" +#~ msgstr "Aynı" + +#, fuzzy +#~ msgid "Sidechain Mode" +#~ msgstr "Yanzincir" + +#~ msgid "Source" +#~ msgstr "Kaynak" + +#~ msgid "Middle" +#~ msgstr "Orta" + +#~ msgid "Side" +#~ msgstr "Yan" + +#~ msgid "Left" +#~ msgstr "Sol" + +#~ msgid "Right" +#~ msgstr "Sağ" + +#, fuzzy +#~ msgid "Sidechain Source" +#~ msgstr "Yanzincir" + +#~ msgid "Type" +#~ msgstr "Tür" + +#~ msgid "Feed-forward" +#~ msgstr "İleri-besleme" + +#~ msgid "Feed-back" +#~ msgstr "Geri-besleme" + +#, fuzzy +#~ msgid "Sidechain Type" +#~ msgstr "Yanzincir" + +#~ msgid "Input Device" +#~ msgstr "Giriş Aygıtı" + +#, fuzzy +#~ msgid "PreAmplification" +#~ msgstr "Öntanımlı-yükselticiler" + +#~ msgid "Reactivity" +#~ msgstr "Tepkinirlik" + +#~ msgid "Lookahead" +#~ msgstr "İlerleme" + +#~ msgid "Sidechain Filters" +#~ msgstr "Yanzincir Süzgeçleri" + +#~ msgid "High-Pass" +#~ msgstr "Yüksek Geçiş" + +#~ msgid "Frequency" +#~ msgstr "Sıklık" + +#~ msgid "Off" +#~ msgstr "Kapalı" + +#~ msgid "12 dB/oct" +#~ msgstr "12 dB/oct" + +#~ msgid "24 dB/oct" +#~ msgstr "24 dB/oct" + +#~ msgid "36 dB/oct" +#~ msgstr "36 dB/oct" + +#~ msgid "High-Pass Filter Mode" +#~ msgstr "Yüksek Geçiş Süzgeci Kipi" + +#~ msgid "High-Pass Filter Frequency" +#~ msgstr "Yüksek Geçiş Süzgeci Frekansı" + +#~ msgid "Low-Pass Filter Mode" +#~ msgstr "Alçak Geçiş Süzgeci Kipi" + +#~ msgid "Gain" +#~ msgstr "Kazanç" + +#, fuzzy +#~ msgid "Envelope" +#~ msgstr "Eğim" + +#~ msgid "Curve" +#~ msgstr "Eğri" + +#~ msgid "L" +#~ msgstr "L" + +#~ msgid "Left Channel" +#~ msgstr "Sol Kanal" + +#~ msgid "R" +#~ msgstr "R" + +#~ msgid "Right Channel" +#~ msgstr "Sağ Kanal" + +#, fuzzy +#~ msgid "Impulses" +#~ msgstr "Dürtü Yanıtı" + +#~ msgid "Stereo Width" +#~ msgstr "Stereo Genişliği" + +#~ msgid "Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Log Scale" +#~ msgstr "Ölçek" + +#, fuzzy +#~ msgid "Autogain" +#~ msgstr "Otomatik Kazanç" + +#~ msgid "Rate" +#~ msgstr "Oran" + +#~ msgid "Samples" +#~ msgstr "Örnekler" + +#~ msgid "Duration" +#~ msgstr "Süre" + +#, fuzzy +#~ msgid "Combine Impulse Responses" +#~ msgstr "Dürtü Yanıtı" + +#~ msgid "Output File Name" +#~ msgstr "Çıkış Dosyası Adı" + +#~ msgid "Import Impulse" +#~ msgstr "Dürtü Dosyasını İçeri Al" + +#~ msgid "Search" +#~ msgstr "Ara" + +#, fuzzy +#~ msgid "Search Impulse File" +#~ msgstr "Dürtü Dosyasını İçe Aktar" + +#, fuzzy +#~ msgid "Impulse Files List" +#~ msgstr "Dürtü Dosyasını İçe Aktar" + +#~ msgid "Default" +#~ msgstr "Öntanımlı" + +#~ msgid "Cutoff" +#~ msgstr "Kesici" + +#~ msgid "Feed" +#~ msgstr "Akış" + +#~ msgid "Bypass" +#~ msgstr "Atla" + +#~ msgid "Mute" +#~ msgstr "Sessiz" + +#~ msgid "Detection" +#~ msgstr "Keşif" + +#~ msgid "Wide" +#~ msgstr "Geniş" + +#~ msgid "Split" +#~ msgstr "Ayır" + +#, fuzzy +#~ msgid "F1 Split" +#~ msgstr "Ayır" + +#, fuzzy +#~ msgid "Frequency 1 Split" +#~ msgstr "Sıklık" + +#, fuzzy +#~ msgid "F2 Peak" +#~ msgstr "Doruk" + +#, fuzzy +#~ msgid "Frequency 2 Peak" +#~ msgstr "Sıklık" + +#, fuzzy +#~ msgid "F1 Gain" +#~ msgstr "Kazanç" + +#, fuzzy +#~ msgid "Frequency 1 Gain" +#~ msgstr "Sıklık" + +#, fuzzy +#~ msgid "F2 Level" +#~ msgstr "Seviye" + +#, fuzzy +#~ msgid "Frequency 2 Level" +#~ msgstr "Sıklık" + +#, fuzzy +#~ msgid "F2 Peak Q" +#~ msgstr "Q Doruk" + +#, fuzzy +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "Sıklık" + +#~ msgid "Laxity" +#~ msgstr "Gevşeklik" + +#~ msgid "Detected" +#~ msgstr "Saptanan" + +#, fuzzy +#~ msgid "Reduction" +#~ msgstr "Azalım" + +#~ msgid "Frame Size" +#~ msgstr "Çerçeve Boyutu" + +#~ msgid "Filter Length" +#~ msgstr "Süzgeç Uzunluğu" + +#, fuzzy +#~ msgid "Excluded Apps" +#~ msgstr "hariç tutuldu" + +#~ msgid "Bands" +#~ msgstr "Bantlar" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#~ msgid "Split Channels" +#~ msgstr "Kanalları Böl" + +#~ msgid "Flat Response" +#~ msgstr "Düz Yanıt" + +#~ msgid "Calculate Frequencies" +#~ msgstr "Frekansları Hesapla" + +#~ msgid "Load APO Preset" +#~ msgstr "APO Ön Ayarını Yükle" + +#~ msgid "Bell" +#~ msgstr "Çan" + +#~ msgid "High Pass" +#~ msgstr "Yüksek Geçiş" + +#~ msgid "High Shelf" +#~ msgstr "Yüksek Sığlık" + +#~ msgid "Low Pass" +#~ msgstr "Düşük Geçiş" + +#~ msgid "Low Shelf" +#~ msgstr "Düşük Sığlık" + +#~ msgid "Notch" +#~ msgstr "Çentik" + +#~ msgid "Resonance" +#~ msgstr "Çınlama" + +#, fuzzy +#~ msgid "All Pass" +#~ msgstr "Düşük Geçiş" + +#~ msgid "Band Type" +#~ msgstr "Bant Türü" + +#~ msgid "Band Mode" +#~ msgstr "Bant Kipi" + +#~ msgid "Slope" +#~ msgstr "Eğim" + +#~ msgid "Band Slope" +#~ msgstr "Bant Eğimi" + +#~ msgid "Width" +#~ msgstr "Genişlik" + +#~ msgid "Quality" +#~ msgstr "Kalite" + +#~ msgid "Solo" +#~ msgstr "Tekli" + +#, fuzzy +#~ msgid "Ceil" +#~ msgstr "Tavan" + +#~ msgid "Ceil Value" +#~ msgstr "Tavan Değeri" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Description" +#~ msgstr "Açıklama" + +#~ msgid "Remove this model file" +#~ msgstr "Bu model dosyasını kaldır" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Düşük geçiş" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Düşük geçiş" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Düşük geçiş" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Yüksek geçiş" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Yüksek geçiş" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Yüksek geçiş" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Bant geçişi" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Bant geçişi" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Bant geçişi" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Bant reddet" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Bant reddet" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "12dB/oct Bant reddet" + +#~ msgid "Inertia" +#~ msgstr "Durağan" + +#~ msgid "Gate" +#~ msgstr "Aralık" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "Eş Zamanlı" + +#, fuzzy +#~ msgid "Internal" +#~ msgstr "Tümleşik" + +#~ msgid "Gating" +#~ msgstr "Geçitleme" + +#~ msgid "Oversampling" +#~ msgstr "Aşırı Örnekleme" + +#, fuzzy +#~ msgid "Herm Wide" +#~ msgstr "Geniş" + +#, fuzzy +#~ msgid "Exp Wide" +#~ msgstr "Geniş" + +#, fuzzy +#~ msgid "Line Thin" +#~ msgstr "Hat Genişliği" + +#, fuzzy +#~ msgid "Line Wide" +#~ msgstr "Hat Genişliği" + +#, fuzzy +#~ msgid "Line Tail" +#~ msgstr "Sinüs Tablosu" + +#~ msgid "None" +#~ msgstr "Hiçbiri" + +#, fuzzy +#~ msgid "Sidechain PreAmplification" +#~ msgstr "Öntanımlı-yükselticiler" + +#~ msgid "Stereo Link" +#~ msgstr "Stereo Bağ" + +#, fuzzy +#~ msgid "External Sidechain" +#~ msgstr "Yanzincir" + +#, fuzzy +#~ msgid "Auto Leveling" +#~ msgstr "Otomatik Kazanç" + +#, fuzzy +#~ msgid "Gain Left" +#~ msgstr "Kazanç" + +#, fuzzy +#~ msgid "Gain Right" +#~ msgstr "Sağ" + +#, fuzzy +#~ msgid "Sidechain Left" +#~ msgstr "Yanzincir" + +#, fuzzy +#~ msgid "Sidechain Right" +#~ msgstr "Yanzincir" + +#~ msgid "Standard" +#~ msgstr "Standart" + +#~ msgid "Flat" +#~ msgstr "Düz" + +#, fuzzy +#~ msgid "FFT Size" +#~ msgstr "Çerçeve Boyutu" + +#~ msgid "Output Volume" +#~ msgstr "Çıkış Ses Seviyesi" + +#~ msgid "Ceiling" +#~ msgstr "Tavan" + +#~ msgid "Operating Mode" +#~ msgstr "Çalışma Kipi" + +#~ msgid "Classic" +#~ msgstr "Klasik" + +#~ msgid "Modern" +#~ msgstr "Çağdaş" + +#, fuzzy +#~ msgid "Sidechain Boost" +#~ msgstr "Yanzincir" + +#~ msgid "Bands List" +#~ msgstr "Bant Listesi" + +#~ msgid "Band 1" +#~ msgstr "Bant 1" + +#~ msgid "Band 2" +#~ msgstr "Bant 2" + +#~ msgid "Band 3" +#~ msgstr "Bant 3" + +#~ msgid "Band 4" +#~ msgstr "Bant 4" + +#~ msgid "Band 5" +#~ msgstr "Bant 5" + +#~ msgid "Band 6" +#~ msgstr "Bant 6" + +#~ msgid "Band 7" +#~ msgstr "Bant 7" + +#~ msgid "Band 8" +#~ msgstr "Bant 8" + +#, fuzzy +#~ msgid "Band End" +#~ msgstr "Bantlar" + +#~ msgid "Band Compression Mode" +#~ msgstr "Bant Sıkıştırma Kipi" + +#, fuzzy +#~ msgid "Band Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Süzgeç" + +#, fuzzy +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "Frekansları Hesapla" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Yüksek Geçiş Süzgeci" + +#, fuzzy +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "Frekansları Hesapla" + +#~ msgid "Band Gain" +#~ msgstr "Bant Kazancı" + +#~ msgid "Band Curve" +#~ msgstr "Bant Eğrisi" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Ayır" + +#~ msgid "Split 1/2" +#~ msgstr "1/2 Böl" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Sıklık" + +#~ msgid "Split 2/3" +#~ msgstr "2/3 Böl" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Sıklık" + +#~ msgid "Split 3/4" +#~ msgstr "3/4 Böl" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Sıklık" + +#~ msgid "Sub Band" +#~ msgstr "Alt Bant" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Süs" + +#~ msgid "Max Reduction" +#~ msgstr "Azalım" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Azalım" + +#~ msgid "Low Band" +#~ msgstr "Düşük Bant" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Süs" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Azalım" + +#~ msgid "Mid Band" +#~ msgstr "Orta Bant" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Süs" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Azalım" + +#~ msgid "High Band" +#~ msgstr "Yüksek Bant" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Süs" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Azalım" + +#~ msgid "General" +#~ msgstr "Genel" + +#~ msgid "Use Default Input" +#~ msgstr "Öntanımlı Girişi Kullan" + +#~ msgid "Custom Input Device" +#~ msgstr "Özel Giriş Aygıtı" + +#~ msgid "Use Default Output" +#~ msgstr "Öntanımlı Çıkışı Kullan" + +#~ msgid "Custom Output Device" +#~ msgstr "Özel Çıkış Aygıtı" + +#~ msgid "Server Information" +#~ msgstr "Sunucu Bilgileri" + +#~ msgid "Header Version" +#~ msgstr "Başlık Sürümü" + +#~ msgid "Library Version" +#~ msgstr "Kütüphane Sürümü" + +#~ msgid "Sampling Rate" +#~ msgstr "Örnekleme Hızı" + +#, fuzzy +#~ msgid "Maximum Quantum" +#~ msgstr "Azami Kazanç" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "Öntanımlı Sink" + +#~ msgid "Output Devices" +#~ msgstr "Çıkış Aygıtları" + +#~ msgid "Output Presets" +#~ msgstr "Çıkış Ön Ayarları" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "Çıkış Otomatik Yükleme Ön Ayarları Listesi" + +#~ msgid "Input Devices" +#~ msgstr "Giriş Aygıtları" + +#~ msgid "Input Presets" +#~ msgstr "Giriş Ön Ayarları" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "Giriş Otomatik Yükleme Ön Ayarları Listesi" + +#~ msgid "Modules" +#~ msgstr "Modüller" + +#~ msgid "Modules List" +#~ msgstr "Modül Listesi" + +#~ msgid "Clients" +#~ msgstr "İstemciler" + +#~ msgid "Clients List" +#~ msgstr "İstemci Listesi" + +#~ msgid "Test Signal" +#~ msgstr "Test Sinyali" + +#~ msgid "State" +#~ msgstr "Durum" + +#, fuzzy +#~ msgid "Enabled" +#~ msgstr "Etkinleştir" + +#~ msgid "Properties" +#~ msgstr "Özellikler" + +#~ msgid "Channels" +#~ msgstr "Kanallar" + +#~ msgid "Both Channels" +#~ msgstr "Her İki Kanal" + +#~ msgid "Waveform" +#~ msgstr "Dalga Biçimi" + +#~ msgid "Sine Wave" +#~ msgstr "Sinüs Dalgası" + +#~ msgid "White Noise" +#~ msgstr "Beyaz Gürültü" + +#~ msgid "High Speed" +#~ msgstr "Yüksek Hız" + +#~ msgid "High Quality" +#~ msgstr "Yüksek Kalite" + +#~ msgid "High Consistency" +#~ msgstr "Yüksek Tutarlılık" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Biçim" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Ön Ayarlar" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Canlılık" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Sıkıştırma" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Yumuşak kırpım" + +#~ msgid "Cents" +#~ msgstr "Küsür" + +#~ msgid "Semitones" +#~ msgstr "Yarım Ses" + +#~ msgid "Octaves" +#~ msgstr "Oktav" + +#, fuzzy +#~ msgid "Remove this effect" +#~ msgstr "Bu model dosyasını kaldır" + +#~ msgid "Used Plugins List" +#~ msgstr "Kullanılan Eklentiler Listesi" + +#, fuzzy +#~ msgid "No Effects" +#~ msgstr "EasyEffects" + +#~ msgid "Search Plugin" +#~ msgstr "Eklenti Ara" + +#~ msgid "Plugins List" +#~ msgstr "Eklenti Listesi" + +#~ msgid "_General" +#~ msgstr "_Genel" + +#~ msgid "Service" +#~ msgstr "Hizmet" + +#, fuzzy +#~ msgid "Shutdown on Window Closing" +#~ msgstr "Pencere Kapandığında Kapat" + +#~ msgid "Audio" +#~ msgstr "Ses" + +#, fuzzy +#~ msgid "Process All Output Streams" +#~ msgstr "Tüm Çıkışları İşle" + +#, fuzzy +#~ msgid "Process All Input Streams" +#~ msgstr "Tüm Girişleri İşle" + +#~ msgid "Use Dark Theme" +#~ msgstr "Koyu Tema Kullan" + +#~ msgid "_Spectrum" +#~ msgstr "_Spektrum" + +#~ msgid "Shape" +#~ msgstr "Şekil" + +#~ msgid "Bars" +#~ msgstr "Çubuklar" + +#~ msgid "Lines" +#~ msgstr "Çizgiler" + +#~ msgid "Dots" +#~ msgstr "Noktalar" + +#~ msgid "Points" +#~ msgstr "Noktalar" + +#~ msgid "Height" +#~ msgstr "Yükseklik" + +#~ msgid "Line Width" +#~ msgstr "Hat Genişliği" + +#~ msgid "Fill" +#~ msgstr "Dolgu" + +#~ msgid "Rounded Corners" +#~ msgstr "Yuvarlatılmış Köşeler" + +#~ msgid "Color" +#~ msgstr "Renk" + +#~ msgid "Lines and Bars" +#~ msgstr "Çizgiler ve Çubuklar" + +#~ msgid "Axis Labels" +#~ msgstr "Eksen Etiketleri" + +#~ msgid "Frequency Range" +#~ msgstr "Frekans Aralığı" + +#~ msgid "Minimum" +#~ msgstr "Asgari" + +#~ msgid "Maximum" +#~ msgstr "Azami" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "Geçerli ayarları bu ön ayar dosyasına kaydet" + +#~ msgid "Remove this preset file" +#~ msgstr "Hazır ayar dosyasını kaldır" + +#~ msgid "New Output Preset Name" +#~ msgstr "Yeni Çıkış Ön Ayarı Adı" + +#, fuzzy +#~ msgid "Create a new preset" +#~ msgstr "Hazır Ayar Oluştur" + +#, fuzzy +#~ msgid "Import a preset" +#~ msgstr "Ön Ayarı İçe Aktar" + +#~ msgid "Search Output Preset" +#~ msgstr "Çıkış Ön Ayarı Ara" + +#~ msgid "Output Presets List" +#~ msgstr "Çıkış Ön Ayarları Listesi" + +#~ msgid "New Input Preset Name" +#~ msgstr "Yeni Giriş Ön Ayarı Adı" + +#~ msgid "Search Input Preset" +#~ msgstr "Giriş Ön Ayarı Ara" + +#~ msgid "Input Presets List" +#~ msgstr "Giriş Ön Ayarları Listesi" + +#~ msgid "High Frequency Damping" +#~ msgstr "Yüksek Frekans Sönümleme" + +#~ msgid "Room Size" +#~ msgstr "Oda Boyutu" + +#~ msgid "Small" +#~ msgstr "Küçük" + +#~ msgid "Medium" +#~ msgstr "Orta" + +#~ msgid "Large" +#~ msgstr "Büyük" + +#~ msgid "Tunnel" +#~ msgstr "Tünel" + +#~ msgid "Large/smooth" +#~ msgstr "Büyük/pürüzsüz" + +#~ msgid "Experimental" +#~ msgstr "Deneysel" + +#~ msgid "Diffusion" +#~ msgstr "Yayılma" + +#~ msgid "Pre Delay" +#~ msgstr "Ön Gecikme" + +#~ msgid "Decay Time" +#~ msgstr "Bozunma Süresi" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Miktar" + +#, fuzzy +#~ msgid "Wet Level" +#~ msgstr "Hedef Seviye" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Miktar" + +#, fuzzy +#~ msgid "Dry Level" +#~ msgstr "Seviye" + +#~ msgid "Bass Cut" +#~ msgstr "Bas Kesim" + +#~ msgid "Treble Cut" +#~ msgstr "Tiz Kesim" + +#~ msgid "Ambience" +#~ msgstr "Ortam" + +#~ msgid "Empty Walls" +#~ msgstr "Boş Duvarlar" + +#~ msgid "Room" +#~ msgstr "Oda" + +#~ msgid "Large Empty Hall" +#~ msgstr "Büyük Boş Salon" + +#~ msgid "Disco" +#~ msgstr "Disko" + +#~ msgid "Large Occupied Hall" +#~ msgstr "Büyük Dolu Salon" + +#, fuzzy +#~ msgid "Import Model" +#~ msgstr "Dürtü Dosyasını İçeri Al" + +#~ msgid "Models" +#~ msgstr "Modeller" + +#~ msgid "Standard Model" +#~ msgstr "Standart Model" + +#~ msgid "Active Model" +#~ msgstr "Etkin Model" + +#~ msgid "Overview" +#~ msgstr "Genel Görünüm" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "EasyEffects Kılavuzunu Aç" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "Tam ekran/Tam ekrandan geri yükle" + +#~ msgid "Close the Window" +#~ msgstr "Pencereyi Kapat" + +#~ msgid "Quit EasyEffects" +#~ msgstr "EasyEffects'ten Çık" + +#~ msgid "Balance" +#~ msgstr "Denge" + +#~ msgid "Input Balance" +#~ msgstr "Giriş Dengesi" + +#~ msgid "Softclip" +#~ msgstr "Yumuşak kırpım" + +#, fuzzy +#~ msgid "Softclip Level" +#~ msgstr "Yumuşak kırpım" + +#~ msgid "Stereo Matrix" +#~ msgstr "Stereo Matris" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (Stereo Öntanımlı)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (Stereo Orta Tarafa)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (Orta Taraftan Stereo)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (Mono Sol Kanal)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (Mono Sağ Kanal)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (Mono İşlem L+R)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (Stereo Kanalları Ters Çevir)" + +#~ msgid "Stereo Mode" +#~ msgstr "Stereo Kipi" + +#~ msgid "Invert Phase" +#~ msgstr "Ters Faz" + +#~ msgid "Side Level" +#~ msgstr "Seviye Tarafı" + +#~ msgid "Side Balance" +#~ msgstr "Denge Tarafı" + +#~ msgid "Middle Level" +#~ msgstr "Orta Seviye" + +#~ msgid "Middle Panorama" +#~ msgstr "Orta Panorama" + +#~ msgid "Output Balance" +#~ msgstr "Çıkış Dengesi" + +#~ msgid "Delay L/R" +#~ msgstr "Gecikme L/R" + +#, fuzzy +#~ msgid "Delay Left Right" +#~ msgstr "Gecikme L/R" + +#~ msgid "Stereo Base" +#~ msgstr "Stereo Taban" + +#~ msgid "Stereo Phase" +#~ msgstr "Stereo Faz" + +#~ msgid "Running" +#~ msgstr "Çalışıyor" + +#~ msgid "Suspended" +#~ msgstr "Askıya alındı" + +#~ msgid "Idle" +#~ msgstr "Boşta" + +#~ msgid "Creating" +#~ msgstr "Oluşturuluyor" + +#~ msgid "Error" +#~ msgstr "Hata" + +#~ msgid "Unknown" +#~ msgstr "Bilinmiyor" + +#~ msgid "channels" +#~ msgstr "kanallar" + +#~ msgid "Output Presets: " +#~ msgstr "Çıkış Ön Ayarları: " + +#~ msgid "Input Presets: " +#~ msgstr "Giriş Ön Ayarları: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "PipeWire uygulamaları için ses efektleri" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "EasyEffects'ten çık. Servis kipinde çalışırken kullanışlıdır." + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "Bir ön ayar yükle. Örnek: easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "EasyEffects’i Sıfırla." + +#~ msgid "Hide the Window." +#~ msgstr "Pencereyi Gizle." + +#~ msgid "Show available presets." +#~ msgstr "Kullanılabilir hazır ayarları göster." + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#, fuzzy +#~ msgid "Impulse File Not Imported" +#~ msgstr "Dürtü Dosyasını İçe Aktar" + +#~ msgid "Import Impulse File" +#~ msgstr "Dürtü Dosyasını İçe Aktar" + +#~ msgid "Open" +#~ msgstr "Aç" + +#~ msgid "Cancel" +#~ msgstr "İptal" + +#~ msgid "Impulse Response" +#~ msgstr "Dürtü Yanıtı" + +#, fuzzy +#~ msgid "Load Impulse" +#~ msgstr "Dürtü Dosyasını İçeri Al" + +#, fuzzy +#~ msgid "Remove Impulse" +#~ msgstr "Dürtü Dosyasını İçeri Al" + +#, fuzzy +#~ msgid "No Impulse File Loaded" +#~ msgstr "Dürtü Dosyasını İçe Aktar" + +#, fuzzy +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "Dürtü Dosyası Yüklenemedi" + +#~ msgid "Recorders" +#~ msgstr "Kaydediciler" + +#~ msgid "Players" +#~ msgstr "Oynatıcılar" + +#, fuzzy +#~ msgid "Effects" +#~ msgstr "EasyEffects" + +#~ msgid "infinity" +#~ msgstr "sonsuzluk" + +#~ msgid "Import APO Preset File" +#~ msgstr "APO Ön Ayar Dosyasını İçe Aktar" + +#~ msgid "APO Presets" +#~ msgstr "APO Ön Ayarları" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "Otomatik Yükleme Ön Ayarını Kaldır" + +#~ msgid "Remove" +#~ msgstr "Kaldır" + +#~ msgid "Output Device" +#~ msgstr "Çıkış Aygıtı" + +#~ msgid "Add" +#~ msgstr "Ekle" + +#~ msgid "Import Preset" +#~ msgstr "Ön Ayarı İçe Aktar" + +#~ msgid "Import Model File" +#~ msgstr "Model Dosyasını İçe Aktar" + +#~ msgid "Bass Enhancer" +#~ msgstr "Bas Yükseltici" + +#, fuzzy +#~ msgid "Bass Loudness" +#~ msgstr "Yüksek Ses" + +#~ msgid "Convolver" +#~ msgstr "Sarsıcı" + +#~ msgid "Crossfeed" +#~ msgstr "Çapraz Besleme" + +#~ msgid "Crystalizer" +#~ msgstr "Kristalleştirici" + +#~ msgid "Deesser" +#~ msgstr "Deesser" + +#~ msgid "Delay" +#~ msgstr "Gecikme" + +#~ msgid "Echo Canceller" +#~ msgstr "Yankı Önleyici" + +#~ msgid "Equalizer" +#~ msgstr "Ekolayzır" + +#~ msgid "Exciter" +#~ msgstr "Uyarıcı" + +#~ msgid "Filter" +#~ msgstr "Süzgeç" + +#~ msgid "Limiter" +#~ msgstr "Sınırlayıcı" + +#~ msgid "Maximizer" +#~ msgstr "Yükseltici" + +#~ msgid "Multiband Compressor" +#~ msgstr "Çoklu Bant Şıkıştırıcı" + +#~ msgid "Multiband Gate" +#~ msgstr "Çoklu Bant Geçitleme" + +#~ msgid "Pitch" +#~ msgstr "Perde" + +#~ msgid "Reverberation" +#~ msgstr "Yankılanma" + +#~ msgid "Noise Reduction" +#~ msgstr "Gürültü Azaltma" + +#~ msgid "Stereo Tools" +#~ msgstr "Stereo Araçları" + +#~ msgid "Average" +#~ msgstr "Ortalama" + +#~ msgid "Failed" +#~ msgstr "Başarısız" + +#~ msgid "Use Default" +#~ msgstr "Öntanımlıyı Kullan" + +#~ msgid "Remove this plugin" +#~ msgstr "Bu eklentiyi kaldır" + +#~ msgid "Import Presets" +#~ msgstr "Önayarları İçe Aktar" + +#~ msgid "Start Service at Login" +#~ msgstr "Oturum Açarken Hizmeti Başlat" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Etkin Model" + +#~ msgid "Add to Blocklist" +#~ msgstr "Kara Listeye Ekle" + +#~ msgid "Blocklist" +#~ msgstr "Kara Liste" + +#~ msgid "Add Plugin" +#~ msgstr "Eklenti Ekle" + +#~ msgid "Speakers" +#~ msgstr "Hoparlörler" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "enabled" +#~ msgstr "etkin" + +#~ msgid "disabled" +#~ msgstr "devre dışı" + +#~ msgid "Plugins" +#~ msgstr "Eklentiler" + +#~ msgid "Format" +#~ msgstr "Biçim" + +#~ msgid "Latency" +#~ msgstr "Gecikme" + +#~ msgid "idle" +#~ msgstr "boşta" + +#~ msgid "Faster" +#~ msgstr "Daha Hızlı" + +#~ msgid "Preserve Formant" +#~ msgstr "Biçimlendiriciyi Koru" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Help" +#~ msgstr "Yardım" + +#~ msgid "Show Spectrum" +#~ msgstr "Spektrumu Göster" + +#~ msgid "Use Custom Color" +#~ msgstr "Özel Renk Kullan" + +#~ msgid "Use Gradient" +#~ msgstr "Geçişli Renk Kullan" + +#~ msgid "Spectrum Color" +#~ msgstr "Spektrum Rengi" + +#~ msgid "Gradient Color" +#~ msgstr "Geçiş Rengi" + +#~ msgid "Spectrum Type" +#~ msgstr "Spektrum Türü" + +#~ msgid "Exponent" +#~ msgstr "Katsayı" + +#~ msgid "Sampling" +#~ msgstr "Örnekleme" + +#~ msgid "Block Size" +#~ msgstr "Blok Boyutu" + +#~ msgid "Pipeline Input" +#~ msgstr "Pipeline Giriş" + +#~ msgid "Buffer" +#~ msgstr "Arabellek" + +#~ msgid "Niceness" +#~ msgstr "Hassaslık" + +#~ msgid "Priority Type" +#~ msgstr "Öncelik Türü" + +#~ msgid "About" +#~ msgstr "Hakkında" + +#~ msgid "Priority" +#~ msgstr "Öncelik" + +#~ msgid "Resampler" +#~ msgstr "Örnekleme" + +#~ msgid "Default Source" +#~ msgstr "Öntanımlı Kaynak" + +#~ msgid "Protocol" +#~ msgstr "Protokol" + +#~ msgid "Default Sample Format" +#~ msgstr "Öntanımlı Örnek Biçimi" + +#~ msgid "Channel Mapping" +#~ msgstr "Kanal Eşleme" + +#~ msgid "File" +#~ msgstr "Dosya" + +#~ msgid "Configuration" +#~ msgstr "Yapılandırma" + +#~ msgid "Resamplers" +#~ msgstr "Örnekleyiciler" + +#~ msgid "Detect Silence" +#~ msgstr "Sessizliği Algıla" + +#~ msgid "Weights" +#~ msgstr "Ağırlık" + +#~ msgid "Limit" +#~ msgstr "Sınır" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "Zayıflatma" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Sessiz" + +#~ msgid "Distant Headphones" +#~ msgstr "Uzak Kulaklıklar" + +#~ msgid "Reset Equalizer" +#~ msgstr "Ekolayzır Sıfırla" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Uygula" + +#~ msgid "Dry" +#~ msgstr "Sertlik" + +#~ msgid "S/C Level" +#~ msgstr "S/C Seviye" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Dürtü Yanıt Dosyasını İçeri Aktar" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Dürtü Yanıt Dosyasını Seç" + +#~ msgid "Loudness Range" +#~ msgstr "Yüksek Ses Aralığı" + +#~ msgid "Before" +#~ msgstr "Öncesi" + +#~ msgid "After" +#~ msgstr "Sonrası" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Genişletilmiş Süzgeç" + +#~ msgid "Delay Agnostic" +#~ msgstr "Agnostik Gecikme" + +#~ msgid "Suppresion Level" +#~ msgstr "Bastırma Seviyesi" + +#~ msgid "Low" +#~ msgstr "Düşük" + +#~ msgid "Moderate" +#~ msgstr "Ölçülü" + +#~ msgid "High" +#~ msgstr "Yüksek" + +#~ msgid "Very High" +#~ msgstr "Çok Yüksek" + +#~ msgid "Noise Suppressor" +#~ msgstr "Gürültü Baskılayıcı" + +#~ msgid "Adaptive Digital" +#~ msgstr "Dijital Uyarlamalı" + +#~ msgid "Fixed Digital" +#~ msgstr "Dijital Sabitleyici" + +#~ msgid "Gain Controller" +#~ msgstr "Kazanç Denetleyicisi" + +#~ msgid "Detection Likelihood" +#~ msgstr "Algılama Olasılığı" + +#~ msgid "Very Low" +#~ msgstr "Çok Düşük" + +#~ msgid "Voice Detector" +#~ msgstr "Ses Dedektörü" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Şu anda kullanılan cihaz sisteme takılı olduğunda bu ön ayarı otomatik " +#~ "olarak uygula" + +#~ msgid "Volume" +#~ msgstr "Ses" + +#~ msgid "Sine" +#~ msgstr "Sinüs" + +#~ msgid "Square" +#~ msgstr "Kare" + +#~ msgid "Saw" +#~ msgstr "Kesir" + +#~ msgid "Triangle" +#~ msgstr "Üçgen" + +#~ msgid "Silence" +#~ msgstr "Sessizlik" + +#~ msgid "Pink Noise" +#~ msgstr "Pembe Gürültü" + +#~ msgid "Ticks" +#~ msgstr "İşaretler" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gauss Gürültü" + +#~ msgid "Red Noise" +#~ msgstr "Kırmızı Gürültü" + +#~ msgid "Blue Noise" +#~ msgstr "Mavi Gürültü" + +#~ msgid "Violet Noise" +#~ msgstr "Menekşe Gürültü" + +#~ msgid "Window" +#~ msgstr "Pencere" + +#~ msgid "Measure Noise" +#~ msgstr "Gürültü Ölçümü" + +#~ msgid "Subtract Noise" +#~ msgstr "Gürültü Çıkar" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Sesi ayarla ve efektleri aç/kapat" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Yerleşik ön ayarlara sahip bir ekolayzır içerir" + +#~ msgid "Input Limiter" +#~ msgstr "Giriş Sınırlayıcı" + +#~ msgid "Calibration" +#~ msgstr "Kalibrasyon" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "durdurulmuş" + +#~ msgid "playing" +#~ msgstr "oynatılıyor" diff --git a/po/news/zh_CN.po b/po/news/zh_CN.po new file mode 100644 index 0000000..8008791 --- /dev/null +++ b/po/news/zh_CN.po @@ -0,0 +1,2644 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# eternal , 2020-2021. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-03-21 06:38+0000\n" +"Last-Translator: hch12907 \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.16.2-dev\n" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:4 +msgid "Easy Effects" +msgstr "Easy Effects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:5 +msgid "Audio Effects for PipeWire Applications" +msgstr "为使用 PipeWire 的应用提供音效" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:8 +msgid "Wellington Wallace" +msgstr "Wellington Wallace" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:10 +msgid "" +"Easy Effects is an advanced audio manipulation tool. It includes an " +"equalizer, limiter, compressor and a reverberation tool, just to mention a " +"few. To complement this there is also a built in spectrum analyzer." +msgstr "" +"Easy Effects 是一款先进的音频处理工具。 它包括均衡器、限制器、压缩器和混响工" +"具,仅举几例。 作为补充,它还有内置频谱分析仪。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:11 +msgid "" +"Easy Effects is the successor to PulseEffects. Easy Effects only supports " +"PipeWire's audio server. PulseAudio users should instead use PulseEffects." +msgstr "" +"Easy Effects 是 PulseEffects 的后续版本。 Easy Effects 仅支持 PipeWire 音频服" +"务器。 PulseAudio 用户应使用 PulseEffects。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:12 +msgid "" +"Because Easy Effects uses the default PipeWire sound server it will work " +"with most, if not all, applications you use. All supported applications are " +"presented in the main window, where each can be enabled individually." +msgstr "" +"因为 Easy Effects 使用默认的 PipeWire 声音服务器,所以它适用于你使用的大多数" +"(如果不是全部)应用程序。 所有支持的应用程序都显示在主窗口中,可以单独启用。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:13 +msgid "" +"Besides manipulating sound output, Easy Effects is able to apply effects to " +"an input device, such as a microphone. This is, for example, useful in audio " +"recording, but it also works well during voice conversations." +msgstr "" +"除了处理声音输出之外,Easy Effects 还能够将效果应用于输入设备,例如麦克风。 " +"这在录音中很有用,在语音对话中也很有效。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:14 +msgid "" +"When Easy Effects is launched it will conveniently remember the " +"configuration used in the last session. It is also possible to save all the " +"current settings as profiles." +msgstr "" +"Easy Effects 启动时,它会方便地记住上次会话中使用的配置。 也可以将所有当前设" +"置保存为配置文件。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:40 +msgid "The main page showing two audio output apps" +msgstr "正在显示两个音频输出应用程序的主页面" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:44 +msgid "The bass enhancer page showing audio controls" +msgstr "低音增强页面显示的音效控件" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:48 +msgid "The convolver page showing audio controls" +msgstr "卷积混响器显示的音频控件" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:56 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:66 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:76 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:90 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:104 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:117 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:131 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:144 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:154 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:168 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:181 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:202 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:218 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:229 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:244 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:260 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:276 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:289 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:299 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:321 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:338 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:353 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:368 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:380 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:388 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:406 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:428 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:445 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:455 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:468 +msgid "Features:" +msgstr "功能:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:57 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:68 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:80 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:94 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:108 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:121 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:133 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:146 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:157 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:173 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:192 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:210 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:220 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:234 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:250 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:267 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:281 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:291 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:305 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:313 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:327 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:342 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:358 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:370 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:393 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:413 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:431 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:447 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:460 +msgid "Bug fixes:" +msgstr "漏洞修复:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:58 +msgid "" +"Fixed a small bug the prevented the noise reduction voice activity threshold " +"from being properly initialized." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:59 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:69 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:81 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:96 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:110 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:123 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:135 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:160 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:194 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:211 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:222 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:237 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:329 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:345 +msgid "Other notes:" +msgstr "其他注意事项:" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:67 +msgid "" +"Added a new control to the noise reduction plugin that allows the voice " +"detection to be disabled." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:77 +msgid "" +"The Filter effect has been improved with new parameters since it has been " +"ported from Calf Studio to Linux Studio Plugins." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:78 +msgid "" +"Noise reduction by RNNoise has been improved with the addition of Release " +"and VAD Threshold controls." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:79 +msgid "" +"Noise reduction by RNNoise can now mix the original and denoised signals to " +"avoid the output to sound too \"dry\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:82 +msgid "" +"This release is intended to work with versions of Linux Studio Plugins equal " +"or greater than \"1.2.10\"." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:83 +msgid "EasyEffects is now buildable also with libc++." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:91 +msgid "The Expander from Linux Studio Plugins can be used in Easy Effects." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:92 +msgid "" +"The Equalizer bands now have an additional gain control that allows for more " +"efficient input of values that are hard to set in the scale. More details at " +"issue 1383." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:93 +msgid "" +"Added the ability to select and load multiple files in the opening dialogs " +"for presets, Convolver impulse responses and RNNoise models." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:95 +msgid "Fixed the Solo button in the Equalizer band settings." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:97 +msgid "" +"Easy Effects folders under /etc have been deprecated and presets located " +"there won't be loaded anymore. At the moment only local presets under ~/." +"config/easyeffects are automatically loaded in the Presets Menu. In the " +"future we will implement a new system to install, manage and import " +"Community Presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:105 +msgid "" +"An \"Experimental Features\" section was added to our preferences window." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:106 +msgid "" +"The native window of the LSP plugins can be used. This is an experimental " +"feature intended only for advanced users. So expect some bugs." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:107 +msgid "Fractional semitone values can now be used in the Pitch Shift effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:109 +msgid "" +"The input/output device dropdown in our PipeWire tab is updated when the " +"system default device changes and Use Default is enabled. This fixes issue " +"issue 1989." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:118 +msgid "A new Level Meter plugin based on libebur128 has been added." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:119 +msgid "" +"The Pitch plugin now uses the library SoundTouch instead of Rubberband. " +"Hopefully some of the mysterious crashes that were happening with Rubbernand " +"are not going to happen anymore." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:120 +msgid "" +"Improved compatibility with recent PipeWire versions. More information at" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:122 +msgid "" +"Active Equalizer filters are not set to Bell type anymore when the number of " +"bands changes." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:124 +msgid "" +"Rabberband is not a dependency anymore since it has been replaced by " +"SoundTouch." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:132 +msgid "" +"The presets menu now asks for confirmation before saving/deleting a preset " +"file." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:134 +#, fuzzy +msgid "The plugin reset should not make its controls innefective anymore." +msgstr "饱和度警告应该不再遮挡与其相邻的界面部件了" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:136 +msgid "" +"Speex is no longer incorrectly listed as a build dependency (speexdsp is " +"still a build dependency)" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:137 +msgid "" +"RNNoise is no longer an autodependency. It is now required by default, if " +"not available it must be explicitly disabled with -Denable-rnnoise=false" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:145 +#, fuzzy +msgid "Updated translations." +msgstr "翻译更新" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:147 +msgid "" +"A small mistake was done in the last release. Making a new one to make sure " +"people have the right branch in the package" +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:155 +msgid "" +"The Equalizer \"sort bands\" feature is now ordering bands on GSettings, so " +"the result can be saved into presets." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:156 +msgid "Improved performance when resetting keys." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:158 +msgid "" +"Fixed the \"Large Empty Hall\" preset selection in the Reverberation effect." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:159 +msgid "" +"Fixed some misuses of PipeWire's API that can potentially fix some random " +"bugs some users are facing." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:161 +msgid "" +"As we are removing code deprecated by GTK 4.10 the minimum GTK version has " +"been increased." +msgstr "" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:169 +msgid "" +"The spectrum plugin update rate was improved. Different sampling rates " +"should lead to similar update frequencies visually." +msgstr "" +"改进了频谱插件的更新频率,现在更新频率不会因为音频的采样率不同而发生改变了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:170 +msgid "" +"The update interval used by level meters and the spectrum can be customized " +"by the user." +msgstr "允许用户自定义电平表和频谱的更新间隔。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:171 +msgid "" +"The equalizer band gain slider value can be updated in larger steps. Fine " +"grain control is still possible through the keyboard up/down keys." +msgstr "" +"对于均衡器的频带增益滑块,用户现今可使用更大的步幅修改其数值了,但更细腻的控" +"制仍然可以通过键盘的上下键实现。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:172 +msgid "Small improvements to the echo canceller." +msgstr "稍微改进了回声消除器。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:174 +msgid "" +"The echo canceller probes were not being linked to the soundcard after the " +"move to multiple filters intances. This should be fixed now." +msgstr "" +"自本程序支持多个过滤器实例起,回声消除器探头便未能正常链接到声卡。此问题现已" +"得到解决。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:182 +msgid "" +"It is now possible to add more than one filter instance to the effects " +"pipeline." +msgstr "增加向效果管道添加多个过滤器实例的支持。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:183 +msgid "" +"A new Speech Processor plugin based on the Speex library was added. Besides " +"providing noise suppression it also can detect voice activity. It is a " +"decent alternative to the cases whre the rnnoise library does not work well." +msgstr "" +"新增一个基于 Speex 库的语音处理器插件,除了提供噪声抑制外,亦可以检测语音活" +"动。 在 rnnoise 库无法正常工作的场景下,其或许是一个不错的替代方案。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:184 +msgid "Improved compatibility with Linux Studio Plugins 1.2.3." +msgstr "改进了与 Linux Studio Plugins 1.2.3 库的兼容性。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:185 +msgid "GraphicEQ presets can be imported into the Equalizer effect." +msgstr "新增将 GraphicEQ 预设导入均衡器的支持。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:186 +msgid "" +"The application name has been changed to Easy Effects to adhere to the " +"naming conventions of GNOME Human Interface Guidelines." +msgstr "" +"为了遵守 GNOME 人机界面指南的建议,本应用程序名称已更改为 Easy Effects。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:187 +msgid "The documentation has been updated." +msgstr "文档已更新。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:188 +msgid "Improved presets autoloading." +msgstr "改进了预设自动加载。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:189 +msgid "The Autogain silence threshold can now be configured by the user." +msgstr "自动增益插件的静音阈值现在可以由用户配置了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:190 +msgid "Dry and wet controls added to the Stereo Tools effect." +msgstr "立体声工具新增控制干湿声的功能。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:191 +msgid "" +"The echo canceller now has a residual noise suppression control also based " +"on the Speex library." +msgstr "回声消除器新增同样是基于 Speex 库的残余噪声抑制功能。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:193 +msgid "" +"When the mouse was hovering over a chart the wrong value for the x axis " +"coordinate was being shown. This regression is fixed." +msgstr "此前当鼠标悬停在图表上时,会显示错误的 x 轴坐标值。 这个错误现已修复。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:195 +msgid "" +"Because of the new multiple instances feature, the preset format has " +"changed, but the old one is still compatible to be loaded. Anyway take in " +"consideration that saving the current preset will always write it in the new " +"format." +msgstr "" +"由于新增了多实例插件的功能,本程序的预设格式发生了变化,但旧版本的预设文件依" +"旧是受兼容的。 请用户务必要意识到,当用户再度储存当前预设文件时,本程序将会使" +"用最新格式写入该文件。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:203 +msgid "" +"Multiband Gate implementation has been migrated from CALF to Linux Studio " +"Plugins." +msgstr "多频段门限效果器的实现已经从 CALF 迁移到了 Linux Studio 插件。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:204 +msgid "" +"The preset autoloading code compatibility with bluez5 devices has been " +"improved." +msgstr "改进了预设自动加载代码与 bluez5 设备的兼容性。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:205 +msgid "Wet/dry controls were added for some plugins" +msgstr "为某些插件增加了湿/干控制" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:206 +msgid "" +"Effect interface is no longer loaded when the related lv2 plugin is not " +"installed on the system. In its place a status message to the user is shown." +msgstr "" +"当系统中没有安装相关的lv2插件时,效果界面不再被加载。而是是显示给用户的状态信" +"息。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:207 +msgid "The documentation has been updated" +msgstr "文档已更新" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:208 +msgid "Improved debug messages" +msgstr "改善了调试信息" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:209 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:304 +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:430 +msgid "Updated translations" +msgstr "翻译更新" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:219 +msgid "Improved translations" +msgstr "翻译改进" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:221 +msgid "" +"Fixed a bug where EasyEffects could crash when closing its window while " +"effects were being applied." +msgstr "修正了 EasyEffects 在应用效果时关闭其窗口可能会崩溃的错误。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:230 +msgid "" +"The bypass state can be saved to the preset file. The reasons why this was " +"done can be seen at issue 1039" +msgstr "旁通状态可以被保存到预设文件中。原因可以在第 issue 1039 找到" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:231 +msgid "" +"The preset autoloading code compatibility with usb devices has been improved." +msgstr "改进了预设自动加载代码与 USB 设备的兼容性。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:232 +msgid "" +"A dialog is shown to the user when a preset fails to load or a preset/" +"impulse file fails to be imported." +msgstr "当预设无法加载或预设/脉冲文件无法被导入时,将向用户显示一个对话框。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:233 +msgid "" +"The SideChain Gate plugin from Linux Studio Plugins is now used instead of " +"the one from Calf Studio." +msgstr "" +"本程序现在转为使用 Linux Studio Plugins 的 SideChain Gate 插件,而非原先的 " +"Calf Studio 的插件。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:235 +msgid "" +"EasyEffects should not crash anymore when the user locale is not properly " +"configured." +msgstr "当用户地区设置不正确时,EasyEffects 不应该再崩溃。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:236 +msgid "" +"A workaround was implemented in our icon to deal with the lack of proper SVG " +"support in QT." +msgstr "" +"在我们的图标中实施了一种曲线救国的方法,以解决 QT 中缺乏适当的 SVG 支持。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:245 +msgid "" +"When effects are disable to an application we now set its target metadata to " +"null. This will allow the media session manager (wireplumber) to properly " +"move the stream to a new device." +msgstr "" +"当对某应用程序禁用效果时,本程序现在起会将其目标元数据设置为null,以允许系统" +"的Media Session Manager (即WirePlumber) 将音流正确地移动到新设备上。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:246 +msgid "" +"A new configuration option was added. It allows EasyEffects to ignore " +"streams whose purpose is to monitor sink devices. This will help to fix some " +"of problems our users were having when using OBS." +msgstr "" +"新增了一个配置选项。 它允许 EasyEffects 忽略来自 Monitor 接收设备的音流。 这" +"将有助于解决用户在使用 OBS 时遇到的一些问题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:247 +msgid "The code that shows the stream sample format has been improved" +msgstr "改进了显示音频样本格式的代码" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:248 +msgid "" +"The rnnoise library is now optional. This should help package maintainers to " +"build a Debian package. See issue 1000 for more information." +msgstr "" +"rnnoise 库现在是可选的。 这应该有助于软件包维护者构建 Debian 软件包。 有关详" +"细信息,请参阅 Github 仓库中编号为 1000 的 issue。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:249 +msgid "" +"Our logs now show the source code line where the messages are being printed" +msgstr "程序日志从现在起,会显示日志里每条信息的源头" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:251 +msgid "" +"The \"enable effects\" checkbox in our window was not being updated when " +"third party programs like pavucontrol moved the stream away from our virtual " +"devices. This should be fixed now." +msgstr "" +"此前,当 pavucontrol 等第三方程序将音流从本程序的虚拟设备移开时,程序窗口中" +"的“启用效果”复选框不会被及时更新。问题现在应已解决。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:252 +msgid "" +"Fixed a crash that could happen when the maximum autogain history was " +"changed." +msgstr "修复了可能会发生于更改自动增益插件的最大历史记录时的崩溃。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:253 +msgid "Avoid crashes when pw-mididump is running" +msgstr "当 pw-mididump 正在运行时避免崩溃" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:261 +msgid "The interface of the pitch plugin was improved" +msgstr "改进了音调插件界面" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:262 +msgid "Our application icon is now compatible with desktops that uses QT" +msgstr "我们的应用图标现已兼容基于QT的桌面环境" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:263 +msgid "" +"Our blocklist code will use the application.id tag if the stream sets it" +msgstr "" +"从现在起,如果某个音流设置了 application.id 标签,本程序的黑名单代码将会使用" +"它" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:264 +msgid "" +"In order to avoid problems with the mouse scroll the entries in the " +"applications list shown in our Players/Recorders tab do not show a volume " +"scale anymore. More details about the problem and the solution for it can be " +"found on issue 1211 and issue 1427" +msgstr "" +"为了避免鼠标滚动时出现问题,在 播放器/录音程序 选项卡中,应用程序列表中的条目" +"不再显示音量比例。 有关此问题及其解决方案的更多详细信息,请参阅 issue #1211 " +"和 #1427" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:265 +msgid "" +"When no application is available for display in the Players/Recorders a " +"message will be shown to the user" +msgstr "" +"当 播放器/录音程序 选项卡中没有可显示的应用程序时,将向用户显示一条简短的信息" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:266 +msgid "Many translation updates" +msgstr "许多翻译更新" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:268 +msgid "" +"Fixed a bug where EasyEffeects crashed when the number of points displayed " +"in the spectrum was changed while our pipeline was active and the spectrum " +"widget was visible" +msgstr "" +"修复了当音效管道处于活动状态并且频谱部件可见时,更改频谱中的点阵数量会导致 " +"EasyEffects 崩溃的错误" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:269 +msgid "" +"The pipeline latency value displayed in our window could be wrong in some " +"situations. This was fixed." +msgstr "修复了程序中显示的管道延迟值,此前其在某些情况下可能是错误的。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:277 +msgid "" +"There is a new setting allowing the user to select an inactivity timeout for " +"the pipeline. When no client is playing to or recording from our devices the " +"filters will be unlinked after the timeout is reached. This is done to make " +"sure we do not waste CPU power processing silence." +msgstr "" +"新增一个配置选项,允许用户为音效管道设置不活动超时。 当没有客户端在设备上播放" +"或录制音响时,过滤器将在超时后取消链接,以此确保不会过多消耗CPU资源。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:278 +msgid "" +"The autogain plugin now allows the user to select which of the three " +"loudness are used to calculate the geometric mean." +msgstr "" +"自动增益插件新增选项,允许用户选择使用三个响度中的其中一个来计算几何平均值。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:279 +msgid "" +"The autogain plugin now allows the maximum history to be set and does not " +"use libebur128 histogram mode anymore. This should avoid the cases where the " +"Integrated loudness gets stuck forever in the same value." +msgstr "" +"自动增益插件现在允许设置最大历史记录,并且不再使用 libebur128 直方图模式,以" +"避免综合响度永远停留在同一值的情况。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:280 +msgid "" +"EasyEffects icon has been updated in a way that should make it visible in QT " +"desktops." +msgstr "EasyEffects 图标现已更新,从现在起在 Qt 桌面中应该可以正常显示了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:282 +msgid "" +"The command line option that returns the global bypass state is working " +"again." +msgstr "修复返回全局旁通状态的命令行选项。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:290 +msgid "" +"The crossfeed filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"改进了交叉反馈插件对 PipeWire 动态延迟转换的处理,以防止在这种情况下发生音量" +"跃升或骤降的问题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:292 +msgid "" +"Fixed a bug that prevented mono microphones from properly working with " +"EasyEffects" +msgstr "修复了一个使单声道麦克风无法正常工作于EasyEffects的漏洞" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:300 +msgid "Support for the next PipeWire release 0.3.44" +msgstr "对下一个 PipeWire 发布版本 0.3.44 的支持" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:301 +msgid "" +"The autogain filter should deal better with PipeWire's dynamic latency " +"switches. Jumps in volume level should not happen anymore in these " +"situations." +msgstr "" +"改进了自动增益插件对 PipeWire 动态延迟转换的处理,以防止在这种情况下发生音量" +"跃升或骤降的问题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:302 +msgid "" +"We added an option that allows the volume and mute state of our virtual " +"devices to be reset when EasyEffects starts. It should help with the cases " +"were our devices are muted by the audio server for unknown reasons." +msgstr "" +"新增了一个选项,设置 EasyEffects 在启动时是否重置虚拟设备的音量和静音状态。 " +"如果有设备由于未知原因被音频服务器静音,这个选项应该会很实用。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:303 +msgid "Better support for computer suspending." +msgstr "改善了对计算机休眠的支持。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:306 +msgid "" +"Fixed a bug where trying to create an autoloading profile without having " +"presets caused the application to crash." +msgstr "" +"修复了在没有预设的情况下,尝试创建自动加载配置文件会导致程序崩溃的错误。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:314 +msgid "" +"Fixed a bug where setting a equalizer band quality to zero would lead to an " +"application crash." +msgstr "修复了将均衡器频段质量设置为零时,会导致应用程序崩溃的错误。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:322 +msgid "" +"LibAdwaita is used to create some parts of our window and for handling the " +"switching between dark and light themes." +msgstr "" +"现起本程序使用 LibAdwaita 库创建窗口的某些部分,以及处理深色和浅色主题之间的" +"切换。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:323 +msgid "The settings menu has been redesigned using LibAdwaita widgets." +msgstr "设置菜单被重新设计以使用 LibAdwaita 组件。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:324 +msgid "" +"Equalizer APO preset import feature has been improved to apply not only the " +"Bell filter, but also other supported ones (at the moment only the Bandpass " +"filter is not available in LSP plugin)." +msgstr "" +"均衡器 APO 预设导入功能已得到改进,现在可以应用钟形滤波器,以及其它受支持的滤" +"波器(目前 LSP 插件中只有带通滤波器不可用)。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:325 +msgid "The Reset All Settings function in our menu should work in Flatpak now." +msgstr "重置所有设置这项功能,从现在起在Flatpak环境下应该可以正常工作了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:326 +msgid "" +"We have a new option that allows the user to disable our menus autohide. " +"This may help to workaround some bugs Popover menus currently have on gtk4." +msgstr "" +"新增一个新选项,允许用户禁用本程序的菜单自动隐藏功能。这或许可以解决 Popover " +"菜单当前在 gtk4 上存在的一些漏洞。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:328 +msgid "" +"More robust parsing to import APO presets saved with comma as thousands " +"separator in central frequency band." +msgstr "增强解析器的稳健性,以正常导入那些使用逗号作为千位分隔符的 APO 预设。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:330 +msgid "" +"The fmt library is a new dependency At least while the c++ compilers do not " +"implement its features. This is expected to happen in the next years." +msgstr "" +"在各大C++编译器实现 std::format 的完整功能以前,本程序预期在这几年内都会使用 " +"fmt 库作为依赖。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:331 +msgid "" +"GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +msgstr "不再使用 GTKMM 和 GLIBMM 作为依赖。我们现在直接使用 gtk4。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:339 +msgid "" +"It is now possible to combine impulse responses in the Convolver interface. " +"A new impulse file is generated and it should be visible in the impulse list." +msgstr "" +"卷积混响器插件的界面中新增“组合脉冲响应”功能。 组合后会生成一个新的脉冲文件," +"应可见于脉冲列表中。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:340 +msgid "" +"Improved x axis drawings in our plots. Now the number of labels is adjusted " +"dynamically depending on our window width." +msgstr "" +"改进了我们绘图中的 x 轴显示。 现在起标签的数量将根据程序窗口的宽度动态调整。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:341 +msgid "" +"The documentation has been updated reflecting the new EasyEffects features. " +"Old references about PulseEffects have been removed. The documentation " +"button has been added in the menu section." +msgstr "" +"文档已更新,以反映 EasyEffects 的新功能。 有关 PulseEffects 的旧文档均已被删" +"除。 此外,菜单部分新添文档按钮。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:343 +msgid "" +"When a spinbutton is filled with an out of range value, now it is updated " +"with the lowest/highest value rather than resetting to the previous one." +msgstr "" +"当spinbutton被输入超出范围的值时,现在起它将会被更新为最低/最高值,而不是重置" +"为前值。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:344 +msgid "" +"The application window now remembers the maximized state and restores it on " +"the next opening event." +msgstr "" +"应用程序窗口现在起会记住当前最大化状态,并在下一次打开程序时恢复该状态。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:346 +msgid "The tbb library is a new dependency" +msgstr "添加 tbb 软件库作为新的依赖项" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:354 +msgid "" +"The Limiter and the Multiband Compressor plugins can now use an optional " +"external sidechain." +msgstr "门限、多频段压缩器插件新增可选外部侧链。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:355 +msgid "" +"The Autogain plugin now allows the user to select which Loudness is used as " +"reference for the volume correction." +msgstr "自动增益插件现在允许用户选择将哪个响度用作音量校正的参考。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:356 +msgid "" +"The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +"Amplification\" parameter." +msgstr "均衡器插件的 APO 预设导入功能,现在可以解析“Pre Amplication”参数了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:357 +msgid "Optional Cubic Volume can be enabled in General Settings." +msgstr "设置中新增启用立方音量调节的选项。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:359 +msgid "" +"The Spectrum plugin was supposed to enter passthrough whenever it was not " +"visible, but this was happening only when our window was closed." +msgstr "界面频谱本应在不可见时进入直通状态,但此前这只在程序窗口关闭时发生。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:360 +msgid "Improved support for Assistive Technology." +msgstr "改进了对辅助技术的支持。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:361 +msgid "" +"The probes used in some filters like the Compressor and the Limiter were not " +"being relinked after changing the order of the plugins in the pipeline. It " +"should be working now." +msgstr "" +"修复了在更改音效管道中插件的顺序后,压缩器以及限幅器等插件的探针并未重新链接" +"的问题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:369 +msgid "" +"PipeWire monitor streams are now excluded and removed from the applications " +"list." +msgstr "PipeWire 监视器流现在已从应用程序列表中排除并删除。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:371 +msgid "Hopefully crashes like the one reported at issue 1172 are fixed." +msgstr "若无意外,类似于 issue #1172 的崩溃问题现已解决。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:372 +msgid "Prevented a case in which Spectrum was crashing." +msgstr "防止了一种会导致界面频谱崩溃的情况发生。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:373 +msgid "" +"Pavucontrol is not added anymore to input applications list on systems with " +"localization different than English." +msgstr "在非英语的系统上,Pavucontrol 不再被添加到输入应用程序列表中。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:381 +msgid "" +"Improved compatibility with WirePlumber. This is needed to run on systems " +"that decided to use it instead of the built-in PipeWire session manager. " +"More information at issue 1144." +msgstr "" +"改进了与 WirePlumber 的兼容性。 对于使用不是 PipeWire 内置的会话管理器的系" +"统,这项改动是必要的。 更多信息请参见 issue #1144。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:389 +msgid "" +"When trying to add an autoloading profile for a device already in the list " +"its target preset will be updated. This way we can change the profile preset " +"without having to remove and recreating it." +msgstr "" +"从现在起,当用户尝试为列表中已有的设备添加自动加载配置文件时,其目标预设将被" +"更新。 这样用户更改配置文件预设时,就无需删除并重新创建它了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:390 +msgid "" +"The preset autoloading support implementation was redesigned again. It " +"should work on more hardware now. For more information see issue 1051." +msgstr "" +"再次重新设计了自动加载预设的实现。它现在应该可以在更多机器上正常运行了。 有关" +"详细信息,请参阅issue #1051。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:391 +msgid "" +"If the Limiter or the Maximizer are set in the last position of the plugin " +"stack, new plugins are added at the second to last position in order to " +"prevent hardware damage on eventually high output level." +msgstr "" +"如果用户将限幅器或放大器设置在插件堆栈的最后一个位置,则新插件将会被添加到倒" +"数第二个位置,以防止硬件因输出音量过大而导致损坏。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:392 +msgid "" +"Removing an application from the blocklist, its previous enabled state is " +"restored." +msgstr "若用户从黑名单中删除某个应用程序,程序将恢复其先前的启用状态。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:394 +msgid "" +"Sometimes when removing imported models from the noise reduction plugin the " +"current used model was not properly updated. This should be fixed now." +msgstr "" +"解决当用户从降噪插件中删除导入的模型时,当前使用的模型偶尔不会正常更新的问" +"题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:395 +msgid "" +"When editing presets files in an external editor, duplicated entries won't " +"be shown in our presets menu." +msgstr "现在起,在外部编辑器中编辑预设文件时,重复的条目不会显示于程序菜单中。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:396 +msgid "Now the blocklist is correctly set when switching presets." +msgstr "现在起,切换预设时黑名单会被正确更新。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:397 +msgid "" +"Now the status of the global bypass button is correctly updated when " +"changing plugin stack." +msgstr "现在“全局旁通”按钮的状态在插件堆栈被更改时会正确更新。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:398 +msgid "" +"Missing icons on the system should not be shown inside the application info " +"UI (if an application icon could not be shown even if you're sure it's " +"correctly installed, please open an issue)." +msgstr "" +"系统缺失的图标不应显示在应用程序信息 UI 中(如果确定图标已正确安装,但本程序" +"依旧无法正常显示应用程序的图标,请在本程序代码仓库提交 issue)。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:399 +msgid "" +"Some icons not showing in Plasma DE with Breeze icon theme should appear now." +msgstr "" +"修复了在使用 Breeze 图标主题的 Plasma 桌面中,本程序未显示一些图标的问题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:407 +msgid "Updated Chinese translation." +msgstr "更新了中文翻译。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:408 +msgid "Updated Italian translation." +msgstr "更新了意大利语翻译。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:409 +msgid "Added support for the compressor parameter Boost Amount" +msgstr "新增了压缩器参数 提升量 的支持" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:410 +msgid "" +"The multiband compressor plugin now uses the stereo multiband compressor " +"plugin from Linux Studio Plugins instead of the one from Calf Studio." +msgstr "" +"多频段压缩器插件从现在起基于 Linux Studio Plugins 中的立体声多频段压缩器插" +"件,而非 Calf Studio 中的插件。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:411 +msgid "" +"The limiter plugin now uses the stereo limiter plugin from Linux Studio " +"Plugins instead of the one from Calf Studio." +msgstr "" +"限幅器插件从现在起基于 Linux Studio 插件中的立体声限制器插件,而非 Calf " +"Studio 中的。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:412 +msgid "" +"LV2 filters now are spawned in PipeWire graph only when loaded the first " +"time. Once loaded, they remain connected until EasyEffects shutdown." +msgstr "" +"所有的 LV2 过滤器,现在仅在其第一次被加载时会加入 PipeWire 图。 一旦被加载," +"它们将保持连接状态直到 EasyEffects 关闭。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:414 +msgid "The echo canceller sampling rate is now properly set." +msgstr "修复了回声消除插件未正确设置采样率的问题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:415 +msgid "" +"The threshold parameter from the deesser plugin is now saved to the preset " +"file." +msgstr "从今起,齿音消除插件的阈值参数会被保存到预设文件中。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:416 +msgid "" +"Improved band splitting for crystalizer with new default intensity values." +msgstr "改进了结晶器的分割频段,其将使用新的默认强度值。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:417 +msgid "" +"Depending on the input gain or output gain values the corresponding level " +"bars could not be aligned." +msgstr "此前,根据其输入增益或输出增益值,相应的水平条有无法对齐的问题。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:418 +msgid "When adding more equalizer bands they are set to Bell instead of Off." +msgstr "添加更多均衡器频段时,它们将被设置为钟形,而非原先的关闭。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:419 +msgid "" +"Equalizer APO presets loading is now working properly on locales different " +"than C." +msgstr "均衡器 APO 预设加载现在可以在非 “C” 的语言环境中正常工作了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:420 +msgid "Improved linking management between port filter nodes in PipeWire." +msgstr "改进了 PipeWire 中端口过滤器节点之间的链接管理。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:421 +msgid "" +"The crystalizer plugin signal amplification was too high before. It should " +"be within more reasonable levels now." +msgstr "修复了结晶器插件信号放大过高的问题,经调整后其放大幅度现在更为合理了。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:429 +msgid "" +"Improved the resampler used in the plugins that require one(like the rnnoise " +"plugin)" +msgstr "改进了部分插件所使用的重采样器(如降噪插件)" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:432 +msgid "Setting multiple autoloading presets should be fine now" +msgstr "修复了设置多个自动加载预设的相关问题" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:433 +msgid "Transient windows are now properly set for some plugins dialogs" +msgstr "现在某些插件对话框会正确设置瞬态窗口了" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:434 +msgid "" +"The convolver impulse response menu was improved to workaround an issue " +"where the impulse files was not loaded when only one was available in the " +"menu, see issue 1011" +msgstr "" +"改进了卷积器脉冲响应插件的菜单,以防止菜单中只有一个脉冲文件时会出现脉冲文件" +"未加载的问题,请参阅 issue #1011" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:435 +msgid "" +"Fixed a bug that could make the pitch plugin to not be properly initialized" +msgstr "修复了一个可能导致音高插件无法正确初始化的错误" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:436 +msgid "The saturation warning should not displace its neighbor widgets anymore" +msgstr "饱和度警告应该不再遮挡与其相邻的界面部件了" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:437 +msgid "Fixed the locale in a few widgets" +msgstr "修复了一些小部件中的语言环境" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:438 +msgid "Fixed wrong alignment in a few widgets" +msgstr "修复了程序界面一些部件中的对齐问题" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:446 +msgid "" +"The Loudness plugin is being used again for the reasons described at issue " +"820. This means that is an optional dependency again." +msgstr "" +"由于 issue #820 中描述的原因,本程序再度使用响度插件。这意味着它再次成为一个" +"可选的依赖。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:448 +msgid "" +"Fixed a segmentation fault that happened when optional dependencies were not " +"installed" +msgstr "修复了用户未安装可选依赖项时发生的segfault" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:456 +msgid "Improved equalizer interface." +msgstr "改进了均衡器的界面。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:457 +msgid "" +"Now we use a sidechain LSP compressor that allows the user to select and " +"external source as the sidechain input." +msgstr "现在起本程序使用侧链 LSP 压缩器,以允许用户选择外部源作为侧链输入。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:458 +msgid "We now support the LSP compressor Boosting mode." +msgstr "新增 LSP 压缩器加强模式支持。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:459 +msgid "" +"When split-channels is enabled in the equalizer the imported APO preset will " +"be applied only to the channel being visualized in the window. This will " +"allow to import different presets for each channel instead of just settings " +"the same values to both." +msgstr "" +"当在均衡器中启用分离声道时,导入的 APO 预设将仅应用于正在显示于程序窗口中的声" +"道。 这将允许为每个声道导入不同的预设,两个声道不再强制共用一个预设。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:461 +msgid "" +"Fixed some segmentation faults that could happen when creating a preset " +"autoloading profile or removing presets" +msgstr "修复了创建预设自动加载配置文件或删除预设时可能发生的一些segfault" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:469 +msgid "" +"This is one of the biggest releases that I have ever made. The amount of " +"changes is so big that it is hard to talk about everything here." +msgstr "这是我有史以来完成的最大版本之一。 改动量之大,在此难以一一详述。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:470 +msgid "" +"The following are just the most import ones. People interested on the " +"journey that got us here can take a look at issue 904 and issue 874." +msgstr "" +"以下只是最重要的事项, 对我们这一路的开发旅程感兴趣的人可以参阅 issue #904 " +"和 issue #874。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:471 +msgid "" +"The application and its repository have been renamed from PulseEffects to " +"EasyEffects" +msgstr "本程序及 Git 仓库已从 PulseEffects 重命名为 EasyEffects" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:472 +msgid "gtkmm3 was replaced by gtkmm4" +msgstr "gtkmm3 已被 gtkmm4 取代" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:473 +msgid "Gstreamer was replaced by native PipeWire filters." +msgstr "Gstreamer 已被原生 PipeWire 过滤器取代。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:474 +msgid "" +"Many features were reimplemented from scratch. The preset autoloading is one " +"example. Another remarkable change will be seen in the plugins selection " +"menu. Now the user can show in the window only the plugins that he/she wants " +"to use." +msgstr "" +"从头开始重新实现了许多功能,相关例子有预设自动加载等等。 另一个显着变化出现在" +"插件选择菜单中,现在用户可以在程序窗口中选择只显示他们想要使用的插件。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:475 +msgid "" +"Boost is no longer a dependency. The price paid for that was a little change " +"in our presets structures. With some patience it is possible to edit " +"PulseEffects presets in a text editor and make them work in EasyEffects. " +"Hopefully someone will come up with a script for this in the feature." +msgstr "" +"Boost 不再是本程序依赖,伴随这项改动的是预设文件的结构发生了一点变化。 只要有" +"足够的耐心,用户可以在文本编辑器中编辑 PulseEffects 预设并使它们在 " +"EasyEffects 中工作。 希望未来会有人为此编写一个脚本。" + +#: data/com.github.wwmm.easyeffects.metainfo.xml.in:476 +msgid "" +"New libraries are being used and some of the librarires that were optional " +"before are now required" +msgstr "本程序将逐渐使用更多的库,而一些本来是可选的库现在转变为必须的了" + +#~ msgid "This release adds the following features:" +#~ msgstr "此版本增加了以下功能:" + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "Debian 软件包。请参考 issue #1000 以了解更多信息。" + +#~ msgid "and #1427" +#~ msgstr "和 #1427" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "有一个新设置允许用户为管道选择不活动超时。当没有客户端正在播放时" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "我们不会浪费 CPU 功率处理静音。" + +#~ msgid "This release adds the following feature:" +#~ msgstr "此版软件新增了以下功能:" + +#~ msgid "Equalizer, Compressor and Other Audio Effects" +#~ msgstr "均衡器, 压缩器和其他音效" + +#~ msgid "limiter;compressor;reverberation;equalizer;autovolume;" +#~ msgstr "限幅器;压缩器;混响;均衡器;自动音量;" + +#~ msgid "\"Presets\"" +#~ msgstr "\"预设\"" + +#~ msgid "Enable" +#~ msgstr "启用" + +#~ msgid "Mute Application" +#~ msgstr "将程序静音" + +#~ msgid "_Reset Settings" +#~ msgstr "重置设置(_R)" + +#~ msgid "_About EasyEffects" +#~ msgstr "关于 EasyEffects (_A)" + +#~ msgid "Presets" +#~ msgstr "预设" + +#~ msgid "Presets Menu" +#~ msgstr "预设菜单" + +#~ msgid "Global Bypass" +#~ msgstr "全局旁路" + +#~ msgid "EasyEffects Window" +#~ msgstr "EasyEffects 窗口" + +#~ msgid "Empty List" +#~ msgstr "空列表" + +#~ msgid "Target" +#~ msgstr "目标" + +#~ msgid "Maximum History" +#~ msgstr "历史记录最大值" + +#~ msgid "Momentary" +#~ msgstr "瞬时" + +#~ msgid "Short-Term" +#~ msgstr "短期" + +#~ msgid "Integrated" +#~ msgstr "综合" + +#~ msgid "Reset History" +#~ msgstr "清除记录" + +#~ msgid "Relative" +#~ msgstr "相对值" + +#~ msgid "Range" +#~ msgstr "范围" + +#~ msgid "Loudness" +#~ msgstr "响度" + +#~ msgid "Output Gain" +#~ msgstr "输出增益" + +#~ msgid "Input" +#~ msgstr "输入" + +#~ msgid "Plugin Input Gain" +#~ msgstr "插件输入增益" + +#~ msgid "Output" +#~ msgstr "输出" + +#~ msgid "Plugin Output Gain" +#~ msgstr "插件输出增益" + +#~ msgid "Reset" +#~ msgstr "重置" + +#~ msgid "Using" +#~ msgstr "使用" + +#~ msgid "Device" +#~ msgstr "设备" + +#~ msgid "Name" +#~ msgstr "名称" + +#~ msgid "Profile" +#~ msgstr "概述" + +#~ msgid "Preset" +#~ msgstr "预设" + +#~ msgid "Remove this autoload preset" +#~ msgstr "删除此自动加载预设" + +#~ msgid "Listen" +#~ msgstr "聆听" + +#~ msgid "Blend Harmonics" +#~ msgstr "谐波注入" + +#~ msgid "3rd" +#~ msgstr "3次" + +#~ msgid "2nd" +#~ msgstr "2次" + +#~ msgid "Amount" +#~ msgstr "程度" + +#~ msgid "Harmonics" +#~ msgstr "谐波" + +#~ msgid "Scope" +#~ msgstr "范围" + +#~ msgid "Floor" +#~ msgstr "下限" + +#~ msgid "Floor Value" +#~ msgstr "下限" + +#~ msgid "Add to Excluded Applications" +#~ msgstr "添加到排除的程序" + +#~ msgid "Excluded Applications List" +#~ msgstr "已排除程序列表" + +#~ msgid "Show Excluded Applications" +#~ msgstr "显示已排除的程序" + +#~ msgid "Compressor" +#~ msgstr "压缩器" + +#~ msgid "Mode" +#~ msgstr "模式" + +#~ msgid "Downward" +#~ msgstr "向下" + +#~ msgid "Upward" +#~ msgstr "向上" + +#~ msgid "Boosting" +#~ msgstr "加强" + +#~ msgid "Compression Mode" +#~ msgstr "压缩模式" + +#~ msgid "Boost Threshold" +#~ msgstr "提升阈值" + +#~ msgid "Boost Amount" +#~ msgstr "Boost 量" + +#~ msgid "Attack" +#~ msgstr "起始时间" + +#~ msgid "Time" +#~ msgstr "时间" + +#~ msgid "Threshold" +#~ msgstr "阈值" + +#~ msgid "Attack Time" +#~ msgstr "起音时间" + +#~ msgid "Attack Threshold" +#~ msgstr "起音阈值" + +#~ msgid "Release" +#~ msgstr "消音时间" + +#~ msgid "Release Time" +#~ msgstr "消音时间" + +#~ msgid "Release Threshold" +#~ msgstr "消音阈值" + +#~ msgid "Ratio" +#~ msgstr "比率" + +#~ msgid "Knee" +#~ msgstr "拐点" + +#~ msgid "Makeup" +#~ msgstr "补偿" + +#~ msgid "Sidechain" +#~ msgstr "侧链" + +#~ msgid "Peak" +#~ msgstr "峰值" + +#~ msgid "RMS" +#~ msgstr "均方根值" + +#~ msgid "Low-Pass" +#~ msgstr "低通" + +#~ msgid "Uniform" +#~ msgstr "均值" + +#~ msgid "Sidechain Mode" +#~ msgstr "侧链模式" + +#~ msgid "Source" +#~ msgstr "源" + +#~ msgid "Middle" +#~ msgstr "中央" + +#~ msgid "Side" +#~ msgstr "侧边" + +#~ msgid "Left" +#~ msgstr "左" + +#~ msgid "Right" +#~ msgstr "右" + +#~ msgid "Sidechain Source" +#~ msgstr "侧链声源" + +#~ msgid "Type" +#~ msgstr "类型" + +#~ msgid "Feed-forward" +#~ msgstr "前馈式" + +#~ msgid "Feed-back" +#~ msgstr "反馈式" + +#~ msgid "Sidechain Type" +#~ msgstr "侧链类型" + +#~ msgid "Input Device" +#~ msgstr "输入设备" + +#~ msgid "PreAmplification" +#~ msgstr "前置放大" + +#~ msgid "Reactivity" +#~ msgstr "响应" + +#~ msgid "Lookahead" +#~ msgstr "预测时间" + +#~ msgid "Sidechain Filters" +#~ msgstr "侧链过滤器" + +#~ msgid "High-Pass" +#~ msgstr "高通滤波器" + +#~ msgid "Frequency" +#~ msgstr "频率" + +#~ msgid "Off" +#~ msgstr "关" + +#~ msgid "Gain" +#~ msgstr "增益" + +#~ msgid "Envelope" +#~ msgstr "波封" + +#~ msgid "Curve" +#~ msgstr "压缩曲线" + +#~ msgid "L" +#~ msgstr "左" + +#~ msgid "Left Channel" +#~ msgstr "左声道" + +#~ msgid "R" +#~ msgstr "右" + +#~ msgid "Right Channel" +#~ msgstr "右声道" + +#~ msgid "Stereo Width" +#~ msgstr "立体声宽度" + +#~ msgid "Spectrum" +#~ msgstr "频谱" + +#~ msgid "Autogain" +#~ msgstr "自动增益" + +#~ msgid "Rate" +#~ msgstr "速率" + +#~ msgid "Samples" +#~ msgstr "样本" + +#~ msgid "Duration" +#~ msgstr "持续时间" + +#~ msgid "Combine Impulse Responses" +#~ msgstr "混合脉冲响应" + +#~ msgid "Output File Name" +#~ msgstr "输出文件名" + +#~ msgid "Import Impulse" +#~ msgstr "导入 Impulse" + +#~ msgid "Search" +#~ msgstr "搜索" + +#~ msgid "Search Impulse File" +#~ msgstr "搜索脉冲文件" + +#~ msgid "Impulse Files List" +#~ msgstr "脉冲文件列表" + +#~ msgid "Default" +#~ msgstr "默认" + +#~ msgid "Cutoff" +#~ msgstr "截止" + +#~ msgid "Feed" +#~ msgstr "反馈" + +#~ msgid "Bypass" +#~ msgstr "旁路" + +#~ msgid "Mute" +#~ msgstr "静音静音" + +#~ msgid "Detection" +#~ msgstr "侦测" + +#~ msgid "Wide" +#~ msgstr "宽频段" + +#~ msgid "Split" +#~ msgstr "分割频段" + +#~ msgid "F1 Split" +#~ msgstr "F1 分离" + +#~ msgid "Frequency 1 Split" +#~ msgstr "频率 1 分割" + +#~ msgid "F2 Peak" +#~ msgstr "F2 峰值" + +#~ msgid "Frequency 2 Peak" +#~ msgstr "频率 2 峰值" + +#~ msgid "F1 Gain" +#~ msgstr "F1 增益" + +#~ msgid "Frequency 1 Gain" +#~ msgstr "频率 1 增益" + +#~ msgid "F2 Level" +#~ msgstr "F2 级别" + +#~ msgid "Frequency 2 Level" +#~ msgstr "频率 2 水平" + +#~ msgid "Frequency 2 Peak Q" +#~ msgstr "频率 2 Peak Q" + +#~ msgid "Detected" +#~ msgstr "已侦测到" + +#~ msgid "Reduction" +#~ msgstr "衰减" + +#~ msgid "Frame Size" +#~ msgstr "Frame 大小" + +#~ msgid "Filter Length" +#~ msgstr "过滤器长度" + +#~ msgid "Bands" +#~ msgstr "频段" + +#~ msgid "Split Channels" +#~ msgstr "分离声道" + +#~ msgid "Flat Response" +#~ msgstr "平滑响应" + +#~ msgid "Calculate Frequencies" +#~ msgstr "频率响应" + +#~ msgid "Load APO Preset" +#~ msgstr "加载 APO 预设" + +#~ msgid "Bell" +#~ msgstr "带通" + +#~ msgid "High Pass" +#~ msgstr "高通" + +#~ msgid "High Shelf" +#~ msgstr "高架" + +#~ msgid "Low Pass" +#~ msgstr "低通" + +#~ msgid "Low Shelf" +#~ msgstr "低架" + +#~ msgid "Notch" +#~ msgstr "带阻" + +#~ msgid "Resonance" +#~ msgstr "共鸣" + +#~ msgid "All Pass" +#~ msgstr "全通" + +#~ msgid "Band Type" +#~ msgstr "频段类型" + +#~ msgid "Band Mode" +#~ msgstr "频段模式" + +#~ msgid "Slope" +#~ msgstr "斜率" + +#~ msgid "Band Slope" +#~ msgstr "频段斜率" + +#~ msgid "Width" +#~ msgstr "宽度" + +#~ msgid "Quality" +#~ msgstr "品质" + +#~ msgid "Solo" +#~ msgstr "独奏" + +#~ msgid "Ceil" +#~ msgstr "上限" + +#~ msgid "API" +#~ msgstr "API" + +#~ msgid "Access" +#~ msgstr "访问" + +#~ msgid "Description" +#~ msgstr "描述" + +#~ msgid "Remove this model file" +#~ msgstr "删除这个模型文件" + +#~ msgid "Inertia" +#~ msgstr "惯性" + +#~ msgid "Gate" +#~ msgstr "门限" + +#, fuzzy +#~ msgid "Release Zone Start" +#~ msgstr "消音时间" + +#~ msgid "Internal" +#~ msgstr "内部" + +#~ msgid "Gating" +#~ msgstr "门控" + +#~ msgid "Oversampling" +#~ msgstr "超采样" + +#~ msgid "Sidechain PreAmplification" +#~ msgstr "侧链前置放大" + +#~ msgid "Boost" +#~ msgstr "增强" + +#~ msgid "Stereo Link" +#~ msgstr "立体声连锁" + +#~ msgid "External Sidechain" +#~ msgstr "外部侧链" + +#~ msgid "Auto Leveling" +#~ msgstr "自动调平" + +#~ msgid "Auto Leveling Attack" +#~ msgstr "自动调平起音" + +#~ msgid "Auto Leveling Release" +#~ msgstr "自动调平消音" + +#, fuzzy +#~ msgid "Auto Leveling Knee" +#~ msgstr "自动调平 Knee" + +#~ msgid "Gain Left" +#~ msgstr "左增益" + +#~ msgid "Gain Right" +#~ msgstr "右增益" + +#~ msgid "Sidechain Left" +#~ msgstr "左边侧链" + +#~ msgid "Sidechain Right" +#~ msgstr "右边侧链" + +#~ msgid "Standard" +#~ msgstr "标准" + +#~ msgid "Flat" +#~ msgstr "平滑" + +#~ msgid "FFT Size" +#~ msgstr "FFT 大小" + +#~ msgid "Output Volume" +#~ msgstr "输出音量" + +#~ msgid "Ceiling" +#~ msgstr "上限" + +#~ msgid "Operating Mode" +#~ msgstr "运作模式" + +#~ msgid "Modern" +#~ msgstr "现代" + +#~ msgid "Sidechain Boost" +#~ msgstr "侧链增强" + +#~ msgid "Bands List" +#~ msgstr "频段列表" + +#~ msgid "Band 1" +#~ msgstr "频段 1" + +#~ msgid "Band 2" +#~ msgstr "频段 2" + +#~ msgid "Band 3" +#~ msgstr "频段 3" + +#~ msgid "Band 4" +#~ msgstr "频段 4" + +#~ msgid "Band 5" +#~ msgstr "频段 5" + +#~ msgid "Band 6" +#~ msgstr "频段 6" + +#~ msgid "Band 7" +#~ msgstr "频段 7" + +#~ msgid "Band 8" +#~ msgstr "频段 8" + +#~ msgid "Band End" +#~ msgstr "频段末尾" + +#~ msgid "Band Compression Mode" +#~ msgstr "频段压缩模式" + +#~ msgid "Band Bypass" +#~ msgstr "频段旁路" + +#~ msgid "Band Sidechain Options" +#~ msgstr "频段侧链选项" + +#~ msgid "Low-Cut Filter" +#~ msgstr "低切滤音" + +#~ msgid "Low-Cut Filter Frequency" +#~ msgstr "低切滤音器频率" + +#~ msgid "High-Cut Filter Frequency" +#~ msgstr "高切滤音器频率" + +#~ msgid "Band Gain" +#~ msgstr "频段增益" + +#~ msgid "Band Curve" +#~ msgstr "频段曲线" + +#~ msgid "Split Mode" +#~ msgstr "分割模式" + +#~ msgid "Split 1/2" +#~ msgstr "分割 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "分割频率 1" + +#~ msgid "Split 2/3" +#~ msgstr "分割 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "分割频率 2" + +#~ msgid "Split 3/4" +#~ msgstr "分割 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "分割频率 3" + +#~ msgid "Sub Band" +#~ msgstr "子频" + +#~ msgid "Band 1 Bypass" +#~ msgstr "频段 1 旁路" + +#~ msgid "Band 1 Detection" +#~ msgstr "频段 1 侦测" + +#~ msgid "Band 1 Attack" +#~ msgstr "频段 1 起音" + +#~ msgid "Band 1 Release" +#~ msgstr "频段 1 消音" + +#~ msgid "Band 1 Threshold" +#~ msgstr "频段 1 阈值" + +#~ msgid "Band 1 Makeup" +#~ msgstr "频段 1 补偿" + +#~ msgid "Max Reduction" +#~ msgstr "衰减" + +#~ msgid "Band 1 Max Reduction" +#~ msgstr "频段 1 最大衰减" + +#~ msgid "Low Band" +#~ msgstr "低频" + +#~ msgid "Band 2 Bypass" +#~ msgstr "频段 2 旁路" + +#~ msgid "Band 2 Detection" +#~ msgstr "频段 2 侦测" + +#~ msgid "Band 2 Attack" +#~ msgstr "频段 2 起音" + +#~ msgid "Band 2 Release" +#~ msgstr "频段 2 消音" + +#~ msgid "Band 2 Threshold" +#~ msgstr "频段 2 阈值" + +#~ msgid "Band 2 Makeup" +#~ msgstr "频段 2 补偿" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "频段 2 最大衰减" + +#~ msgid "Mid Band" +#~ msgstr "中频" + +#~ msgid "Band 3 Bypass" +#~ msgstr "频段 3 旁路" + +#~ msgid "Band 3 Detection" +#~ msgstr "频段 3 侦测" + +#~ msgid "Band 3 Attack" +#~ msgstr "频段 3 起音" + +#~ msgid "Band 3 Release" +#~ msgstr "频段 3 消音" + +#~ msgid "Band 3 Threshold" +#~ msgstr "频段 3 阈值" + +#~ msgid "Band 3 Makeup" +#~ msgstr "频段 3 补偿" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "频段 3 最大衰减" + +#~ msgid "High Band" +#~ msgstr "高频" + +#~ msgid "Band 4 Bypass" +#~ msgstr "频段 4 旁路" + +#~ msgid "Band 4 Detection" +#~ msgstr "频段 4 侦测" + +#~ msgid "Band 4 Attack" +#~ msgstr "频段 4 起音" + +#~ msgid "Band 4 Release" +#~ msgstr "频段 4 消音" + +#~ msgid "Band 4 Threshold" +#~ msgstr "频段 4 阈值" + +#~ msgid "Band 4 Makeup" +#~ msgstr "频段 4 补偿" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "频段 4 最大衰减" + +#~ msgid "General" +#~ msgstr "通用" + +#~ msgid "Use Default Input" +#~ msgstr "使用默认输入" + +#~ msgid "Custom Input Device" +#~ msgstr "自定义输入设备" + +#~ msgid "Use Default Output" +#~ msgstr "使用默认输出" + +#~ msgid "Custom Output Device" +#~ msgstr "自定义输出设备" + +#~ msgid "Server Information" +#~ msgstr "服务器信息" + +#~ msgid "Header Version" +#~ msgstr "头文件版本" + +#~ msgid "Library Version" +#~ msgstr "库文件版本" + +#~ msgid "Sampling Rate" +#~ msgstr "采样率" + +#, fuzzy +#~ msgid "Minimum Quantum" +#~ msgstr "最小 Quantum" + +#~ msgid "Maximum Quantum" +#~ msgstr "最大 Quantum" + +#, fuzzy +#~ msgid "Default Quantum" +#~ msgstr "默认 Quantum" + +#~ msgid "Output Devices" +#~ msgstr "输出设备" + +#~ msgid "Output Presets" +#~ msgstr "输出预设" + +#~ msgid "Create Association" +#~ msgstr "创建关联" + +#~ msgid "Output Autoloading Presets List" +#~ msgstr "输出自动加载预设列表" + +#~ msgid "Input Devices" +#~ msgstr "输入设备" + +#~ msgid "Input Presets" +#~ msgstr "输入预设" + +#~ msgid "Input Autoloading Presets List" +#~ msgstr "输入自动加载预设列表" + +#~ msgid "Modules" +#~ msgstr "模块" + +#~ msgid "Modules List" +#~ msgstr "模块列表" + +#~ msgid "Clients" +#~ msgstr "客户端" + +#~ msgid "Clients List" +#~ msgstr "客户端列表" + +#~ msgid "Test Signal" +#~ msgstr "测试信号" + +#~ msgid "State" +#~ msgstr "状态" + +#~ msgid "Enabled" +#~ msgstr "已启用" + +#~ msgid "Channels" +#~ msgstr "声道" + +#~ msgid "Both Channels" +#~ msgstr "双声道" + +#~ msgid "Sine Wave" +#~ msgstr "正弦波" + +#~ msgid "White Noise" +#~ msgstr "白噪声" + +#~ msgid "High Speed" +#~ msgstr "高速" + +#~ msgid "High Quality" +#~ msgstr "高品质" + +#~ msgid "Formant" +#~ msgstr "格式" + +#~ msgid "Preserved" +#~ msgstr "保留" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "清脆感" + +#~ msgid "Detector" +#~ msgstr "侦测器" + +#~ msgid "Soft" +#~ msgstr "柔化处理" + +#~ msgid "Cents" +#~ msgstr "音分" + +#~ msgid "Semitones" +#~ msgstr "半音" + +#~ msgid "Octaves" +#~ msgstr "八度" + +#~ msgid "Remove this effect" +#~ msgstr "删除这个音效" + +#~ msgid "No Effects" +#~ msgstr "无音效" + +#~ msgid "Search Plugin" +#~ msgstr "搜索插件" + +#~ msgid "Plugins List" +#~ msgstr "插件列表" + +#~ msgid "_General" +#~ msgstr "常规(_G)" + +#~ msgid "Service" +#~ msgstr "服务" + +#~ msgid "Launch Service at System Startup" +#~ msgstr "系统启动时运行服务" + +#~ msgid "Shutdown on Window Closing" +#~ msgstr "窗口关闭时退出" + +#~ msgid "Audio" +#~ msgstr "音频" + +#~ msgid "Process All Output Streams" +#~ msgstr "处理所有输出流" + +#~ msgid "Process All Input Streams" +#~ msgstr "处理所有输入流" + +#~ msgid "Use Dark Theme" +#~ msgstr "使用暗色主题" + +#~ msgid "_Spectrum" +#~ msgstr "频谱(_S)" + +#~ msgid "Shape" +#~ msgstr "形状" + +#~ msgid "Bars" +#~ msgstr "柱状" + +#~ msgid "Lines" +#~ msgstr "线型" + +#~ msgid "Points" +#~ msgstr "数量" + +#~ msgid "Height" +#~ msgstr "高度" + +#~ msgid "Line Width" +#~ msgstr "线宽" + +#~ msgid "Fill" +#~ msgstr "填充频谱" + +#~ msgid "Color" +#~ msgstr "颜色" + +#~ msgid "Frequency Range" +#~ msgstr "频率范围" + +#~ msgid "Minimum" +#~ msgstr "最低" + +#~ msgid "Maximum" +#~ msgstr "最大值" + +#~ msgid "Load" +#~ msgstr "加载" + +#~ msgid "Save current settings to this preset file" +#~ msgstr "将当前设置保存到这个预设文件" + +#~ msgid "Remove this preset file" +#~ msgstr "删除这个预设文件" + +#~ msgid "New Output Preset Name" +#~ msgstr "新输出预设名" + +#~ msgid "Create a new preset" +#~ msgstr "创建新预设" + +#~ msgid "Import a preset" +#~ msgstr "导入预设" + +#~ msgid "Search Output Preset" +#~ msgstr "搜索输出预设" + +#~ msgid "Output Presets List" +#~ msgstr "输出预设列表" + +#~ msgid "New Input Preset Name" +#~ msgstr "新输入预设名" + +#~ msgid "Search Input Preset" +#~ msgstr "搜索输入预设" + +#~ msgid "Input Presets List" +#~ msgstr "输入预设列表" + +#~ msgid "High Frequency Damping" +#~ msgstr "高频阻尼" + +#~ msgid "Room Size" +#~ msgstr "房间大小" + +#~ msgid "Small" +#~ msgstr "小" + +#~ msgid "Medium" +#~ msgstr "中" + +#~ msgid "Large" +#~ msgstr "大" + +#~ msgid "Tunnel" +#~ msgstr "通道" + +#~ msgid "Large/smooth" +#~ msgstr "大/平整" + +#~ msgid "Experimental" +#~ msgstr "实验性" + +#~ msgid "Diffusion" +#~ msgstr "扩散" + +#~ msgid "Pre Delay" +#~ msgstr "前反射延迟" + +#~ msgid "Decay Time" +#~ msgstr "衰减时间" + +#~ msgid "Wet Amount" +#~ msgstr "湿声程度" + +#~ msgid "Wet Level" +#~ msgstr "湿声级别" + +#~ msgid "Dry Amount" +#~ msgstr "干声程度" + +#~ msgid "Dry Level" +#~ msgstr "干声级别" + +#~ msgid "Bass Cut" +#~ msgstr "低切" + +#~ msgid "Treble Cut" +#~ msgstr "高切" + +#~ msgid "Ambience" +#~ msgstr "氛围" + +#~ msgid "Empty Walls" +#~ msgstr "空旷" + +#~ msgid "Room" +#~ msgstr "房间" + +#~ msgid "Large Empty Hall" +#~ msgstr "空荡的大厅" + +#~ msgid "Disco" +#~ msgstr "舞厅" + +#~ msgid "Large Occupied Hall" +#~ msgstr "拥挤的大厅" + +#~ msgid "Import Model" +#~ msgstr "导入模型" + +#~ msgid "Models" +#~ msgstr "模型" + +#~ msgid "Standard Model" +#~ msgstr "标准模型" + +#~ msgid "RNNoise Models List" +#~ msgstr "RNNoise 模型列表" + +#~ msgid "Active Model" +#~ msgstr "激活模型" + +#~ msgid "Standard RNNoise Model" +#~ msgstr "标准 RNNoise 模型" + +#~ msgid "Overview" +#~ msgstr "概览" + +#~ msgid "Open the EasyEffects Manual" +#~ msgstr "打开 EasyEffects 手册" + +#~ msgid "Fullscreen/Restore from fullscreen" +#~ msgstr "全屏/从全屏恢复" + +#~ msgid "Close the Window" +#~ msgstr "关闭窗口" + +#~ msgid "Quit EasyEffects" +#~ msgstr "退出 EasyEffects" + +#~ msgid "Balance" +#~ msgstr "平衡" + +#~ msgid "Input Balance" +#~ msgstr "输出平衡" + +#~ msgid "Softclip" +#~ msgstr "柔化处理" + +#~ msgid "Softclip Level" +#~ msgstr "软削波等级" + +#~ msgid "Stereo Matrix" +#~ msgstr "立体声阵距" + +#~ msgid "LR > LR (Stereo Default)" +#~ msgstr "LR > LR (默认立体声)" + +#~ msgid "LR > MS (Stereo to Mid-Side)" +#~ msgstr "LR > MS (立体声至中-侧)" + +#~ msgid "MS > LR (Mid-Side to Stereo)" +#~ msgstr "MS > LR (中-侧至立体声)" + +#~ msgid "LR > LL (Mono Left Channel)" +#~ msgstr "LR > LL (单声道左)" + +#~ msgid "LR > RR (Mono Right Channel)" +#~ msgstr "LR > RR (单声道右)" + +#~ msgid "LR > L+R (Mono Sum L+R)" +#~ msgstr "LR > L+R (单声道左右合并)" + +#~ msgid "LR > RL (Stereo Flip Channels)" +#~ msgstr "LR > RL (立体声翻转)" + +#~ msgid "Stereo Mode" +#~ msgstr "立体声模式" + +#~ msgid "Invert Phase" +#~ msgstr "反转相位" + +#~ msgid "Side Level" +#~ msgstr "侧边级别" + +#~ msgid "Side Balance" +#~ msgstr "侧边平衡" + +#~ msgid "Middle Level" +#~ msgstr "中置级别" + +#~ msgid "Middle Panorama" +#~ msgstr "中置全景" + +#~ msgid "Output Balance" +#~ msgstr "输出平衡" + +#~ msgid "Delay L/R" +#~ msgstr "延迟 L/R" + +#~ msgid "Delay Left Right" +#~ msgstr "延迟 L/R" + +#~ msgid "Stereo Base" +#~ msgstr "立体声基线" + +#~ msgid "Stereo Phase" +#~ msgstr "立体声相位" + +#~ msgid "Running" +#~ msgstr "正在运行" + +#~ msgid "Suspended" +#~ msgstr "已暂停" + +#~ msgid "Idle" +#~ msgstr "空闲" + +#~ msgid "Creating" +#~ msgstr "创建中" + +#~ msgid "Error" +#~ msgstr "错误" + +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgid "channels" +#~ msgstr "声道" + +#~ msgid "Output Presets: " +#~ msgstr "输出预设: " + +#~ msgid "Input Presets: " +#~ msgstr "输入预设: " + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "为使用 PipeWire 的程序提供音效" + +#~ msgid "Quit EasyEffects. Useful when running in service mode." +#~ msgstr "退出 EasyEffects。 在服务模式下运行时很有用。" + +#~ msgid "Load a preset. Example: easyeffects -l music" +#~ msgstr "加载预设。 示例:easyeffects -l music" + +#~ msgid "Reset EasyEffects." +#~ msgstr "重设 EasyEffects。" + +#~ msgid "Hide the Window." +#~ msgstr "隐藏隐藏窗口。" + +#~ msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +#~ msgstr "全局旁路。 1 启用,2 禁用,3 获取状态" + +#~ msgid "Show available presets." +#~ msgstr "显示可用预设。" + +#~ msgid "PipeWire" +#~ msgstr "PipeWire" + +#~ msgid "Impulse File Not Imported" +#~ msgstr "脉冲文件未导入" + +#~ msgid "Import Impulse File" +#~ msgstr "导入 Impulse 文件" + +#~ msgid "Open" +#~ msgstr "打开" + +#~ msgid "Cancel" +#~ msgstr "取消" + +#~ msgid "Impulse Response" +#~ msgstr "Impulse 解析" + +#~ msgid "Load Impulse" +#~ msgstr "加载脉冲" + +#~ msgid "Remove Impulse" +#~ msgstr "删除脉冲" + +#~ msgid "No Impulse File Loaded" +#~ msgstr "未加载脉冲文件" + +#~ msgid "Failed To Load The Impulse File" +#~ msgstr "加载脉冲文件失败" + +#~ msgid "Recorders" +#~ msgstr "录音程序" + +#~ msgid "Players" +#~ msgstr "播放器" + +#~ msgid "Effects" +#~ msgstr "音效" + +#~ msgid "infinity" +#~ msgstr "无限" + +#~ msgid "Import APO Preset File" +#~ msgstr "加载 APO 预设文件" + +#~ msgid "APO Presets" +#~ msgstr "APO 预设" + +#~ msgid "Remove Autoloading Preset" +#~ msgstr "删除自动加载预设" + +#~ msgid "Remove" +#~ msgstr "删除" + +#~ msgid "Output Device" +#~ msgstr "输出设备" + +#~ msgid "Add" +#~ msgstr "添加" + +#~ msgid "Import Preset" +#~ msgstr "导入预设" + +#~ msgid "Import Model File" +#~ msgstr "导入模型文件" + +#~ msgid "RNNoise Models" +#~ msgstr "RNNoise 模型" + +#~ msgid "Bass Enhancer" +#~ msgstr "低音增强" + +#~ msgid "Bass Loudness" +#~ msgstr "低音响度" + +#~ msgid "Convolver" +#~ msgstr "卷积混响器" + +#~ msgid "Crossfeed" +#~ msgstr "交叉反馈" + +#~ msgid "Deesser" +#~ msgstr "齿音消除" + +#~ msgid "Delay" +#~ msgstr "延迟" + +#~ msgid "Echo Canceller" +#~ msgstr "回音消除" + +#~ msgid "Equalizer" +#~ msgstr "均衡器" + +#~ msgid "Exciter" +#~ msgstr "激励器" + +#~ msgid "Filter" +#~ msgstr "过滤器" + +#~ msgid "Limiter" +#~ msgstr "限幅器" + +#~ msgid "Maximizer" +#~ msgstr "放大器" + +#~ msgid "Multiband Compressor" +#~ msgstr "多频段压缩器" + +#~ msgid "Multiband Gate" +#~ msgstr "多频段门限" + +#~ msgid "Pitch" +#~ msgstr "音高" + +#~ msgid "Reverberation" +#~ msgstr "混响" + +#~ msgid "Noise Reduction" +#~ msgstr "降噪" + +#~ msgid "Stereo Tools" +#~ msgstr "立体声工具" + +#~ msgid "Average" +#~ msgstr "平均值" + +#~ msgid "Failed" +#~ msgstr "失败" + +#~ msgid "Use Default" +#~ msgstr "使用默认" + +#~ msgid "Remove this plugin" +#~ msgstr "删除这个插件" + +#~ msgid "Import Presets" +#~ msgstr "加载预设" + +#~ msgid "Start Service at Login" +#~ msgstr "登录时启动服务" + +#~ msgid "Process All Outputs" +#~ msgstr "处理所有输出" + +#~ msgid "Process All Inputs" +#~ msgstr "处理所有输入" + +#~ msgid "Activate" +#~ msgstr "激活" + +#~ msgid "Add to Blocklist" +#~ msgstr "加入黑名单" + +#~ msgid "Blocklist" +#~ msgstr "黑名单" + +#~ msgid "Add Plugin" +#~ msgstr "增加插件" + +#~ msgid "Speakers" +#~ msgstr "扬声器" + +#~ msgid "Microphone" +#~ msgstr "麦克风" + +#~ msgid "enabled" +#~ msgstr "已启用" + +#~ msgid "disabled" +#~ msgstr "已禁用" + +#~ msgid "Plugins" +#~ msgstr "插件" + +#~ msgid "Format" +#~ msgstr "格式" + +#~ msgid "Latency" +#~ msgstr "延迟" + +#~ msgid "idle" +#~ msgstr "空闲" + +#~ msgid "Faster" +#~ msgstr "快速" + +#~ msgid "Preserve Formant" +#~ msgstr "共振保护" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "设置音量和 打开/关闭音效" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "包含预设的均衡器" + +#~ msgid "Input Limiter" +#~ msgstr "输入限幅器" + +#~ msgid "Calibration" +#~ msgstr "校准" + +#~ msgid "Settings" +#~ msgstr "设置" + +#~ msgid "Id" +#~ msgstr "Id" + +#~ msgid "Low-pass" +#~ msgstr "低通" + +#~ msgid "Player Name" +#~ msgstr "播放器名称" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "最大增益衰减" + +#~ msgid "Run in Background" +#~ msgstr "后台运行" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "自动平滑控制" + +#~ msgid "Limit" +#~ msgstr "限制" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Attenuation" +#~ msgstr "衰减" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Signal" +#~ msgstr "测试信号" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "程度" + +#~ msgid "Dry" +#~ msgstr "干声" + +#~ msgid "Show Spectrum" +#~ msgstr "显示频谱" + +#~ msgid "Border" +#~ msgstr "显示边界" + +#~ msgid "Spectrum Type" +#~ msgstr "频谱类型" + +#~ msgid "Spectrum Color" +#~ msgstr "光谱颜色" + +#~ msgid "S/C Level" +#~ msgstr "S/C 级别" + +#~ msgid "Phase Correlation" +#~ msgstr "相位相关" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..4fe90df --- /dev/null +++ b/po/nl.po @@ -0,0 +1,3348 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-09-23 08:02+0000\n" +"Last-Translator: Philip Goto \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.1-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizer, compressor en overige audio-effecten" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Audio-effecten voor PipeWire-apps" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limiter;compressor;galm;equalizer;autovolume;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "‘Voorinstellingen’" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Deze app omschakelen" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Inschakelen" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Lijst met uitgesloten apps: Deze app toevoegen/verwijderen" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Uitsluiten" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "App dempen" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Volume van deze app aanpassen" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "App-volume" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Hulp" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "Standaardinstellingen _herstellen" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Voorkeuren" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Sneltoetsen" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Over Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Voorinstellingen" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Voorinstellingen-menu" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Globale omleiding omschakelen" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Globale omzeiling" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Primair menu" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Venster van Easy Effects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "App-lijst" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Lege lijst" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Geen audio-app beschikbaar" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Geschiedenis wissen" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "Bediening" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Doel" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Stilte" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Maximale geschiedenis" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Verwijzing" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Kortstondig" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Korte termijn" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Geïntegreerd" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Geometrisch gemiddelde (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Geometrisch gemiddelde (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Geometrisch gemiddelde (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Geometrisch gemiddelde (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Hardheid" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relatief" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Bereik" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Uitvoerversterking" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Invoer" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Plug-in-invoerversterking" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Uitvoer" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Plug-in-uitvoerversterking" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Standaardwaarden" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Apparaat" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Naam" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profiel" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Voorinstelling" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Deze automatisch geladen voorinstelling verwijderen" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Beluisteren" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Harmonieën mengen" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3e" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2e" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Hoeveelheid" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonieën" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Domein" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Vloer" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Vloerwaarde" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Verwijzing" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "App-naam" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Toevoegen aan uitgesloten apps" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Lijst met uitgesloten apps" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Uitgesloten apps tonen" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Inheems venster tonen" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compressor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modus" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Omlaag" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Omhoog" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Versterking" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Compressiemodus" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Versterkingsdrempelwaarde" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Versterkingsgrootte" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Attack" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Duur" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Drempelwaarde" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Attack-tijd" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Attack-drempel" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Release" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Release-tijd" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Release-drempel" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Verhouding" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Knie" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Make-up" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Droog-niveau" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Nat-niveau" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Zijketen" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereo-mode" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Brok" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Midden" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Zijkant" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Links" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Rechts" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Max" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Zijketenbron" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Vertraging links/rechts" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Rechts" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Zijkant" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Zijkant" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Standaardbron" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Piek" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Low-pass-filter" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Eenvoudig voortschrijdend gemiddelde" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Zijketenmodus" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Externe sidechain" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Soort" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Feedforward" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Feedback" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Extern" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Sidechain-type" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Invoerapparaat" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Voorversterking" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reactiviteit" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Vooruitblik" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Zijketenfilters" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "High-pass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frequentie" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Uit" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "High-pass-filtermodus" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "High-pass-filterfrequentie" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Low-pass" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Low-pass-filtermodus" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Versterking" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Envelop" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Kromme" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Linkerkanaal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Rechterkanaal" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsen" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Combineren" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Stereobreedte" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spectrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Logaritmische schaal" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Automatisch versterken" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Snelheid" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Monsters" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Duur" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Impulsresponsen combineren" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Eerste kernel" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Tweede kernel" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Uitvoerbestandsnaam" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Gecombineerde kernel-naam" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Impulse importeren" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Zoeken" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Impulsbestand doorzoeken" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Impulsbestandenlijst" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Standaard" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Onderbreking" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Aanvoer" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Omzeiling" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Dempen" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detectie" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Breed" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Splitsen" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1-splitsing" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Splitsing van frequentie 1" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2-piek" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Piek van frequentie 2" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1-versterking" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Versterking van frequentie 1" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2-niveau" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Niveau van frequentie 2" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2-piek-Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Piek-Q van frequentie 2" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Laxiteit" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Gedetecteerd" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Vermindering" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Vertraging" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Fase omkeren" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Verzwakking" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filterlengte" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Filterlengte" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Resterende echo-onderdrukking" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Echo-onderdrukking aan het einde" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Uitgesloten apps" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Banden" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balans" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Toonhoogte links" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Toonhoogte rechts" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Kanalen splitsen" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Platte respons" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Frequenties berekenen" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Banden sorteren" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Voorinstelling importeren" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Stijging" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kwaliteit" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Breedte" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Plafond" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Plafondwaarde" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "Uitbreider" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "Uitbreider­modus" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Intern" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Toegang" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Omschrijving" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Modelbestand verwijderen" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "Low-shelf" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "High-shelf" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Bel" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "Band-pass" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Inkeping" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonantie" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "Ladder-pass" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "Ladder-rejection" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "All-pass" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Equalizer" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Gate" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Zone" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Hysterese" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Mix" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Start van attack-zone" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Start van release-zone" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "Echte piek" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Oversamplen" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Dither" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Hermite-dun" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Hermite-breed" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Hermite-linksbreed" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Hermite-rechtsbreed" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exponentieel-dun" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exponentieel-breed" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Exponentieel-linksbreed" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exponentieel-rechtsbreed" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Lineair-dun" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Lineair-breed" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Lineair-rechtsbreed" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Lineair-linksbreed" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Geen" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Half 2× (2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Half 2× (3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Half 3× (2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Half 3× (3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Half 4× (2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Half 4× (3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Half 6× (2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Half 6× (3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Half 8× (2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Half 8× (3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Volledig 2× (2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Volledig 2× (3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Volledig 3× (2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Volledig 3× (3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Volledig 4× (2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Volledig 4× (3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Volledig 6× (2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Volledig 6× (3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Volledig 8× (2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Volledig 8× (3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC-voorversterking" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Sidechain-voorversterking" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Versterken" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Stereokoppeling" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Externe sidechain" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Bron van externe sidechain" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Automatische niveau's" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Automatische attack-niveau's" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Automatische release-niveau's" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Automatische knee-niveau's" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Versterking links" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Versterking rechts" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Sidechain links" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Sidechain rechts" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standaard" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Plat" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "FFT-grootte" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Uitvoervolume" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Knippen" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Plafond" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "sidechain-versterking" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "Roze-BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "Roze-MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "Bruin-BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "Bruin-MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Bedrijfsmodus" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klassiek" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Modern" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Fase omkeren" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Bandlijst" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Band 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Band 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Band 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Band 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Band 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Band 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Band 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Band 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Start van band" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Einde van band" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Bandcompressiemodus" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Bandomzeiling" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Band-sidechain-opties" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereo-mode" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Low-cut-filter" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Low-cut-filterfrequentie" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "High-cut-filter" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "High-cut-filterfrequentie" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "Voorversterking" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Bandversterking" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Bandenvelop" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Bandkromme" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Bandvermindering" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Algemeen" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Apparaatbeheer" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"Het wordt aanbevolen om NIET de bron Easy Effects als standaardapparaat in " +"te stellen bij externe apps (bijv. GNOME Instellingen en Plasma " +"Systeeminstellingen)." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Standaardinvoer gebruiken" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Aangepast invoerapparaat" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Standaarduitvoer gebruiken" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Aangepast uitvoerapparaat" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Server-informatie" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Kopversie" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Bibliotheekversie" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Bemonsteringsfrequentie" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Minimale quantum" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Maximale quantum" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Standaard-quantum" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Automatisch inladen van voorinstellingen" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Uitvoerapparaten" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Uitvoervoorinstellingen" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Vereniging aanmaken" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Automatisch geladen uitvoervoorinstelling toevoegen" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Lijst van automatisch geladen uitvoervoorinstellingen" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Invoerapparaten" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Invoervoorinstellingen" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Automatisch geladen invoervoorinstelling toevoegen" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Lijst van automatisch geladen invoervoorinstellingen" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Modules" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Modulelijst" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Cliënten" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Cliëntenlijst" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Signaal testen" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Status" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Ingeschakeld" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Eigenschappen" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanalen" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Beide" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Beide kanalen" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Golfvorm" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinusgolf" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Witte ruis" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "Snel zoeken" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "Anti-aliasing" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "Sequentielengte" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "Zoekvenster" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "Overlapslengte" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Toonhoogte" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Halve tonen" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "Tempoverschil" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "Snelheidsverschil" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Effect verwijderen" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Effect omschakelen" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Positie van effect aanpassen" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Effect toevoegen" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Lijst met gebruikte plug-ins" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Geen effecten" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Audio-stream onbewerkt" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Zoek-plug-in" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Lijst met plug-ins" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Algemeen" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Dienst" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Service starten bij opstarten van systeem" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Afsluiten bij sluiten van venster" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Alle uitvoer-streams verwerken" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Alle invoer-streams verwerken" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Streams van apparaatmonitor negeren" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Kubisch volume gebruiken" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Inactiviteits-time-out" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "Update-interval (niveaumeters en spectrum)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "Update-frequentie (LV2-plug-ins)" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Stijl" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Donker thema" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Menu's verbergen bij klikken achtergrond" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "Experimentele functies" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "Inheemse plug-ins-venster" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" +"Staat toe dat het venster voor inheemse plug-ins wordt weergegeven/verborgen" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spectrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Vorm" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Balken" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Lijnen" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Puntjes" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Points" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Lengte" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Lijnbreedte" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Opvullen" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Balkrand tonen" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Afgeronde hoeken" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Kleur" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Lijnen en balken" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "As-labels" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Frequentiebereik" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimaal" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maximaal" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Laden" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "Huidige instellingen verwerpen en deze voorinstelling laden" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Sla de huidige instellingen op in dit voorinstellingsbestand" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Verwijder dit voorinstellingsbestand" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Nieuwe naam voor invoervoorinstelling" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Nieuwe voorinstelling aanmaken" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Voorinstelling importeren" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Invoervoorinstellingen doorzoeken" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Lijst met invoervoorinstellingen" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Hoge frequentiedemping" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Kamergrootte" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Klein" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Gemiddeld" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Groot" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Groot/Vloeiend" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimenteel" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Verspreiding" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Vertraging vooraf" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Vervaltijd" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Bas onderdrukken" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Hoge tonen afsnijden" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Sfeer" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Kale muren" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Kamer" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Grote, lege zaal" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Grote, bezette zaal" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Model importeren" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Stemdetectie" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modellen" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Standaardmodel" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Lijst met RNNoise-modellen" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Model niet geladen" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Huidig model" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Standaard RNNoise-model" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Overzicht" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "Hulp tonen" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Volledig scherm omschakelen" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Venster sluiten" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Easy Effects afsluiten" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Ruis wegfilteren" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Automatische versterking" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Nagalm wegfilteren" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Waarschijnlijkheid van stemactiviteit" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Starten" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Doorgaan" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Ruisonderdrukking" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Niveau" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Invoerbalans" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Softclip-niveau" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Stereomatrix" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (standaard stereo)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (stereo naar midden-zijkant)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (midden-zijkant naar stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (mono, linkerkanaal)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (mono, rechterkanaal)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (mono, sum L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (stereo, kanalen omwisselen)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Stereo-mode" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Zijniveau" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Zijbalans" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Middelste niveau" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Middelste panorama" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Uitvoerbalans" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "L/R-vertraging" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Vertraging links/rechts" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Stereobasis" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Stereofase" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "Actief" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Onderbroken" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Inactief" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Bezig met aanmaken" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Fout" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Onbekend" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "kanalen" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Sluit Easy Effects af. Nuttig in dienstmodus." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Laad een voorinstelling. Voorbeeld: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Reset Easy Effects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Verberg het venster." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Globale omzeiling: 1 = inschakelen, 2 = uitschakelen, 3 = status opvragen" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Toon de beschikbare voorinstellingen." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Uitvoer" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_Invoer" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "Bestand is ongebruikelijk" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "Het impulsbestand is mogelijk beschadigd of wordt niet ondersteund" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Enkel stereo-impulsbestanden worden ondersteund" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Impulsbestand niet geïmporteerd" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Impulse-bestand importeren" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Openen" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Impulsrespons" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Impuls laden" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Impuls verwijderen" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Geen impulsbestand geladen" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Impulsbestand laden mislukt" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Opname-apparaten" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Spelers" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Effecten" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "APO-voorinstellingsbestand importeren" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO-voorinstellingen" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"APO-voorinstelling niet geladen. Bestandsformaat wordt mogelijk niet " +"ondersteund. Controleer de inhoud." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "GraphicEQ-voorinstellingsbestand importeren" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "GraphicEQ-voorinstellingen" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"GraphicEQ-voorinstelling niet geladen. Bestandsformaat wordt mogelijk niet " +"ondersteund. Controleer de inhoud." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Automatisch ingeladen voorinstelling verwijderen" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "Uitvoerniveaumeter" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Verwijderen" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Uitvoerapparaat" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Toevoegen" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "Opslaan?" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "Verwijderen?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Geselecteerde model is niet geladen. Het formaat wordt mogelijk niet " +"ondersteund. Standaardmodel wordt gebruikt." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Modelbestand importeren" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise-modellen" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Basversterker" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Hardheid van bas" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolutie" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Kristalliseerder" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "Diepe ruis-verwijderaar" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Echo-onderdrukking" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Equalizer" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Exciter" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "Niveaumeter" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limiter" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizer" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Multiband-compressor" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Multiband-gate" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Nagalm" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Ruisverlaging" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Spraakverwerker" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Stereobediening" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} is niet beschikbaar" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" +"De software vereist voor het {}-effect, ‘{}’, is niet geïnstalleerd. " +"Overweeg het Flatpak-pakket van Easy Effects te gebruiken of de software " +"handmatig te installeren." + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" +"Het effect {} was uitgeschakeld bij de compilatie van Easy Effects. Dit kan " +"zijn omdat de vereiste software voor dit effect, ‘{}‘, niet beschikbaar was. " +"Overweeg het Flatpak-pakket van Easy Effects te gebruiken of uw eigen pakket " +"van Easy Effects te bouwen." + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "- ∞" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "{} wordt gebruikt" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Low-cut-filter" + +#~ msgid "High-Cut Filter" +#~ msgstr "High-cut-filter" + +#~ msgid "Uniform" +#~ msgstr "Uniform" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nieuwe naam voor uitvoervoorinstelling" + +#~ msgid "Search Output Preset" +#~ msgstr "Uitvoervoorinstellingen doorzoeken" + +#~ msgid "Output Presets List" +#~ msgstr "Lijst met uitvoervoorinstellingen" + +#~ msgid "infinity" +#~ msgstr "oneindig" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Verhouding" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Drempelwaarde" + +#~ msgid "Low-pass" +#~ msgstr "Low-pass" + +#~ msgid "High-pass" +#~ msgstr "High-pass" + +#~ msgid "Gating" +#~ msgstr "Dosering" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct low-pass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct low-pass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct low-pass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct high-pass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct high-pass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct high-pass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct band-pass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct band-pass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct band-pass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct band-reject" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct band-reject" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct band-reject" + +#~ msgid "Inertia" +#~ msgstr "Traagheid" + +#~ msgid "Band Type" +#~ msgstr "Bandtype" + +#~ msgid "Band Mode" +#~ msgstr "Bandmodus" + +#~ msgid "Band Slope" +#~ msgstr "Bandhelling" + +#~ msgid "Loudness List" +#~ msgstr "Volumelijst" + +#~ msgid "High Speed" +#~ msgstr "Hoge snelheid" + +#~ msgid "High Quality" +#~ msgstr "Hoge kwaliteit" + +#~ msgid "High Consistency" +#~ msgstr "Hoge consistentie" + +#~ msgid "Formant" +#~ msgstr "Formant" + +#~ msgid "Shifted" +#~ msgstr "Verschoven" + +#~ msgid "Preserved" +#~ msgstr "Behouden" + +#~ msgid "Transients" +#~ msgstr "Overgangen" + +#~ msgid "Crisp" +#~ msgstr "Helder" + +#~ msgid "Mixed" +#~ msgstr "Gemengd" + +#~ msgid "Smooth" +#~ msgstr "Soepel" + +#~ msgid "Detector" +#~ msgstr "Detector" + +#~ msgid "Compound" +#~ msgstr "Samengesteld" + +#~ msgid "Percussive" +#~ msgstr "Percussief" + +#~ msgid "Soft" +#~ msgstr "Zacht" + +#~ msgid "Phase" +#~ msgstr "Fase" + +#~ msgid "Laminar" +#~ msgstr "Laminair" + +#~ msgid "Independent" +#~ msgstr "Onafhankelijk" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Octaves" +#~ msgstr "Octaven" + +#~ msgid "_Manual" +#~ msgstr "_Handleiding" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Handleiding van Easy Effects openen" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} is niet geïnstalleerd op dit systeem" + +#~ msgid "High Pass" +#~ msgstr "High-pass" + +#~ msgid "Low Pass" +#~ msgstr "Low-pass" + +#~ msgid "Cancel" +#~ msgstr "Annuleren" + +#~ msgid " PreAmplification" +#~ msgstr " Voorversterking" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Sluiten (ESC)" + +#~ msgid "Frame Size" +#~ msgstr "Framegrootte" + +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "Globale omzeiling omschakelen" + +#~ msgid " Low-Pass" +#~ msgstr " Low-pass" + +#~ msgid " Uniform" +#~ msgstr " Uniform" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Vertraging vooraf" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Kanalen splitsen" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "F2-niveau" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "F2-niveau" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Doelniveau" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Doelniveau" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Onderdrukkingsniveau" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Audio-effecten voor PipeWire-toepassingen" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Ruisverlaging" + +#~ msgid "Load APO Preset" +#~ msgstr "APO-voorinstelling laden" + +#~ msgid "EasyEffects" +#~ msgstr "PulseEffecten" + +#~ msgid "Output Presets: " +#~ msgstr "Uitvoer-voorinstellingen: " + +#~ msgid "Input Presets: " +#~ msgstr "Invoer-voorinstellingen: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Splitsen" + +#~ msgid "Split 1/2" +#~ msgstr "1/2 splitsen" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frequentie" + +#~ msgid "Split 2/3" +#~ msgstr "2/3 splitsen" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frequentie" + +#~ msgid "Split 3/4" +#~ msgstr "3/4 splitsen" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frequentie" + +#~ msgid "Sub Band" +#~ msgstr "Subband" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Make-up" + +#~ msgid "Max Reduction" +#~ msgstr "Verlaging" + +#~ msgid "Low Band" +#~ msgstr "Lage band" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Make-up" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Versterkingsverlaging" + +#~ msgid "Mid Band" +#~ msgstr "Middelste band" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Make-up" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Versterkingsverlaging" + +#~ msgid "High Band" +#~ msgstr "Hoge band" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Omzeiling" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Aanval" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Vrijgave" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Drempelwaarde" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Banden" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Make-up" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Versterkingsverlaging" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Hoeveelheid" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Hoeveelheid" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#, fuzzy +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects is een uitgebreid hulpmiddel waarmee u audio zeer gericht " +#~ "kunt afstellen. Het bevat een equalizer, limiter, compressor, " +#~ "galmhulpmiddel en een aantal andere hulpmiddelen. Verder bevat de " +#~ "toepassing een spectrumanalyse-hulpmiddel." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "EasyEffects maakt gebruik van de PipeWire-geluidsserver en werkt daardoor " +#~ "met nagenoeg alle, zo niet alle, toepassingen die u gebruikt. Alle " +#~ "ondersteunde toepassingen worden getoond in het hoofdvenster, waar elke " +#~ "toepassing op elk moment kan worden in- of uitgeschakeld." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Naast het aanpassen van geluidsuitvoer, past EasyEffects ook het geluid " +#~ "van invoerapparaten, zoals microfoons, aan. Dit is onder meer nuttig bij " +#~ "het opnemen van audio of voeren van audiogesprekken." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Na het opstarten toont EasyEffects de in de vorige sessie gebruikte " +#~ "instellingen. Ook kunnen instellingen worden opgeslagen als profielen." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Banden" + +#~ msgid "Average" +#~ msgstr "Gemiddeld" + +#~ msgid "Failed" +#~ msgstr "Mislukt" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Standaardinvoer gebruiken" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Verwijder dit voorinstellingsbestand" + +#~ msgid "Import Presets" +#~ msgstr "Importeer voorinstellingen" + +#~ msgid "Start Service at Login" +#~ msgstr "Automatisch opstarten" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Huidig model" + +#~ msgid "Add to Blocklist" +#~ msgstr "Toevoegen aan zwarte lijst" + +#~ msgid "Blocklist" +#~ msgstr "Zwarte lijst" + +#~ msgid "Add Plugin" +#~ msgstr "Plug-in toevoegen" + +#~ msgid "Speakers" +#~ msgstr "Luidsprekers" + +#~ msgid "Microphone" +#~ msgstr "Microfoon" + +#~ msgid "Plugins" +#~ msgstr "Plug-ins" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Inschakelen" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Inschakelen" + +#~ msgid "Format" +#~ msgstr "Formaat" + +#~ msgid "Latency" +#~ msgstr "Vertraging" + +#~ msgid "idle" +#~ msgstr "inactief" + +#~ msgid "Faster" +#~ msgstr "Sneller" + +#~ msgid "Preserve Formant" +#~ msgstr "Formaat behouden" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Player Name" +#~ msgstr "Spelernaam" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Uitvoerversterking" + +#~ msgid "Channel" +#~ msgstr "Kanaal" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Verdieping" + +#~ msgid "Output Effects" +#~ msgstr "Uitvoereffecten" + +#~ msgid "Settings" +#~ msgstr "Instellingen" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Instellingen" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Duur" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Signaal testen" + +#~ msgid "Signal" +#~ msgstr "Signaal" + +#~ msgid "Show Spectrum" +#~ msgstr "Spectrum tonen" + +#~ msgid "Border" +#~ msgstr "Rand" + +#~ msgid "Spectrum Type" +#~ msgstr "Soort spectrum" + +#~ msgid "Spectrum Color" +#~ msgstr "Spectrumkleur" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Huidig model" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Maximale versterkingsverlaging" + +#~ msgid "Wet" +#~ msgstr "Nat" + +#~ msgid "Dry" +#~ msgstr "Droog" + +#~ msgid "S/C Level" +#~ msgstr "S/C-niveau" + +#~ msgid "Phase Correlation" +#~ msgstr "Fasecorrelatie" + +#~ msgid "Short Term" +#~ msgstr "Korte termijn" + +#~ msgid "Id" +#~ msgstr "ID" + +#~ msgid "Run in Background" +#~ msgstr "Uitvoeren op achtergrond" + +#~ msgid "ceil" +#~ msgstr "ceil" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Regel het volume en schakel effecten in/uit" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Bevat een equalizer met meegeleverde voorinstellingen" + +#~ msgid "Input Limiter" +#~ msgstr "Invoerbeperking" + +#~ msgid "Calibration" +#~ msgstr "Kalibratie" + +#~ msgid "Limit" +#~ msgstr "Beperken" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Audio-effecten voor PulseAudio-toepassingen" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Audio-effecten voor PulseAudio-toepassingen" + +#~ msgid "Calibration Microphone" +#~ msgstr "Microfoon kalibreren" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Pas deze voorinstellingen automatisch toe zodra het huidige apparaat " +#~ "wordt aangekoppeld" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Versie" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Vierkant" + +#~ msgid "Saw" +#~ msgstr "Zaag" + +#~ msgid "Triangle" +#~ msgstr "Driehoek" + +#~ msgid "Pink Noise" +#~ msgstr "Roze ruis" + +#~ msgid "Ticks" +#~ msgstr "Aantal tikken" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussiaanse ruis" + +#~ msgid "Blue Noise" +#~ msgstr "Blauwe ruis" + +#~ msgid "Violet Noise" +#~ msgstr "Violet-ruis" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Measure Noise" +#~ msgstr "Ruisniveau meten" + +#~ msgid "Subtract Noise" +#~ msgstr "Ruis verwijderen" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Provided by" +#~ msgstr "Geleverd door" + +#~ msgid "Extended Filter" +#~ msgstr "Uitgebreid filter" + +#~ msgid "Low" +#~ msgstr "Laag" + +#~ msgid "Moderate" +#~ msgstr "Gemiddeld" + +#~ msgid "High" +#~ msgstr "Hoog" + +#~ msgid "Delay Agnostic" +#~ msgstr "Agnostische vertraging" + +#~ msgid "Very High" +#~ msgstr "Erg hoog" + +#~ msgid "Adaptive Digital" +#~ msgstr "Adaptief digitaal" + +#~ msgid "Fixed Digital" +#~ msgstr "Vastgesteld digitaal" + +#~ msgid "Detection Likelihood" +#~ msgstr "Detectieniveau" + +#~ msgid "Very Low" +#~ msgstr "Erg laag" + +#~ msgid "Use Custom Color" +#~ msgstr "Aangepaste kleur gebruiken" + +#~ msgid "Use Gradient" +#~ msgstr "Kleurverloop gebruiken" + +#~ msgid "Gradient Color" +#~ msgstr "Kleurverloop" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importeer een Impulse Response-bestand" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Kies een Impulse Response-bestand" + +#~ msgid "Aggressive Mode" +#~ msgstr "Agressieve modus" + +#~ msgid "Before" +#~ msgstr "Vóór" + +#~ msgid "After" +#~ msgstr "Na" + +#~ msgid "Loudness Range" +#~ msgstr "Bereik van geluidssterkte" + +#~ msgid "Loudness Compensator" +#~ msgstr "Geluidssterkte-compensatie" + +#~ msgid "Apply" +#~ msgstr "Toepassen" + +#~ msgid "Based on" +#~ msgstr "Gebaseerd op" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Standaard samplesnelheid" + +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgid "File" +#~ msgstr "Bestand" + +#~ msgid "Configuration" +#~ msgstr "Instellingen" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Based on a" +#~ msgstr "Gebaseerd op" + +#~ msgid "Low-pass Frequency" +#~ msgstr "Low-pass-frequentie" + +#~ msgid "Advanced" +#~ msgstr "Geavanceerd" + +#~ msgid "Apply APO Preset" +#~ msgstr "APO-voorinstelling toepassen" + +#~ msgid "Detect Silence" +#~ msgstr "Stilte herkennen" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Plug de microfoon opnieuw in om de wijzigingen aan de zwarte lijst toe te " +#~ "passen" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Herstart de speler om de wijzigingen aan de zwarte lijst toe te passen" + +#~ msgid "Muted" +#~ msgstr "Gedempt" + +#~ msgid "Distant Headphones" +#~ msgstr "Koptelefoons veraf" + +#~ msgid "Niceness" +#~ msgstr "Niceness" + +#~ msgid "Priority Type" +#~ msgstr "Soort prioriteit" + +#~ msgid "Priority" +#~ msgstr "Prioriteit" + +#~ msgid "About" +#~ msgstr "Over" + +#~ msgid "Protocol" +#~ msgstr "Protocol" + +#~ msgid "Default Sample Format" +#~ msgstr "Standaard sampleformaat" + +#~ msgid "Resamplers" +#~ msgstr "Hersamplers" + +#~ msgid "Pipeline Input" +#~ msgstr "Invoerpijplijn" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Pipeline Output" +#~ msgstr "Uitvoerpijplijn" + +#~ msgid "Block Size" +#~ msgstr "Blokgrootte" + +#~ msgid "Maximum Frequency" +#~ msgstr "Maximale frequentie" diff --git a/po/nn.po b/po/nn.po new file mode 100644 index 0000000..9e67ce4 --- /dev/null +++ b/po/nn.po @@ -0,0 +1,2501 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-06-03 20:51+0000\n" +"Last-Translator: Daniel Svindseth \n" +"Language-Team: Norwegian Nynorsk \n" +"Language: nn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizer, kompressor og andre lydeffektar" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Lydeffektar for PipeWire-applikasjonar" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limiter;compressor;reverbation;equalizer;autovolume;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Førehandsinnstillingar\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Slå på/av denne applikasjonen" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Slå på" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Liste over uteletne appar: Legg til/fjern denne applikasjonen" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Ekskluder" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Demp applikasjonen" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Endre volumet for denne applikasjonen" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Applikasjons-volum" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Hjelp" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Resett innstillingar" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Innstillingar" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Snarvegar" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Om Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Førehandsinnstillingar" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Førehandsinnstilling-meny" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Slå på/av global omveg" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Global forbipassering" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Hovudmeny" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Easy Effects-vindauge" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Applikasjonsliste" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Tom liste" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Ingen lyd-applikasjonar funne" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Resett historikk" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Mål" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Tystnad" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Maksimal historie" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referanse" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Mellombels" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Kortvarig" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrert" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Geometrisk median (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Geometrisk median (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Geometrisk median (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Geometrisk median (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Ljodstyrke" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativ" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Omfang" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Utgangsstyrke" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Inngang" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Plugin-inngangsstyrke" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Utgang" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Plugin-utgangsstyrke" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Resett" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Eining" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Namn" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Førehandsinnstilling" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Fjern denne auto-lasta førehandsinnstillinga" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Lytt" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Bland harmonikkar" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3." + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2." + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Mengd" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Overtonar" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Omfang" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Golv" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Golvverdi" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Lenkje" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Appliasjonsnamn" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Legg til i utelatne applikasjonar" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Utelatne applikasjonar" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Vis utelatne applikasjonar" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompressor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modus" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Nedover" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Oppover" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Auking" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Kompresjonsmodus" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Grense for auking" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Aukemengd" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Åtak" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Tid" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Terskel" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Åtakstid" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Åtaksgrense" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Frågang" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Frågangstid" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Frågangsgrense" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Forhold" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Kne" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Tørrnivå" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Våtnivå" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Sidekjede" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereovidde" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Kjelde" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Mellom" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Side" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Venstre" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Høgre" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min." + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Max." + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Sidekjede-kjelde" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Høgre" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Høgre" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Side" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Side" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Topp" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Lågpassfilter" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Sidekjede-modus" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Ekstern sidekjede" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Type" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Respons" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Ekstern" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Sidekjede-type" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Inndataeining" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Førforsterking" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reaktivitet" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Framomsjåing" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Sidekjede-filter" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Høgpass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frekvens" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Av" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/okt" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/okt" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/okt" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Høgpassfilter-modus" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Høgpassfilter-frekvens" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Lågpass" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Lågpassfilter-modus" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Styrke" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Kurve" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "V" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Venstre kanal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "H" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Høgre kanal" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsar" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Kombiner" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Stereovidde" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Log-skala" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Autostyrke" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Takt" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Varigheit" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Kombiner impuls-responsar" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Fyrste kjerne" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Andre kjerne" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Utdata-filnamn" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Kombinert kjernenamn" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importer impuls" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Søk" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Søk impulsfiler" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Impulsfil-liste" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Standard" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Avskjering" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Mat" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Forbipassering" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Demp" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Oppdaging" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Vid" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Del" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 del" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Frekvens 1 del" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 topp" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Frekvens 2 topp" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 styrke" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Frekvens 1 styrke" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 nivå" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Frekvens 2 nivå" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 topp Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Frekvens 2 topp Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Kraftløyse" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Funne" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Reduksjon" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Forseinking" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filterlengd" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Filterlengd" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Uteletne appar" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Band" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balanse" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Tonehøgd venstre" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Tonehøgd høgre" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Delte kanalar" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Flat respons" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Rekn ut frekvensar" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Sorter band" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importer førehandsinnstillingar" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Helling" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kvalitet" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Vidd" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Tak" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Takverdi" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Bandmodus" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Intern" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Tilgjenge" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Skildring" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Fjern denne modellfila" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Høgpass" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Band" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Resonans" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Lågpass" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Lågpass" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Bandmodus" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Gate" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Sone" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Miks" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Åtaksone start" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Frågongssone start" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "Sann topp" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Oversampling" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Linje tynn" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Linje vid" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Linje hale" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Ingen" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Halv x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Halv x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Halv x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Halv x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Halv x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Halv x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Halv x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Halv x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Halv x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Halv x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Full x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Full x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Full x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Full x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Full x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Full x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Full x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Full x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Full x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Full x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Forsterking" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Stereolenkje" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Ekstern sidekjede" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standard" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Flat" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "FFT-storleik" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Utgangsvolum" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Klipping" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Tak" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klassisk" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderne" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Bandliste" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Band 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Band 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereovidde" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Førehandsinnstilling" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Førehandsinnstillingar" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#~ msgid "Uniform" +#~ msgstr "Einsarta" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Forhold" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Terskel" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Lågpass" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Høgpass" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/okt lågpass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/okt lågpass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/okt lågpass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/okt høgpass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/okt høgpass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/okt høgpass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/okt bandpass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/okt bandpass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/okt bandpass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/okt bandsperre" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/okt bandsperre" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/okt bandsperre" + +#~ msgid "Inertia" +#~ msgstr "Tregleik" + +#~ msgid "Band Type" +#~ msgstr "Bandtype" + +#~ msgid "Band Mode" +#~ msgstr "Bandmodus" + +#~ msgid "Band Slope" +#~ msgstr "Bandhelling" diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..26b679b --- /dev/null +++ b/po/pl.po @@ -0,0 +1,3467 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the EasyEffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 14:07+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Korektor, kompresor i inne efekty audio" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efekty dźwiękowe dla aplikacji PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limiter;kompresor;pogłos;korektor;autogłośność;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "Profile" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Włącz/wyłącz tę aplikację" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Włącz" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Lista wykluczonych aplikacji: Dodaj/usuń tę aplikację" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Wyklucz" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Wycisz aplikację" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Zmień głośność tej aplikacji" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Głośność aplikacji" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Pomoc" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Resetuj Ustawienia" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Ustawienia" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Skróty" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_O EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Profile" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menu Profili" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Włącz/wyłącz globalne pomijanie" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Pomiń globalnie" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menu główne" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Okno EasyEffects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Lista aplikacji" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Pusta lista" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Brak aplikacji audio" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Wyczyść historię" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Cel" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Cisza" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Maksymalna historia" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Odnośnik" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Tymczasowe" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Krótkie" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Zintegrowane" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Średnia geometryczna (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Średnia geometryczna (MSI)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Głośność" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relatywne" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Zakres" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Wzmocnienie wyjścia" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Wejście" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Wzmocnienie wej." + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Wyjście" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Wzmocnienie wej." + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Zresetuj" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Urządzenie" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nazwa" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Szablon" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Usuń ten plik szablonu" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Słuchaj" + +# Wpleć/wmieszaj/dodaj +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Wprowadź harmoniczne" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "Trzecie" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "Drugie" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Ilość" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmoniczne" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Zakres" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Podłoga" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Podłoga" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Odnośnik" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Nazwa Aplikacji" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Programy" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Programy" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Programy" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Okno" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Tryb" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "W dół" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "W górę" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Wzmacniania" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +#, fuzzy +msgid "Compression Mode" +msgstr "Kompresor" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Próg wzmocnienia" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Siła wzmocnienia" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Atak" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Czas" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Próg" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Czas ataku" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Próg" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Wyzwolenie" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "Wyzwolenie" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Próg" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Stosunek" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Kolano" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Wzmocnienie" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Poziom" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Poziom docelowy" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Łańcuch boczny" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Tryb sterep" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Źródło" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Środek" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Strona" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Lewy" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Prawy" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Maks" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Łańcuch boczny" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Opóźnienie" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Prawy" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Strona" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Strona" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Domyślne" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Szczyt" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Filtr górnoprzepustowy" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Tryb łańcucha bocznego" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Łańcuch boczny" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Rodzaj" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Przekazywanie danych" + +# Wejście? +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Odbicie" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Zewnętrzne" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Typ łańcucha bocznego" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Urządzenie wejściowe" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Wzmocnienie wstępne" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reaktywność" + +# Podgląd, albo "patrz w przód", zapas +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Lookahead" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Łańcuch boczny" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Górnoprzepustowy" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Częstotliwość" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Wyłącz" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/okt" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/okt" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/okt" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Filtr górnoprzepustowy" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Tłumienie wysokich tonów" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Dolnoprzepustowy" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Filtr górnoprzepustowy" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Wzmocnienie" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Obwiednia" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Krzywa" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Kanał lewy" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "P" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Kanał prawy" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsy" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Połącz" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Szerokość stereo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Widmo" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Skala logarytmiczna" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Autowzmocnienie" + +# Próbkowanie? +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Częstotliwość" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Sample" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Czas trwania" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Płaska odpowiedź" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Pierwsze jądro" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Drugie jądro" + +#: data/ui/convolver_menu_combine.ui:91 +#, fuzzy +msgid "Output File Name" +msgstr "Wyjście" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Nazwa połączonego jądra" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importuj impuls" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Wyszukaj" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Płaska odpowiedź" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Płaska odpowiedź" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Domyślne" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Odcięcie" + +# Wejście? +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Feed" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Pomiń" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Wycisz" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Wykrycie" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Szeroki" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Podzielony" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "Podzielony" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Częstotliwość" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "Szczyt" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Częstotliwość" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "Wzmocnienie" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Częstotliwość" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "Poziom" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Częstotliwość" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "Szczyt Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Częstotliwość" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Swoboda" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Wykryto" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Redukcja" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Opóźnienie" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Odwróć fazę" + +# Tłumienie? +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Tłumienie" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Długość filtra" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Długość filtra" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Tłumienie szumu" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Tłumienie szumu" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Wykluczone aplikacje" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Pasma" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balans" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Łańcuch boczny" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Łańcuch boczny" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Rozłącz kanały" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Płaska odpowiedź" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Przelicz częstotliwości" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Pasma" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importuj szablony" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Jakość" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Szerokość" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Sufit" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Wartość sufitu" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Tryb pasma" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Wewnętrzne" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Dostęp" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Opis" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Usuń ten plik modela" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Dolna Wartość" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Górna wartość" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Pominięcie pasma" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Rezonans" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Dolnoprzepustowy" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Redukcja pasma" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Dolnoprzepustowy" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Korektor" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Bramka" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Strefa" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Histereza" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Miks" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Wyzwolenie" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Częstotliwość" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Nadpróbkowanie" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Szeroki" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Szeroki" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Szerokość" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Szerokość" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Szerokość" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Brak" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Połowa x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Połowa x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Połowa x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Połowa x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Połowa x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Połowa x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Połowa x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Połowa x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Połowa x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Połowa x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Pełne x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Pełne x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Pełne x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Pełne x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Pełne x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Pełne x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Pełne x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Pełne x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Pełne x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Pełne x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "Przedwzmacniacz SC" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Programy" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Wzmocnienie" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Powiązanie stereo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Łańcuch boczny" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Automatyczne poziomowanie" + +#: data/ui/limiter.ui:537 +#, fuzzy +msgid "Auto Leveling Attack" +msgstr "Wzmocnienie wej." + +#: data/ui/limiter.ui:573 +#, fuzzy +msgid "Auto Leveling Release" +msgstr "Wzmocnienie wej." + +#: data/ui/limiter.ui:608 +#, fuzzy +msgid "Auto Leveling Knee" +msgstr "Wzmocnienie wej." + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Lewy" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Prawy" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Lewy łańcuch boczny" + +#: data/ui/limiter.ui:714 +#, fuzzy +msgid "Sidechain Right" +msgstr "Łańcuch boczny" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standardowe" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Płaskie" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Rozmiar FFT" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Głośność wyjścia" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Kanały" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Sufit" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Łańcuch boczny wzmocnienia" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +#, fuzzy +msgid "Operating Mode" +msgstr "Importuj profile" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klasyczne" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Nowoczesne" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Odwróć fazę" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Lista pasm" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Pasmo 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Pasmo 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Pasmo 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Pasmo 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Pasmo 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Pasmo 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Pasmo 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Pasmo 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Koniec pasma" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Kompresor" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Pominięcie pasma" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +#, fuzzy +msgid "Band Sidechain Options" +msgstr "Łańcuch boczny" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Tryb sterep" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtr" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filtr" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Filtr" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtr górnoprzepustowy" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Filtr górnoprzepustowy" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "Przedwzmacniacz" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Wzmocnienie wej." + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Obwiednia pasma" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Redukcja pasma" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Ogólne" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Zarządzanie urządzeniami" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Użyj domyślnych" + +#: data/ui/pipe_manager_box.ui:65 +#, fuzzy +msgid "Custom Input Device" +msgstr "Urządzenie wejściowe" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Użyj domyślnych" + +#: data/ui/pipe_manager_box.ui:101 +#, fuzzy +msgid "Custom Output Device" +msgstr "Wzmocnienie wej." + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Pogłos" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Wersja nagłówka" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Próbkowanie" + +#: data/ui/pipe_manager_box.ui:149 +#, fuzzy +msgid "Minimum Quantum" +msgstr "Częstotliwość" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Maksymalne wzmocnienie" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Domyślne" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Urządzenia wyjściowe" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Szablony wyjściowe" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +#, fuzzy +msgid "Output Autoloading Presets List" +msgstr "Profile: " + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Urządzenia wejściowe" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Importuj szablony" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Importuj profile" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Moduły" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Lista modułów" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Klienci" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Lista klientów" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Testuj sygnał" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Stan" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Włączono" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Właściwości" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanały" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Oba" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Oba kanały" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Przebieg fali" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Sinus tabl." + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Biały szum" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "Szybkie wyszukiwanie" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "Wygładzanie" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Częstotliwość" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Okno" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Długość filtra" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Wysokość" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Półtony" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Odnośnik" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Odnośnik" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Usuń ten efekt" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Włącz/wyłącz ten efekt" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Zmień pozycję tego efektu" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Dodaj efekt" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Lista używanych wtyczek" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Brak efektów" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Wyszukaj wtyczki" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Lista wtyczek" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "O_gólne" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Usługa" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Uruchom usługę systemową podczas uruchamiania" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Wyłącz przy zamknięciu okna" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Audio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Limit czasu braku aktywności" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Styl" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Używaj ciemnego motywu" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experymentalne" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Okno" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "Widmo (_S)" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Kształt" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linie" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Kropki" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Punkty" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Wysokość" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Szerokość linii" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Wypełnienie" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Kolor" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +#, fuzzy +msgid "Frequency Range" +msgstr "Częstotliwość" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minimum" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maksimum" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Załaduj" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Usuń ten plik szablonu" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Importuj profile" + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Utwórz profil" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Importuj profile" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Importuj profile" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Importuj profile" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Tłumienie wysokich tonów" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Rozmiar pomieszczenia" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Mały" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Średni" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Duży" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Duży/gładki" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experymentalne" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Rozproszenie" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Przedopóźnienie" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Czas zaniku" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Odcięcie basu" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Odcięcie sopranu" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Otoczenie" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Gołe ściany" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Pokój" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Duża pusta sala" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Duża pełna sala" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importuj modele" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Wykrywanie głosu" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modele" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Standardowy model" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Lista modeli RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Model nie jest załadowany" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Aktywny model" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Standardowy model RNNoise" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Przegląd" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "Pokaż pomoc" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Pełny ekran/Przywracanie z trybu pełnoekranowego" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Zamknij okno" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Wyjdź z EasyEffects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Odszumianie" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Kontroler wzmocnienia" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Pogłos" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Start" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Kontynuuj" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Tłumienie szumu" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Poziom" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Balans wejścia" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +#, fuzzy +msgid "Softclip Level" +msgstr "Poziom" + +#: data/ui/stereo_tools.ui:128 +#, fuzzy +msgid "Stereo Matrix" +msgstr "Powiązanie stereo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Tryb sterep" + +#: data/ui/stereo_tools.ui:236 +#, fuzzy +msgid "Side Level" +msgstr "Poziom" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balans boczny" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Środkowy poziom" + +#: data/ui/stereo_tools.ui:344 +#, fuzzy +msgid "Middle Panorama" +msgstr "Panorama" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "Wzmocnienie wej." + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Opóźnienie L/R" + +#: data/ui/stereo_tools.ui:460 +#, fuzzy +msgid "Delay Left Right" +msgstr "Opóźnienie" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Baza stereo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Faza stereo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "Działające" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Zawieszone" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Spoczynek" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Tworzenie" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Błąd" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Nieznane" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "kanały" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Wyjdź z EasyEffects. Przydatne przy pracy w trybie usługi." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Załaduj profil. Przykład: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Resetuj EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Schowaj okno." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Pokaż dostępne profile." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "Wyjście (_O)" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "Wejście (_I)" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Płaska odpowiedź" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importuj plik Impulse" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Otwórz" + +#: src/convolver_menu_impulses.cpp:144 +#, fuzzy +msgid "Impulse Response" +msgstr "Płaska odpowiedź" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Wczytaj Impuls" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Usuń Impuls" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Płaska odpowiedź" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "Nie można załadować pliku Impulse" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Rejestratory" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Odtwarzacze" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Efekty" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importuj plik profilu APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Profile APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Importuj plik profilu APO" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Importuj profile" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Usuń automatyczne wczytywanie szablonu" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Wzmocnienie wej." + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Usuń" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Wzmocnienie wej." + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Dodaj" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "Zapisać?" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "Usunąć?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +#, fuzzy +msgid "Import Model File" +msgstr "Importuj profile" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Modele RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Wzmacniacz basów" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Głośność basu" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Krystalizator" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "De-Esser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Usuwanie echa" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Korektor" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Exciter" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Wzmocnienie wej." + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limiter" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizer" + +#: src/tags_plugin_name.cpp:51 +#, fuzzy +msgid "Multiband Compressor" +msgstr "Kompresor" + +#: src/tags_plugin_name.cpp:52 +#, fuzzy +msgid "Multiband Gate" +msgstr "Kompresor" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Pogłos" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Redukcja szumu" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Procesor mowy" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Narzędzia stereo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-inf" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Używanie" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtr" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtr górnoprzepustowy" + +#~ msgid "Uniform" +#~ msgstr "Równomierny" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Profile: " + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Profile: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Profile: " + +#~ msgid "infinity" +#~ msgstr "nieskończoność" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Stosunek" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Dolnoprzepustowy" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Górnoprzepustowy" + +#~ msgid "Gating" +#~ msgstr "Bramka" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/okt dolnoprzepustowy" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/okt dolnoprzepustowy" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/okt dolnoprzepustowy" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/okt górnoprzepustowy" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/okt górnoprzepustowy" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/okt górnoprzepustowy" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/okt środkowoprzepustowy" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/okt środkowoprzepustowy" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/okt środkowoprzepustowy" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/okt Środkowozaporowy" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/okt środkowozaporowy" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/okt środkowozaporowy" + +#~ msgid "Inertia" +#~ msgstr "Inercja" + +#~ msgid "Band Type" +#~ msgstr "Rodzaj pasma" + +#~ msgid "Band Mode" +#~ msgstr "Tryb pasma" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Głośność" + +#~ msgid "High Speed" +#~ msgstr "Wysoka prędkość" + +#~ msgid "High Quality" +#~ msgstr "Wysoka jakość" + +#~ msgid "Formant" +#~ msgstr "Formant" + +#~ msgid "Shifted" +#~ msgstr "Zmienione" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Profile" + +#~ msgid "Crisp" +#~ msgstr "Czystość" + +#~ msgid "Mixed" +#~ msgstr "Zmiksowane" + +#~ msgid "Smooth" +#~ msgstr "Gładko" + +#~ msgid "Detector" +#~ msgstr "Wykrywacz" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresor" + +#~ msgid "Soft" +#~ msgstr "Miękkie" + +#~ msgid "Phase" +#~ msgstr "Faza" + +#~ msgid "Independent" +#~ msgstr "Niezależne" + +#~ msgid "Cents" +#~ msgstr "Centy" + +#~ msgid "Octaves" +#~ msgstr "Oktawy" + +#~ msgid "_Manual" +#~ msgstr "_Instrukcja" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Otwórz przewodnik po EasyEffects" + +#, fuzzy +#~ msgid "High Pass" +#~ msgstr "Filtr górnoprzepustowy" + +#, fuzzy +#~ msgid "Low Pass" +#~ msgstr "Dolnoprzepustowy" + +#~ msgid "Cancel" +#~ msgstr "Anuluj" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Programy" + +#~ msgid "Frame Size" +#~ msgstr "Rozmiar ramki" + +#, fuzzy +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "Włącz/wyłącz globalne ominięcie" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Dolnoprzepustowy" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Równomierny" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Przedopóźnienie" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Poziom" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Poziom" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Poziom docelowy" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Poziom docelowy" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Poziom tłumienia" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efekty dźwiękowe dla aplikacji PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Redukcja szumu" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Profile" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Output Presets: " +#~ msgstr "Presety wyjściowe: " + +#, fuzzy +#~ msgid "Input Presets: " +#~ msgstr "Presety wejściowe: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split 1/2" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Split 2/3" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Split 3/4" +#~ msgstr "Podzielony" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Sub Band" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Wzmocnienie" + +#~ msgid "Max Reduction" +#~ msgstr "Redukcja" + +#, fuzzy +#~ msgid "Low Band" +#~ msgstr "Dolnoprzepustowy" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Wzmocnienie" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Mid Band" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Wzmocnienie" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "High Band" +#~ msgstr "Górnoprzepustowy" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Wyzwolenie" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Próg" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Pasma" + +# Uzupełnienie wzmocnienia/ nadrobienie wzmocnienia, wypełnienie +# czasem po prostu Output, więc Wyjście albo Wzmocnienie +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Wzmocnienie" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Ilość" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Ilość" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects to zaawansowane narzędzie do manipulacji dźwiękiem. Zawiera " +#~ "między innymi korektor, limiter, kompresor i narzędzie do generowania " +#~ "pogłosu. Uzupełnieniem tego jest wbudowany analizator widma." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects jest następcą PulseEffects. EasyEffects wspiera jedynie " +#~ "serwer audio PipeWire. Użytkownicy PulseAudio powinni zamiast tego użyć " +#~ "PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Ponieważ EasyEffects używa domyślnego serwera dźwięku PipeWire, będzie on " +#~ "działał z większością, jeśli nie wszystkimi używanymi programami. " +#~ "Wszystkie obsługiwane programy są prezentowane w oknie głównym, gdzie " +#~ "każdy z nich może być aktywowany indywidualnie." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Oprócz sterowania wyjściem dźwiękowym, EasyEffects jest w stanie " +#~ "zastosować efekty do urządzenia wejściowego, takiego jak mikrofon. Jest " +#~ "to przydatne na przykład przy nagrywaniu dźwięku, ale sprawdza się " +#~ "również podczas rozmów głosowych." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Po uruchomieniu programu EasyEffects zapamiętuje on konfigurację użytą " +#~ "podczas ostatniej sesji. Możliwe jest także zapisanie wszystkich " +#~ "bieżących ustawień w postaci profili." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "Główna strona z widocznymi dwoma programami odtwarzającymi dźwięk" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "" +#~ "Strona wzmacniacza basów z widocznymi elementami sterowania dźwiękiem" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "Strona konwolwera przedstawiająca elementy sterujące dźwiękiem" + +#~ msgid "This release adds the following features:" +#~ msgstr "W tym wydaniu dodano następujące funkcje:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Pasma" + +#, fuzzy +#~ msgid "Many translation updates" +#~ msgstr "Uaktualnione tłumaczenia" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Wprowadzono nowe ustawienie umożliwiające użytkownikowi wybranie limitu " +#~ "czasu bezczynności dla odtwarzaczy. Jeśli żaden klient nie odtwarza " +#~ "dźwięku" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "do lub nagrywanych z naszych urządzeń, których filtry zostaną usunięte po " +#~ "upływie limitu czasu. Ma to na celu zapewnienie" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "" +#~ "tego, że nie będziemy marnować mocy procesora na przetwarzanie ciszy." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "Wtyczka automatycznej regulacji wzmocnienia umożliwia teraz użytkownikowi " +#~ "wybór, która z trzech głośności jest używana do obliczania średniej" + +#~ msgid "mean." +#~ msgstr "geometrycznej." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "Wtyczka automatycznej regulacji wzmocnienia umożliwia teraz ustawienie " +#~ "maksymalnej historii i nie używa już trybu histogramu `libebur128`." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Powinno to zapobiec przypadkom, gdy `Zintegrowana` głośność utknie na " +#~ "zawsze w tej samej wartości." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "Ikona EasyEffects została uaktualniona w taki sposób, że powinna być " +#~ "widoczna w pulpitach QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "To wydanie poprawia następujący błąd:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "Opcja wiersza poleceń, która zwraca stan globalnego obejścia, działa " +#~ "ponownie." + +#~ msgid "This release adds the following feature:" +#~ msgstr "W tym wydaniu dodano następującą funkcję:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Filtr krzyżowy powinien lepiej radzić sobie z dynamicznymi przełącznikami " +#~ "opóźnień w systemie PipeWire. W takich sytuacjach nie powinny już " +#~ "występować skoki poziomu głośności." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Naprawiono błąd, który uniemożliwiał prawidłowe działanie mikrofonów " +#~ "monofonicznych z EasyEffects" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Wsparcie dla następnej wersji PipeWire `0.3.44`" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Filtr automatycznej regulacji wzmocnienia powinien lepiej radzić sobie z " +#~ "dynamicznymi przełącznikami opóźnień w systemie PipeWire. W takich " +#~ "sytuacjach nie powinny już występować skoki poziomu głośności." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Dodaliśmy opcję, która umożliwia zresetowanie głośności i stanu " +#~ "wyciszenia naszych urządzeń wirtualnych podczas uruchamiania EasyEffects. " +#~ "Powinno to pomóc w przypadkach, gdy z nieznanych przyczyn nasze " +#~ "urządzenia są wyciszane przez serwer audio." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Lepsza obsługa uśpienia komputera." + +#~ msgid "Updated translations" +#~ msgstr "Uaktualnione tłumaczenia" + +#~ msgid "Average" +#~ msgstr "Średnia" + +#~ msgid "Failed" +#~ msgstr "Niepowodzenie" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Użyj domyślnych" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Kompresor" + +#~ msgid "Import Presets" +#~ msgstr "Importuj profile" + +#~ msgid "Start Service at Login" +#~ msgstr "Uruchom usługę przy logowaniu" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibracja mikrofonu" + +#~ msgid "Plugins" +#~ msgstr "Wtyczki" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Włącz" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Włącz" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Oczekiwanie" + +#~ msgid "Faster" +#~ msgstr "Szybszy" + +#~ msgid "Preserve Formant" +#~ msgstr "Zachowaj formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Wzmocnienie wej." + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanały" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Podłoga" + +#~ msgid "Output Effects" +#~ msgstr "Efekty wyjściowe" + +#~ msgid "Settings" +#~ msgstr "Ustawienia" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Ustawienia" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Kalibracja" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Sygnały testowe" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Sygnały testowe" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Widmo" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Widmo" + +#~ msgid "Spectrum Color" +#~ msgstr "Kolor widma" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Redukcja wzmocnienia" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Wysokość" + +#~ msgid "Dry" +#~ msgstr "Suchy" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "Poziom" + +#~ msgid "Input Limiter" +#~ msgstr "Limiter wejścia" + +#~ msgid "Calibration" +#~ msgstr "Kalibracja" + +#~ msgid "Limit" +#~ msgstr "Limit" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Efekty dźwiękowe dla programu Pulseaudio" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Efekty dźwiękowe dla programu Pulseaudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibracja mikrofonu" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Prostokąt" + +#~ msgid "Saw" +#~ msgstr "Piła" + +#~ msgid "Triangle" +#~ msgstr "Trójkąt" + +#~ msgid "Pink Noise" +#~ msgstr "Różowy szum" + +# tyknięcia, kliknięcia +#~ msgid "Ticks" +#~ msgstr "Działki" + +#~ msgid "Gaussian Noise" +#~ msgstr "Szum Gaussa" + +#~ msgid "Blue Noise" +#~ msgstr "Szum niebieski" + +#~ msgid "Violet Noise" +#~ msgstr " Szum fioletowy" + +#~ msgid "Volume" +#~ msgstr "Głośność" + +#~ msgid "Measure Noise" +#~ msgstr "Mierz szum" + +#~ msgid "Subtract Noise" +#~ msgstr "Odejmij szum" + +#~ msgid "Extended Filter" +#~ msgstr "Rozszerzony Filtr" + +#~ msgid "Low" +#~ msgstr "Nisko" + +#~ msgid "Moderate" +#~ msgstr "Średni" + +#~ msgid "High" +#~ msgstr "Wysoki" + +#~ msgid "Delay Agnostic" +#~ msgstr "Niezależny od opóźnienia" + +#~ msgid "Very High" +#~ msgstr "Bardzo wysokie" + +#~ msgid "Adaptive Digital" +#~ msgstr "Cyfrowy adaptacyjny" + +#~ msgid "Fixed Digital" +#~ msgstr "Cyfrowy ustalony" + +#~ msgid "Detection Likelihood" +#~ msgstr "Szansa wykrycia" + +#~ msgid "Very Low" +#~ msgstr "Bardzo niskie" + +#~ msgid "Use Custom Color" +#~ msgstr "Użyj własnego koloru" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Kompresor" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Domyślne" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Kalibracja" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Przelicz częstotliwości" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Ustawienia zaawansowane" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Profile" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Wykrycie" + +#~ msgid "Muted" +#~ msgstr "Wyciszony" + +#~ msgid "Distant Headphones" +#~ msgstr "Odległe słuchawki" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Częstotliwość" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Resampler" + +#~ msgid "Buffer" +#~ msgstr "Bufor" + +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Rozmiar pomieszczenia" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#~ msgid "paused" +#~ msgstr "zatrzymany" + +#~ msgid "playing" +#~ msgstr "gra" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Importuj profile" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Redukcja wzmocnienia" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..4ebe578 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,3673 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# Wellington Wallace Miguel Melo , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: EasyEffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-07-15 03:50+0000\n" +"Last-Translator: Fernando Lopes <118869201+plasmus777@users.noreply.github." +"com>\n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.0-dev\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizador, Compressor e Outros Efeitos de Áudio" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Efeitos de áudio para aplicativos que utilizam PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitador;compressor;reverberação;equalizador;autovolume;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Predefinições\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Habilitar/Desabilitar este aplicativo" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Habilitar" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Lista de aplicativos excluídos: Adicionar/remover este aplicativo" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Excluir" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Silenciar o Aplicativo" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Alterar o volume desse aplicativo" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Volume do Aplicativo" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Ajuda" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Redefinir as Configurações" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Preferências" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Atalhos" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Sobre Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Predefinições" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Menu de Predefinições" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "ativar/desativar o uso do aplicativo no sistema" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Bypass Global" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Menu Principal" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Janela do Easy Effects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Lista de Aplicativos" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Lista vazia" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Nenhum aplicativo de áudio disponível" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Apagar Histórico" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Alvo" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Silencio" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Histórico máximo" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referência" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentâneo" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Curto Prazo" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrada" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Média Geométrica (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Média Geométrica (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Média Geométrica (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Média Geométrica (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Sonoridade" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativo" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Alcance" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Ganho de Saída" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Entrada" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Ganho de Entrada do Plugin" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Saída" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Ganho de Saída do Plugin" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Resetar" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Dispositivo" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nome" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Perfil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Predefinição" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Remover este arquivo de predefinição" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Escutar" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Mistura de Harmônicos" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3º" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2º" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Quantidade" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmônico" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Escopo" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Piso" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Valor do piso" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Ligação" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Nome do Aplicativo" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Adicionar aos aplicativos excluídos" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Lista de aplicativos excluídos" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Mostrar aplicativos excluídos" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Mostrar Janela Nativa" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "compressor de áudio" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Modo" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Para Baixo" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Para Cima" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Impulsionando" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Modo de Compressão" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Limiar de Impulso" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Valor do reforço" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Ataque" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Tempo" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Limiar" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Tempo de Ataque" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Limiar de Ataque" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Liberação" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Tempo de liberação" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Limiar de liberação" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Razão" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Joelho" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Ganho de Saída" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Nível Seco" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Nível Molhado" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Cadeia Lateral" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Modo Stereo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Fonte" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Meio" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Lado" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Esquerda" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Direita" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Min" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Máx" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Fonte da cadeia lateral" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Atraso na Esquerda e Direita" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Direita" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Lado" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Lado" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Entrada Padrão" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Pico" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Filtro Passa-Baixo" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Média Móvel Simples" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Modo de cadeia lateral" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Cadeia Lateral Externa" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tipo" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Alimento-Adiante" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Retorno" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Externo" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Tipo de cadeia lateral" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Dispositivo de Entrada" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Pré-Amplificação" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reatividade" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Antevisão" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Filtros da cadeia lateral" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Passa-alta" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frequência" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Desligado" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Modo de Filtro Passa-Alta" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Frequência do Filtro Passa-Alta" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Passa-Baixa" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Modo de Filtro Passa-Baixa" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Ganho" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Envolve" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curva" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Canal esquerdo" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Canal direito" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulsos" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Combinar" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Largura do Stereo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Espectro" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Escala logarítmica" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Ganho Automático" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Taxa" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Amostras" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Duração" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Combinar Respostas de Impulso" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Primeiro Núcleo" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Segundo Núcleo" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Nome do Arquivo de Saída" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Nome do Núcleo Combinado" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importar Impulso" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Buscar" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Importar Arquivo com a Resposta de Impulso" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Arquivo com o Impulso" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Padrão" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Corte" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Alimentação" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Ignorar" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Mudo" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detecção" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Amplo" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Separado" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "Divisão F1" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Divisão da Frequência 1" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "Pico F2" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Pico da Frequência 2" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "Ganho F1" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Ganho da Frequência 1" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "Nível F2" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Nível da Frequência 2" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "Pico Q F2" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Pico Q da Frequência 2" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Frouxidão" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detectado" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Redução" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Atraso" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inverter Fase" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Atenuação" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Comprimento do filtro" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Comprimento do filtro" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Supressão de Eco Residual" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Supressão de Eco no Canto Final" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Aplicativos excluídos" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bandas" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balanço" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Frequência Esquerda" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Frequência Direita" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Canais Separados" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Resposta Plana" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calcular Frequências" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Ordenar Bandas" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importar Predefinições" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Inclinação" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Sozinho" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Qualidade" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Largura" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Teto" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Valor do Teto" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Modo de Banda" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Interno" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Acesso" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Descrição" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Remover este arquivo modelo" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Low Shelf" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "High Shelf" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Sino" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Ignorar a Banda" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Rejeita-faixa" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Ressonância" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Passa-Baixa" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Redução da Banda" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Passa-Tudo" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Equalizador" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Portão" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Zona" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Histérese" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Mistura" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Início da Zona de Ataque" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Início da Zona de Liberação" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "Pico Verdadeiro" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Sobreamostragem" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Dither (Distorsão)" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Herm Fino" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Herm Amplo" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Herm final" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Herm Pato" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Exp Fino" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Exp Amplo" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Cauda de Exp" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Exp Pato" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Linha Fina" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Linha Larga" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Cauda da Linha" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Linha Pato" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Nenhuma" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Metade x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Metade x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Metade x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Metade x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Metade x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Metade x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Metade x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Metade x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Metade x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Metade x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Completa x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Completa x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Completa x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Completa x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Completa x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Completa x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Completa x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Completa x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Completa x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Completa x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "SC PreAmp (Pré Amplificador)" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Pré-amplificação de cadeia lateral" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Impulso" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Elo Stereo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Cadeia Lateral Externa" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Fonte da Cadeia Lateral Externa" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Ganho Automático" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Ataque do Ganho Automático" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Liberação do Ganho Automático" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Joelho do Ganho Automático" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Ganho Esquerdo" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Ganho Direito" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Cadeia Lateral Esquerda" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Cadeia Lateral Direita" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Padrão" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Plano" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Tamanho do FFT" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Volume de Saída" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Corte" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Teto" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Impulso de Cadeia Lateral" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "Rosa BT" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "Rosa MT" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "Marrom BT" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "Marrom MT" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Modo operacional" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Clássico" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Moderno" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Inverter Fase" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Lista de Bandas" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Banda 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Banda 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Banda 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Banda 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Banda 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Banda 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Banda 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Banda 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Início da Banda" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Fim da Banda" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Modo de Compressão das Bandas" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Ignorar a Banda" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Opções de Cadeia Lateral das Bandas" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Modo Stereo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtro" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Filtro Corte-Baixo" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Frequência do Filtro Corte-Baixo" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtro Corte-Alto" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Frequência do Filtro Corte-Alto" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "PréAmp" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Ganho da Banda" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Envelope da Banda" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Curva da Banda" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Redução da Banda" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Geral" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Gerenciamento de Dispositivos" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"É recomendado NÃO definir a Pia/Fonte (Sink/Source) do Easy Effects como " +"Dispositivo Padrão em aplicações externas (p.e. Definições do Gnome ou " +"Definições de Sistema do Plasma)." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Usar Entrada Padrão" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Dispositivo de Entrada Personalizado" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Usar Saída Padrão" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Dispositivo de Saída Personalizado" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Informações do Servidor" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Versão do Cabeçalho" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Versão de biblioca" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Taxa de Amostragem" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Quantum Mínimo" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Quantum Máximo" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Quantum Padrão" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Carregamento Automático de Definições" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Dispositivos de Saída" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Predefinições de Saída" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Criar Associação" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Adicionar Carregamento Automático de Definições de Saída" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Lista de Predefinições de Saída" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Dispositivos de Entrada" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Predefinições de Entrada" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Adicionar Carregamento Automático de Definições de Entrada" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Lista de Predefinições de Entrada" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Módulos" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Lista de Módulos" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clientes" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Lista de Clientes" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Sinal de Teste" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Estado" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Habilitado" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Propriedades" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canais" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Ambos" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Ambos Canais" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Forma de Onda" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Onda Senoidal" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Ruído Branco" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Escopo de Frequências" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Janela" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Comprimento do filtro" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Altura" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitons" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Referência" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Referência" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Remover este efeito" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Habilitar/desabilitar este efeito" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Alterar a posição deste efeito" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Adicionar Efeito" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Lista de Plugins Utilizados" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Sem efeitos" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Fluxo de Áudio Não Alterada" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Procurar Pugin" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Lista de Plugins" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Geral" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Serviço" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Iniciar Serviço com o Sistema" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Desligar ao Fechar Janela" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Áudio" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Processar Todas as Saídas" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Processar Todas as Entradas" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Ignorar Fluxos do Monitor de Dispositivos" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Usar Volume Cúbico" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Tempo de Esgotamento por Inatividade" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "Atualizar o intervalo (Medidores de nível e Espectro)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Estilo" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Usar Tema Escuro" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Esconder Menus em Cliques Externos" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimental" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Mostrar Janela Nativa" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Espectro" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Forma" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Barras" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linhas" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Pontos" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Pontos" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Altura" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Largura da Linha" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Preencher" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Mostrar Borda em Barras" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Cantos Arredondados" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Cor" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Linhas e Barras" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Rótulos dos Eixos" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Escopo de Frequências" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Mínimo" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Máximo" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Carregar" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "Descarte as definições atuais e carregue esta predefinição" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Salvar Configurações atuais para este arquivo de predefinição" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Remover este arquivo de predefinição" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Novo Nome de Predefinição de Entrada" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Criar uma nova predefinição" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Importar uma predefinição" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Pesquisar Predefinições de Entrada" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Lista de Predefinições de Entrada" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Amortecimento de Alta Frequência" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Tamanho do quarto" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Pequeno" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Médio" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Grande" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Túnel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Grande/Suave" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difusão" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pré Atraso" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Tempo de Decaimento" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Corte de Grave" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Corte de Agudo" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambiente" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Paredes Vazias" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Quarto" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Grande Salão Vazio" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Discoteca" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Grande Salão Ocupado" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importar Modelo" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Detecção de Voz" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modelos" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Modelo Padrão" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Lista de Modelos RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Modelo Não Carregado" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Modelo Ativo" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Modelo RNNoise Padrão" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Visão Geral" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Tela Cheia/Restaurar de Tela Cheia" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Fechar a Janela" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Sair do Easy Effects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Diminuir Ruído" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Controle de Ganho Automático" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Diminuir Reverberação" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Probabilidade de Atividade de Voz" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Iniciar" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Continuar" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Supressão de Ruído" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Nível" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Balanço de Entrada" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Corte SuaveClipe Macio" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Nível de Corte Suave" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matriz Stereo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "ED > ED (Stereo Padrão)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "ED > ML (Stereo para Meio-Lado)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "ML > ED (Meio-Lado para Stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "ED > EE (Canal Esquerdo Mono)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "ED > DD (Canal Direito Mono)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "ED > E+D (Soma Mono E+D)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "ED > DL (Alternar Canais Stereo)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Modo Stereo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Nível Lateral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balanço Lateral" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Nível do Meio" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panorama do Meio" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Ganho de Saída" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Atraso E/D" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Atraso na Esquerda e Direita" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Base Stereo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fase Stereo" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "Correndo" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Suspenso" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Parado" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Criando" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Erro" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Desconhecido" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "canais" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Sair do EasyEffects. Útil quando executando em modo de serviço." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Carregar uma predefinição. Exemplo: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Redefinir o Easy Effects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Ocultar a janela." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Global bypass. 1 para habilitar 2 para desabilitar e 3 para verificar o " +"status" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Mostrar predefinições disponíveis." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Saída" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "Entrada" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "O arquivo não está regular" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "O arquivo de impulso pode estar corrompido ou é não é suportado" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Apenas arquivos de impulso stereo são suportados" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Arquivo de impulso não importado" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importar Arquivo com a Resposta de Impulso" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Abrir" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Resposta de Impulso" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Carregar Impulso" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Remover Impulso" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Nenhum arquivo de impulso carregado" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Não Foi Possível Carregar o Arquivo com o Impulso" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Gravadores" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Reprodutores" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Efeitos" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importar Predefinições do APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Predefinições do APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"Predefinição APO não foi carregada: Talvez este formato de arquivo não seja " +"suportado. Por favor, verifique o conteúdo do mesmo." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "Importar Predefinições do GraphicEQ" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "Predefinições do GraphicEQ" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"O arquivo de predefinição do GraphicEQ não foi carregado. Talvez o formato " +"do arquivo esteja errado. Por favor, verifique o conteúdo." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Remover Predefinições Automaticamente Carregadas" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "Medidor Do Nível De Saída" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Remover" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Dispositivo de Saída" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Adicionar" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Modelo Selecionado Não Carregado. O Formato Pode Ser Não Suportado. Usando o " +"Modelo Padrão." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importar Arquivo de Modelo" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Modelos RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Reforçador de Graves" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Sonoridade Grave" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolução" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed (filtro)" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristalizador" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser (filtro)" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Cancelador de Eco" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Equalizador" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitador" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Medidor Do Nível De Saída" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limitador" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizador" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compressor Multibandas" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Gate Multibandas" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Reverberação" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Redução de Ruído" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Processador de Conversa" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Ferramentas Stereo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} Não Disponível" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-inf" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Usando" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Filtro Corte-Baixo" + +#~ msgid "High-Cut Filter" +#~ msgstr "Filtro Corte-Alto" + +#~ msgid "Uniform" +#~ msgstr "Uniforme" + +#~ msgid "New Output Preset Name" +#~ msgstr "Novo Nome de Predefinição de Saída" + +#~ msgid "Search Output Preset" +#~ msgstr "Pesquisa de Predefinições de Saída" + +#~ msgid "Output Presets List" +#~ msgstr "Lista de Predefinições de Saída" + +#~ msgid "infinity" +#~ msgstr "infinito" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Razão" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Passa-Baixa" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Passa-alta" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Passa-Baixa" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Passa-Baixa" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Passa-Baixa" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Passa-Alta" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Passa-Alta" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Passa-Alta" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Passa-Banda" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Passa-Banda" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Passa-Banda" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Rejeita-Faixa" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Rejeita-Faixa" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Rejeita-Faixa" + +#~ msgid "Inertia" +#~ msgstr "Inércia" + +#~ msgid "Band Type" +#~ msgstr "Tipo de banda" + +#~ msgid "Band Mode" +#~ msgstr "Modo de Banda" + +#~ msgid "Band Slope" +#~ msgstr "Inclinação da banda" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Sonoridade" + +#~ msgid "High Speed" +#~ msgstr "Alta Velocidade" + +#~ msgid "High Quality" +#~ msgstr "Alta Qualidade" + +#~ msgid "High Consistency" +#~ msgstr "Alta Consistência" + +#~ msgid "Formant" +#~ msgstr "Formante" + +#~ msgid "Shifted" +#~ msgstr "Deslocado" + +#~ msgid "Preserved" +#~ msgstr "Preservado" + +#~ msgid "Transients" +#~ msgstr "Transientes" + +#~ msgid "Crisp" +#~ msgstr "Nítido" + +#~ msgid "Mixed" +#~ msgstr "Misturado" + +#~ msgid "Smooth" +#~ msgstr "Suave" + +#~ msgid "Detector" +#~ msgstr "Detector" + +#~ msgid "Compound" +#~ msgstr "Composto" + +#~ msgid "Percussive" +#~ msgstr "Percussivo" + +#~ msgid "Soft" +#~ msgstr "Suave" + +#~ msgid "Phase" +#~ msgstr "Estágio" + +#~ msgid "Laminar" +#~ msgstr "Laminar" + +#~ msgid "Independent" +#~ msgstr "Independente" + +#~ msgid "Cents" +#~ msgstr "Centavos" + +#~ msgid "Octaves" +#~ msgstr "Oitavas" + +#~ msgid "_Manual" +#~ msgstr "_Manual" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Abrir o Manual do Easy Effects" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} Não Está Instalado no Sistema" + +#~ msgid "High Pass" +#~ msgstr "Passa Altas" + +#~ msgid "Low Pass" +#~ msgstr "Passa-Baixa" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid " PreAmplification" +#~ msgstr " PréAmplificação" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Fechar (Pressione ESC)" + +#~ msgid "Frame Size" +#~ msgstr "Tamanho do Quadro" + +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "" +#~ "Habilitar/desabilitar\n" +#~ " todos os efeitos" + +#~ msgid " Low-Pass" +#~ msgstr " Passagem Baixa" + +#~ msgid " Uniform" +#~ msgstr " Uniforme" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Pré Atraso" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Canal direito" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Nível" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Nível" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Nível Alvo" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Nível Alvo" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Nível de Supressão" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efeitos de audio para Programas que utilizam PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Redução de Ruído" + +#~ msgid "Load APO Preset" +#~ msgstr "Carregar Predefinições APO" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Separado" + +#~ msgid "Split 1/2" +#~ msgstr "Disivão 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frequência" + +#~ msgid "Split 2/3" +#~ msgstr "Disivão 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frequência" + +#~ msgid "Split 3/4" +#~ msgstr "Disivão 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frequência" + +#~ msgid "Sub Band" +#~ msgstr "Banda" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Ganho de Saída" + +#~ msgid "Max Reduction" +#~ msgstr "Redução" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "Low Band" +#~ msgstr "Banda Baixa" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Ganho de Saída" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "Mid Band" +#~ msgstr "Banda Média" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Ganho de Saída" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "High Band" +#~ msgstr "Banda Alta" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Ignorar" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Ataque" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Liberação" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Limiar" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Bandas" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Ganho de Saída" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redução de Ganho" + +#~ msgid "Output Presets: " +#~ msgstr "Predefinições de Saída: " + +#~ msgid "Input Presets: " +#~ msgstr "Predefinições de Entrada: " + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Quantidade" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Quantidade" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects é uma ferramenta avançada de edição de áudio. Ele inclui " +#~ "equalizador, limitador, compressor e um plugin de reverberação. Estas " +#~ "ferramentas são complementadas por um analisador de espectro." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects é o sucessor do PulseEffects. EasyEffects suporta apenas o " +#~ "PipeWire como servidor de áudio. Os usuários do PulseAudio devem usar o " +#~ "PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Como o EasyEffects usa o servidor de som PipeWire, ele funcionará com a " +#~ "maioria, se não todos os aplicativos que você usa. Todos os aplicativos " +#~ "suportados são apresentados na janela principal, onde cada um pode ser " +#~ "ativado individualmente." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Além de manipular a saída de som, o EasyEffects é capaz de aplicar " +#~ "efeitos a um dispositivo de entrada, como um microfone. Isso é, por " +#~ "exemplo, útil na gravação de áudio, mas também funciona bem durante " +#~ "conversas de voz." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Quando o EasyEffects for iniciado, ele lembrará convenientemente a " +#~ "configuração usada na última sessão. Também é possível salvar todas as " +#~ "configurações atuais como perfis." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "A página principal mostrando dois aplicativos de saída de áudio" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "A página do aprimoramento de graves mostrando controles de áudio" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "A página de convolução mostrando os controles de áudio" + +#~ msgid "This release adds the following features:" +#~ msgstr "Esta versão adiciona os seguintes recursos:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Este lançamento corrige os seguintes bugs:" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "A interface do plugin de tom foi melhorada" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "" +#~ "O ícone do nosso aplicativo é agora compatível com ambientes que usam QT" + +#~ msgid "" +#~ "Our blocklist code will use the `application.id` tag if the stream sets it" +#~ msgstr "" +#~ "Nosso código de lista de bloqueio usará a tag `application.id` se o fluxo " +#~ "a definir" + +#~ msgid "" +#~ "In order to avoid problems with the mouse scroll the entries in the " +#~ "applications list shown in our `Players/Recorders`" +#~ msgstr "" +#~ "Para evitar problemas com mouse, role as entradas na lista de aplicativos " +#~ "mostrada em nossos `Reprodutores/Gravadores`" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "Tab não mostram mais uma escala de volume. Mais detalhes sobre o problema " +#~ "e a solução para ele podem ser encontrados em #1211" + +#~ msgid "and #1427" +#~ msgstr "e #1427" + +#~ msgid "" +#~ "When no application is available for display in the `Players/Recorders` a " +#~ "message will be shown to the user" +#~ msgstr "" +#~ "Quando nenhum aplicativo estiver disponível para exibição em " +#~ "`Reprodutores/Gravadores` uma mensagem será mostrada ao usuário" + +#~ msgid "Many translation updates" +#~ msgstr "Muitas atualizações de tradução" + +#, fuzzy +#~ msgid "" +#~ "Fixed a bug where EasyEffects crashed when the number of points displayed " +#~ "in the spectrum was changed while" +#~ msgstr "" +#~ "Corrigido um bug em que o EasyEffects travava quando o número de pontos " +#~ "exibidos no espectro era alterado enquanto" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "nosso pipeline estava ativo e o widget de espectro estava visível" + +#~ msgid "" +#~ "The pipeline latency value displayed in our window could be wrong in some " +#~ "situations. This was fixed." +#~ msgstr "" +#~ "O valor de latência do pipeline exibido em nossa janela pode estar errado " +#~ "em algumas situações. Isso foi corrigido." + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Há uma nova configuração que permite ao usuário selecionar um tempo " +#~ "limite de inatividade para o pipeline. Quando nenhum cliente está " +#~ "reproduzindo" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "ou gravando de nossos dispositivos, os filtros serão desconectados após o " +#~ "tempo limite ser alcançado. Isso é feito para garantir que" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "não desperdiçamos energia da CPU processando silêncio." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "O plugin de ganho automático agora permite que o usuário selecione quais " +#~ "dos três tipos de sonoridade são usados para calcular a" + +#~ msgid "mean." +#~ msgstr "média geométrica." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "O plugin de ganho automático agora permite que o histórico máximo seja " +#~ "definido e não usa mais o modo de histograma `libebur128`." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Isto deve evitar os casos em que o ruído \"Integrado\" fica preso para " +#~ "sempre no mesmo valor." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "O ícone do EasyEffects foi atualizado de uma forma que deve torná-lo " +#~ "visível nos desktops QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Esta versão corrige o seguinte bug:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "A opção de linha de comando que retorna o estado de desvio global está " +#~ "funcionando novamente." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Esse lançamento adiciona o seguinte recurso:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "O filtro de alimentação cruzada deve lidar melhor com os interruptores de " +#~ "latência dinâmica PipeWire's. Os saltos no nível de volume não devem mais " +#~ "acontecer nestas situações." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Corrigido um bug que impedia que os microfones mono funcionassem " +#~ "corretamente com o EasyEffects" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Suporte à próxima versão do PipeWire `0.3.44`" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "O filtro de ganho automático deve lidar melhor com as opções de latência " +#~ "dinâmica do PipeWire. Saltos no nível de volume não devem mais acontecer " +#~ "nessas situações." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Adicionamos uma opção que permite os estados de volume e mudo de nossos " +#~ "dispositivos virtuais serem reiniciados quando EasyEffects inicia. Isto " +#~ "deve ajudar nos casos em que nossos dispositivos são silenciados pelo " +#~ "servidor de áudio por razões desconhecidas." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Melhor suporte para suspensão do computador." + +#~ msgid "Updated translations" +#~ msgstr "Traduções atualizadas" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Corrigido um bug em que tentar criar um perfil de carregamento automático " +#~ "sem ter predefinições causava o travamento do aplicativo." + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "Corrigido um bug em que definir uma banda de equalizador `qualidade` para " +#~ "`zero` levaria a uma falha do aplicativo." + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita é usado para criar algumas partes de nossa janela e para lidar " +#~ "com a alternância entre temas claros e escuros." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "O menu de configurações foi redesenhado usando widgets LibAdwaita." + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "O recurso de importação predefinida do equalizador APO foi aprimorado " +#~ "para aplicar não apenas o filtro Bell, mas também outros suportados" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "A função `Redefinir todas as configurações` em nosso menu deve funcionar " +#~ "no Flatpak agora." + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "Temos uma nova opção que permite ao usuário desabilitar nossos menus " +#~ "`auto-ocultar`. Isso pode ajudar a solucionar alguns bugs que os menus " +#~ "popover têm atualmente no gtk4." + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "Análise mais robusta para importar predefinições de APO salvas com " +#~ "vírgula como separador de milhares na banda de frequência central." + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "A biblioteca fmt é uma nova dependência, pelo menos enquanto os " +#~ "compiladores c++ não implementarem seus recursos. A expectativa é que " +#~ "isso aconteça nos próximos anos." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM e GLIBMM não são mais uma dependência. Agora usamos gtk4 " +#~ "diretamente." + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "Agora é possível combinar respostas de impulso na interface Convolução. " +#~ "Um novo arquivo de impulso é gerado e deve estar visível na lista de " +#~ "impulsos." + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "Aprimorados os desenhos de `eixo x` aprimorados em nossas plotagens. " +#~ "Agora o número de rótulos é ajustado dinamicamente dependendo da largura " +#~ "da nossa janela." + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "A documentação foi atualizada refletindo os novos recursos do " +#~ "EasyEffects. Referências antigas sobre PulseEffects foram removidas. O " +#~ "botão de documentação foi adicionado na seção de menu." + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "Quando um botão giratório é preenchido com um valor fora do intervalo, " +#~ "agora ele é atualizado com o valor mais baixo/mais alto em vez de " +#~ "redefinir para o anterior." + +#~ msgid "" +#~ "The application window now remembers the maximized state and restores it " +#~ "on the next opening event." +#~ msgstr "" +#~ "A janela do aplicativo agora lembra o estado maximizado e o restaura no " +#~ "próximo evento de abertura." + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "A biblioteca `tbb` é uma nova dependência" + +#~ msgid "" +#~ "The Limiter and the Multiband Compressor plugins can now use an optional " +#~ "external sidechain." +#~ msgstr "" +#~ "Os plugins limitador e compressor multibanda agora podem usar uma cadeia " +#~ "lateral externa opcional." + +#~ msgid "" +#~ "The Autogain plugin now allows the user to select which Loudness is used " +#~ "as reference for the volume correction." +#~ msgstr "" +#~ "O plugin Ganho Automático agora permite que o usuário selecione qual " +#~ "volume que é utilizado como referência para a correção do volume." + +#~ msgid "Optional Cubic Volume can be enabled in General Settings." +#~ msgstr "O Volume Cúbico opcional pode ser ativado em Configurações Gerais." + +#~ msgid "Prevented a case in which Spectrum was crashing." +#~ msgstr "Impediu um caso em que o Spectrum estava travando." + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "O Pavucontrol não é mais adicionado à lista de aplicativos de entrada em " +#~ "sistemas com localização diferente do inglês." + +#~ msgid "" +#~ "The convolver impulse response menu was improved to workaround an issue " +#~ "where the impulse files was not loaded when only one was available in the " +#~ "menu" +#~ msgstr "" +#~ "O menu de resposta ao impulso de convolução foi aprimorado para " +#~ "solucionar um problema em que os arquivos de impulso não eram carregados " +#~ "quando apenas um estava disponível no menu" + +#~ msgid "Average" +#~ msgstr "Médio" + +#~ msgid "Failed" +#~ msgstr "Falhou" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Usar Padrão" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Remover este arquivo de predefinição" + +#~ msgid "Import Presets" +#~ msgstr "Importar Predefinições" + +#~ msgid "Start Service at Login" +#~ msgstr "Inicializar Serviço no Login" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Modo Agressivo" + +#~ msgid "Add to Blocklist" +#~ msgstr "Adicionar à Lista de Bloqueio" + +#~ msgid "Blocklist" +#~ msgstr "Lista Negra" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Microfone de Calibração" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Habilitar" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Habilitar" + +#~ msgid "Format" +#~ msgstr "Formato" + +#~ msgid "Latency" +#~ msgstr "Latência" + +#~ msgid "Faster" +#~ msgstr "Mais Rápido" + +#~ msgid "Preserve Formant" +#~ msgstr "Preservar Formante" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Ganho de Entrada" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Canais" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Piso" + +#~ msgid "Output Effects" +#~ msgstr "Efeitos de Saída" + +#~ msgid "Settings" +#~ msgstr "Configurações" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Configurações" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Duração" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Sinais de Teste" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Sinais de Teste" + +#~ msgid "Show Spectrum" +#~ msgstr "Mostrar Espectro" + +#~ msgid "Border" +#~ msgstr "Borda" + +#~ msgid "Spectrum Type" +#~ msgstr "Tipo de Espectro" + +#~ msgid "Spectrum Color" +#~ msgstr "Cor do Espectro" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Modo Agressivo" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Redução de Ganho" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Pesos" + +#~ msgid "Dry" +#~ msgstr "Seco" + +#~ msgid "S/C Level" +#~ msgstr "Nível de S/C" + +#~ msgid "Short Term" +#~ msgstr "Curto Prazo" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Definir o volume e ligar / desligar efeitos" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Inclui um equalizador com predefinições incorporadas" + +#~ msgid "Input Limiter" +#~ msgstr "Limitador de Entrada" + +#~ msgid "Calibration" +#~ msgstr "Calibração" + +#~ msgid "Limit" +#~ msgstr "Limite" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Efeitos de Áudio para Programas que Utilizam Pulseaudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Efeitos de áudio para programas que Utilizam Pulseaudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Microfone de Calibração" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Aplique automaticamente esta predefinição sempre que o dispositivo usado " +#~ "atualmente for conectado no sistema" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Versão" + +#~ msgid "Sine" +#~ msgstr "Seno" + +#~ msgid "Square" +#~ msgstr "Quadrada" + +#~ msgid "Saw" +#~ msgstr "Serra" + +#~ msgid "Triangle" +#~ msgstr "Triângulo" + +#~ msgid "Pink Noise" +#~ msgstr "Ruído Rosa" + +#~ msgid "Ticks" +#~ msgstr "Tique-Taque" + +#~ msgid "Gaussian Noise" +#~ msgstr "Ruído Gaussiano" + +#~ msgid "Blue Noise" +#~ msgstr "Ruído Azul" + +#~ msgid "Violet Noise" +#~ msgstr "Ruído Violeta" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Measure Noise" +#~ msgstr "Medir Ruído" + +#~ msgid "Subtract Noise" +#~ msgstr "Subtrair Ruído" + +#~ msgid "Extended Filter" +#~ msgstr "Filtro Estendido" + +#~ msgid "Low" +#~ msgstr "Baixo" + +#~ msgid "Moderate" +#~ msgstr "Moderado" + +#~ msgid "High" +#~ msgstr "Alto" + +#~ msgid "Delay Agnostic" +#~ msgstr "Atraso Agnóstico" + +#~ msgid "Very High" +#~ msgstr "Muito Alto" + +#~ msgid "Adaptive Digital" +#~ msgstr "Digital Adaptativo" + +#~ msgid "Fixed Digital" +#~ msgstr "Digital Fixo" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilidade de Detecção" + +#~ msgid "Very Low" +#~ msgstr "Muito Baixo" + +#~ msgid "Use Custom Color" +#~ msgstr "Usar Cor Customizada" + +#~ msgid "Use Gradient" +#~ msgstr "Usar Gradiente" + +#~ msgid "Gradient Color" +#~ msgstr "Cor do Gradiente" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Arquivo da Resposta de Impulso" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Selecione o Arquivo com a Resposta de Impulso" + +#~ msgid "Aggressive Mode" +#~ msgstr "Modo Agressivo" + +#~ msgid "Before" +#~ msgstr "Antes" + +#~ msgid "After" +#~ msgstr "Depois" + +#~ msgid "Loudness Range" +#~ msgstr "Faixa de Sonoridade" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Taxa de Amostragem Padrão" + +#~ msgid "Server" +#~ msgstr "Servidor" + +#~ msgid "File" +#~ msgstr "Arquivo" + +#~ msgid "Configuration" +#~ msgstr "Configuração" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Servidor" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Frequências Mais Baixas" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Configurações Avançadas" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Predefinições" + +#~ msgid "Detect Silence" +#~ msgstr "Detectar Silêncio" + +#~ msgid "Muted" +#~ msgstr "Mudo" + +#~ msgid "Distant Headphones" +#~ msgstr "Fones de Ouvido Distantes" + +#~ msgid "Priority Type" +#~ msgstr "Tipo de Prioridade" + +#~ msgid "Niceness" +#~ msgstr "Gentileza" + +#~ msgid "Priority" +#~ msgstr "Prioridade" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frequência" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Frequência" + +#~ msgid "About" +#~ msgstr "Sobre" + +#~ msgid "Protocol" +#~ msgstr "Protocolo" + +#~ msgid "Default Sample Format" +#~ msgstr "Formato de Amostra Padrão" + +#~ msgid "Resamplers" +#~ msgstr "Resamplers" + +#~ msgid "Pipeline Input" +#~ msgstr "Entrada da Pipeline" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Pipeline Output" +#~ msgstr "Saída da Pipeline" + +#~ msgid "Block Size" +#~ msgstr "Tamanho do Bloco" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#~ msgid "paused" +#~ msgstr "pausado" + +#~ msgid "playing" +#~ msgstr "tocando" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Importar Predefinições" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Redução de Ganho" + +#~ msgid "Exponent" +#~ msgstr "Expoente" diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..805fbbd --- /dev/null +++ b/po/ro.po @@ -0,0 +1,3379 @@ +# Romanian translation for EasyEffects +# Copyright (C) 2021 +# This file is distributed under the same license as the easyeffects package. +# Andrei Dobrete , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-08-17 04:16+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Romanian \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" +"X-Generator: Weblate 4.14-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Egalizator, compresor și Alte Efecte Audio" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +#, fuzzy +msgid "Audio Effects for PipeWire Applications" +msgstr "Efecte Audio pentru Aplicații PulseAudio" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "limitator;compresor;reverberație;egalizator;autovolum" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "”Presetări”" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Activează" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +#, fuzzy +msgid "Mute Application" +msgstr "Aplicații" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +#, fuzzy +msgid "Application Volume" +msgstr "Aplicații" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Ajutor" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Setări" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "EasyEffects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Presetări" + +#: data/ui/application_window.ui:55 +#, fuzzy +msgid "Presets Menu" +msgstr "Presetări" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Evitare Globală" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "EasyEffects" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Aplicații" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Pereți Goi" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Aplicații" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Resetare Istoric" + +#: data/ui/autogain.ui:39 +#, fuzzy +msgid "Controls" +msgstr "Controlor de Gain" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Țintă" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Liniște" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Maxim" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Momentar" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Pe Termen Scurt" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrat" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Utilizarea Mijlocului Geometric" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Utilizarea Mijlocului Geometric" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Utilizarea Mijlocului Geometric" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Utilizarea Mijlocului Geometric" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Intensitate" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relativ" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Gamă" + +#: data/ui/autogain.ui:378 +#, fuzzy +msgid "Output Gain" +msgstr "Output" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Input" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Input Pipeline" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Output" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Output Pipeline" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Resetare" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Nume" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Presetări" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Șterge fișierul de presetări" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Ascultă" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Blend Harmonics" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "Al treilea" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "Al doilea" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Cantitate" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonics" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Scop" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Podea" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Podea" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Aplicații" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Arată programele din Lista de Blocare în Fila Principală" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Arată programele din Lista de Blocare în Fila Principală" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Arată programele din Lista de Blocare în Fila Principală" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Ascunde Fereastra." + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Compresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Mod" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "În Jos" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "În Sus" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Mod de Compresie" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Prag de Boost" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Cantitate" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Atac" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +#, fuzzy +msgid "Time" +msgstr "În Timp Real" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Prag" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Atac" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Prag" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Eliberare" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "În Timp Real" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Prag Relativ de Eliberare" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Raport" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Genunchi" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Compoziție" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "F2 Nivel" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Nivelul Țintă" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Lanț Lateral" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Bază Stereo" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Sursă" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Mijloc" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Parte" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Stânga" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Dreapta" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Maxim" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Maxim" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Lanț Lateral" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Întârziere L/R" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Dreapta" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Parte" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Parte" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Sursa Prestabilită" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Vârf" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Mod Filtru Low-pass" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Lanț Lateral" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Lanț Lateral" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Scrie" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Feed-forward" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Feed-back" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Lanț Lateral" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Nivel Input" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Preamplificare" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reactivitate" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Privire Înainte" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Lanț Lateral" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "High Pass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frecvență" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Oprit" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Mod Filtru High-pass" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Frecvență High-pass" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Low-Pass" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Mod Filtru Low-pass" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Gain" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Pantă" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Curbă" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Canale" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Despică Canalele" + +#: data/ui/convolver.ui:71 +#, fuzzy +msgid "Impulses" +msgstr "Răspuns Impuls" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Lățime Stereo" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spectru " + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +#, fuzzy +msgid "Autogain" +msgstr "Auto Gain" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Rată" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Probe" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Durație" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Răspuns Impuls" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importă Impuls" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Importă Fișier Impulse" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Importă Fișier Impulse" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Prestablilt" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Cutoff" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Feed" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Evitare" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Mut" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detectare" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Lat" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Despică" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 Despică" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frecvență" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 Vârf" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frecvență" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 Gain" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frecvență" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 Nivel" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frecvență" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 Vârf Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frecvență" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Laxitate" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Detectat" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Reducere" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Întârziere" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Inversează Faza" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Atenuare" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filtru" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filtru" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Supresor de Zgomot" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Supresor de Zgomot" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Benzi" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balans" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Lanț Lateral" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Lanț Lateral" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Despică Canalele" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Răspuns Plat" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Calculează Frecvențele" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Benzi" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +#, fuzzy +msgid "Import Preset" +msgstr "Importă Presetări" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Pantă" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Solo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Calitate" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Lățime" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Tavan" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Mod" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Integrat" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +#, fuzzy +msgid "Description" +msgstr "Detectare" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Șterge fișierul de presetări" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Low Shelf" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "High Shelf" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Clopot" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Evitare" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Crestătură" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Rezonanță" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Low-Pass" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Reducere Gain" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "All Pass" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Egalizator" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Gate" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "În Timp Real" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frecvență" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Supraprelevare" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Lat" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Lat" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Lățime Linie" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Lățime Linie" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Masă Sinusoidală" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Niciunul" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Preamplificare" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Link Stereo" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Lanț Lateral" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Nivelare Automată" + +#: data/ui/limiter.ui:537 +#, fuzzy +msgid "Auto Leveling Attack" +msgstr "Nivelare Automată" + +#: data/ui/limiter.ui:573 +#, fuzzy +msgid "Auto Leveling Release" +msgstr "Nivelare Automată" + +#: data/ui/limiter.ui:608 +#, fuzzy +msgid "Auto Leveling Knee" +msgstr "Nivelare Automată" + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Gain" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Dreapta" + +#: data/ui/limiter.ui:687 +#, fuzzy +msgid "Sidechain Left" +msgstr "Lanț Lateral" + +#: data/ui/limiter.ui:714 +#, fuzzy +msgid "Sidechain Right" +msgstr "Lanț Lateral" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standard" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Plat" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Dimensiune FFT" + +#: data/ui/loudness.ui:82 +#, fuzzy +msgid "Output Volume" +msgstr "Output" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Mapping-ul Canalelor" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Tavan" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Lanț Lateral" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +#, fuzzy +msgid "Operating Mode" +msgstr "Importă Model" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +#, fuzzy +msgid "Modern" +msgstr "Mod" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Inversează Faza" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +#, fuzzy +msgid "Bands List" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +#, fuzzy +msgid "Band 1" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +#, fuzzy +msgid "Band 2" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +#, fuzzy +msgid "Band 3" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +#, fuzzy +msgid "Band 4" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +#, fuzzy +msgid "Band 5" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +#, fuzzy +msgid "Band 6" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +#, fuzzy +msgid "Band 7" +msgstr "Benzi" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +#, fuzzy +msgid "Band 8" +msgstr "Benzi" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +#, fuzzy +msgid "Band End" +msgstr "Benzi" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Mod de Compresie" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Evitare" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Bază Stereo" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filtru" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Mod Filtru Low-pass" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Frecvență Low-pass" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Filtru High Pass" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Frecvență High-pass" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "F1 Gain" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +#, fuzzy +msgid "Band Curve" +msgstr "Curbă" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Reducere Gain" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "General" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Folosește Prestabilit" + +#: data/ui/pipe_manager_box.ui:65 +#, fuzzy +msgid "Custom Input Device" +msgstr "Nivel Input" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Folosește Prestabilit" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Reverberație" + +#: data/ui/pipe_manager_box.ui:116 +#, fuzzy +msgid "Header Version" +msgstr "Versiune" + +#: data/ui/pipe_manager_box.ui:127 +#, fuzzy +msgid "Library Version" +msgstr "Versiune" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Rata de Sample Prestabilită" + +#: data/ui/pipe_manager_box.ui:149 +#, fuzzy +msgid "Minimum Quantum" +msgstr "Frecvență Minimă" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Gain-ul Maxim" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Sink-ul Prestabilit" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "Efecte Output" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +#, fuzzy +msgid "Output Presets" +msgstr "Presetări pentru Output:" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +#, fuzzy +msgid "Output Autoloading Presets List" +msgstr "Presetări pentru Output:" + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "Nivel Input" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +#, fuzzy +msgid "Input Presets" +msgstr "Presetări pentru Input:" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Presetări pentru Input:" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Module" + +#: data/ui/pipe_manager_box.ui:429 +#, fuzzy +msgid "Modules List" +msgstr "Module" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Clienți" + +#: data/ui/pipe_manager_box.ui:461 +#, fuzzy +msgid "Clients List" +msgstr "Clienți" + +#: data/ui/pipe_manager_box.ui:475 +#, fuzzy +msgid "Test Signal" +msgstr "Semnale de Testare" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Stare" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +#, fuzzy +msgid "Enabled" +msgstr "Activează" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Canale" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +#, fuzzy +msgid "Both Channels" +msgstr "Canale" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Masă Sinusoidală" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Zgomot Alb" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frecvență" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Fereastră" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filtru" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Pitch" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Semitonuri" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Șterge fișierul de presetări" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +#, fuzzy +msgid "Add Effect" +msgstr "Efecte Input" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +#, fuzzy +msgid "_General" +msgstr "General" + +#: data/ui/preferences_general.ui:10 +#, fuzzy +msgid "Service" +msgstr "Server" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Procesează Toate Output-urile" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Procesează Toate Input-urile" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +#, fuzzy +msgid "Inactivity Timeout" +msgstr "Expirarea Activității" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Folosește Tema Întunecată" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimental" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Ascunde Fereastra." + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +#, fuzzy +msgid "_Spectrum" +msgstr "Spectru " + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Bări " + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Linii" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Puncte" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Înălțime" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Lățime Linie" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Umple" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +#, fuzzy +msgid "Color" +msgstr "Culoare Axă" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +#, fuzzy +msgid "Frequency Range" +msgstr "Frecvență" + +#: data/ui/preferences_spectrum.ui:212 +#, fuzzy +msgid "Minimum" +msgstr "Maxim" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maxim" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Încarcă" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Salvează setările curente în acest fișier cu presetări" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Salvează setările curente în acest fișier cu presetări" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Șterge fișierul de presetări" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Presetări pentru Input:" + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Creează Presetare" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Importă Presetări" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Presetări pentru Input:" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Presetări pentru Input:" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Amortizare Frecvențe Înalte" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Dimensiunea Camerei" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Mic" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Mediu" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Mare" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Mare/neted" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimental" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Difuzie" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Pre Întârziere" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Timp Decay" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Bass Tăiat" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Treble Tăiat" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ambianță" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Pereți Goi" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Cameră" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Hol Gol Mare" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disco" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Hol Plin Mare" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importă Model" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Detector de Voce" + +#: data/ui/rnnoise.ui:153 +#, fuzzy +msgid "Models" +msgstr "Mod" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +#, fuzzy +msgid "Standard Model" +msgstr "Model Standard RNNoise" + +#: data/ui/rnnoise.ui:205 +#, fuzzy +msgid "RNNoise Models List" +msgstr "Model Standard RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Model Activ" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Model Standard RNNoise" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +#, fuzzy +msgid "Close the Window" +msgstr "Ascunde Fereastra." + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "EasyEffects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Zgomot Roșu" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Control Automatic de Smoothing" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Reverberație" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Supresor de Zgomot" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "F2 Nivel" + +#: data/ui/stereo_tools.ui:79 +#, fuzzy +msgid "Input Balance" +msgstr "Balans" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:116 +#, fuzzy +msgid "Softclip Level" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Matrice Stereo" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Prestabilit Stereo)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Stereo către Mijloc)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Mijloc către Stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Mono Canal Stânga)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Mono Canal Dreapta)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Mono L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Canalele Stereo Inversate)" + +#: data/ui/stereo_tools.ui:151 +#, fuzzy +msgid "Stereo Mode" +msgstr "Bază Stereo" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Nivel Lateral" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Balans Lateral" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Nivel Mijloc" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Panoramă Mijloc" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "Balans" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Întârziere L/R" + +#: data/ui/stereo_tools.ui:460 +#, fuzzy +msgid "Delay Left Right" +msgstr "Întârziere L/R" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Bază Stereo" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fază Stereo" + +#: src/app_info.cpp:65 +#, fuzzy +msgid "Running" +msgstr "rulează" + +#: src/app_info.cpp:67 +#, fuzzy +msgid "Suspended" +msgstr "suspendat" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "se creează" + +#: src/app_info.cpp:73 +#, fuzzy +msgid "Error" +msgstr "eroare" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Canale" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" +"Închideți EasyEffects. Folositor când este folosit în modul de serviciu." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Încarcă o presetare. Exemplu: easyeffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Resetează EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Ascunde Fereastra." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Ocolire Globală. 1 pentru a activa, 2 pentru a dezactiva și 3 pentru a afla " +"statusul" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Arată presetările valabile." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Output" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Input" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Importă Fișier Impulse" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importă Fișier Impulse" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Deschide" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Răspuns Impuls" + +#: src/convolver_menu_impulses.cpp:265 +#, fuzzy +msgid "Load Impulse" +msgstr "Importă Impuls" + +#: src/convolver_menu_impulses.cpp:268 +#, fuzzy +msgid "Remove Impulse" +msgstr "Importă Impuls" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Importă Fișier Impulse" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "Nu s-a putut Încărca Fișierul Impulse" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +#, fuzzy +msgid "Recorders" +msgstr "Bordură" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importă Fișierul de Presetare APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Presetări APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Importă Fișierul de Presetare APO" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Presetări pentru Input:" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +#, fuzzy +msgid "Remove Autoloading Preset" +msgstr "Șterge fișierul de presetări" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Efecte Output" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Efecte Output" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importă Fișier de Model" + +#: src/rnnoise_ui.cpp:151 +#, fuzzy +msgid "RNNoise Models" +msgstr "Model Standard RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Amplificator Bass" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "Intensitate" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Convolver" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Crossfeed" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Cristalizator" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Anulator de Ecou" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Egalizator" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Excitator" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Efecte Output" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Limitator" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Maximizator" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Compresor Multiband" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Multiband Gate" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Reverberație" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Reducere Zgomot" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Unelte Stereo" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Mod Filtru Low-pass" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Filtru High Pass" + +#~ msgid "Uniform" +#~ msgstr "Uniform" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Presetări pentru Output:" + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Presetări pentru Output:" + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Presetări pentru Output:" + +#~ msgid "infinity" +#~ msgstr "infinit" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Raport" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Low-Pass" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "High Pass" + +#~ msgid "Gating" +#~ msgstr "Gating" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Lowpass" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Lowpass" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Lowpass" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Highpass" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Highpass" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Highpass" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Bandpass" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Bandpass" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Bandpass" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Bandreject" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Bandreject" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct Bandreject" + +#~ msgid "Inertia" +#~ msgstr "Inerție" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Scrie" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Mod" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Pantă" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Intensitate" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "High Shelf" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Calitate" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Format" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Presetări" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Claritate" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Compresie" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Cents" + +#~ msgid "Octaves" +#~ msgstr "Octave" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Resetează EasyEffects." + +#~ msgid "High Pass" +#~ msgstr "High Pass" + +#~ msgid "Low Pass" +#~ msgstr "Low Pass" + +#~ msgid "Cancel" +#~ msgstr "Anulare" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Preamplificare" + +#~ msgid "Frame Size" +#~ msgstr "Dimensiune Cadru" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Low-Pass" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Uniform" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Pre Întârziere" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Despică Canalele" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "F2 Nivel" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "F2 Nivel" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Nivelul Țintă" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Nivelul Țintă" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Nivel de Suprimare" + +#, fuzzy +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Efecte audio pentru aplicații PulseAudio" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Reducere Zgomot" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "Presetări APO" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Presetări pentru Output:" + +#~ msgid "Input Presets: " +#~ msgstr "Presetări pentru Input:" + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Despică" + +#~ msgid "Split 1/2" +#~ msgstr "Despicare 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frecvență" + +#~ msgid "Split 2/3" +#~ msgstr "Despicare 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frecvență" + +#~ msgid "Split 3/4" +#~ msgstr "Despicare 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frecvență" + +#~ msgid "Sub Band" +#~ msgstr "Sub Band" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Compoziție" + +#~ msgid "Max Reduction" +#~ msgstr "Reducere" + +#, fuzzy +#~ msgid "Band 1 Max Reduction" +#~ msgstr "Reducere" + +#~ msgid "Low Band" +#~ msgstr "Low Band" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Compoziție" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Reducere" + +#~ msgid "Mid Band" +#~ msgstr "Mid Band" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Compoziție" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Reducere" + +#~ msgid "High Band" +#~ msgstr "High Band" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Evitare" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Detectare" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Atac" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Eliberare" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Prag" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Compoziție" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Reducere" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Cantitate" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Cantitate" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#, fuzzy +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects este un set avansat de unelte pentru manipularea audio. " +#~ "Numind doar câteva din uneltele din acesta, sunt incluse un egalizator, " +#~ "limitator, compresor și o unealtă pentru reverberație." + +#, fuzzy +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Pentru că EasyEffects utilizează serverul de sunet prestabilit " +#~ "PulseAudio, acesta va funcționa cu majoritatea, dacă nu cumva chiar toate " +#~ "programele pe care le folosiți. Toate programele suportate sunt " +#~ "prezentate în fereastra principală, unde fiecare poate fi activată " +#~ "individual." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Pe lângă faptul că EasyEffects poate manipula output-ul de sunet, se " +#~ "poate folosi și pentru a aplica efecte pe un dispozitiv de input, ca un " +#~ "microfon. Acest lucru este util, spre exemplu, în înregistrarea audio, " +#~ "dar funcționează bine și în timpul conversațiilor voce." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Când EasyEffects este pornit, acesta va reține configurația din sesiunea " +#~ "anterioară. Este de asemenea posibil să salvați setările curente ca și " +#~ "profile." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Benzi" + +#~ msgid "Average" +#~ msgstr "În Medie" + +#~ msgid "Failed" +#~ msgstr "A Eșuat" + +#~ msgid "Use Default" +#~ msgstr "Folosește Prestabilit" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Șterge fișierul de presetări" + +#~ msgid "Import Presets" +#~ msgstr "Importă Presetări" + +#~ msgid "Start Service at Login" +#~ msgstr "Începe Serviciul la Login" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Model Activ" + +#~ msgid "Add to Blocklist" +#~ msgstr "Adaugă la Lista de Blocare" + +#~ msgid "Blocklist" +#~ msgstr "Lista de Blocare" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Calibrare Microfon" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Activează" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Activează" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latență" + +#~ msgid "idle" +#~ msgstr "inactiv" + +#~ msgid "Faster" +#~ msgstr "Mai Repede " + +#~ msgid "Preserve Formant" +#~ msgstr "Păstrează Formant" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Setează volumul și pornește/oprește efectele" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Include un egalizator cu presetări încorporate." + +#~ msgid "Input Limiter" +#~ msgstr "Limitator de Input" + +#~ msgid "Calibration" +#~ msgstr "Calibrare" + +#~ msgid "Based on" +#~ msgstr "Bazat pe" + +#~ msgid "Detect Silence" +#~ msgstr "Detectează Tăcerea" + +#~ msgid "Weights" +#~ msgstr "Greutăți" + +#~ msgid "Provided by" +#~ msgstr "Furnizat de" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Reconectați microfonul pentru a aplica noile schimbări la Lista de Blocare" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Reporniți playerul pentru a aplica schimbările noi la Lista de Blocare" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Pătrat" + +#~ msgid "Saw" +#~ msgstr "Ferăstrău" + +#~ msgid "Triangle" +#~ msgstr "Triunghi" + +#~ msgid "Pink Noise" +#~ msgstr "Zgomot Roz" + +#~ msgid "Ticks" +#~ msgstr "Ticăituri" + +#~ msgid "Gaussian Noise" +#~ msgstr "Zgomot Gaussian" + +#~ msgid "Blue Noise" +#~ msgstr "Zgomot Albastru" + +#~ msgid "Violet Noise" +#~ msgstr "Zgomot Violet" + +#~ msgid "Volume" +#~ msgstr "Volum" + +#~ msgid "Measure Noise" +#~ msgstr "Măsoară Zgomotul" + +#~ msgid "Subtract Noise" +#~ msgstr "Scade Zgomotul" + +#~ msgid "Advanced" +#~ msgstr "Avansat" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importă Fișier de Răspuns Impuls" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Selectează Fișierul de Răspuns Impuls" + +#~ msgid "Aggressive Mode" +#~ msgstr "Mod Agresiv" + +#~ msgid "Before" +#~ msgstr "Înainte" + +#~ msgid "After" +#~ msgstr "După" + +#~ msgid "Loudness Range" +#~ msgstr "Gama de Sunet" + +#~ msgid "Apply APO Preset" +#~ msgstr "Aplică Presetare APO" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "Apply" +#~ msgstr "Aplică" + +#~ msgid "Muted" +#~ msgstr "Mut" + +#~ msgid "Distant Headphones" +#~ msgstr "Căști Departe" + +#~ msgid "Niceness" +#~ msgstr "Niceness" + +#~ msgid "Priority Type" +#~ msgstr "Tipul Priorității" + +#~ msgid "Priority" +#~ msgstr "Prioritate" + +#~ msgid "About" +#~ msgstr "Despre" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Reducere Maximă a Gain-ului" + +#~ msgid "Limit" +#~ msgstr "Limită" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "Loudness Compensator" +#~ msgstr "Compensator de Intensitate" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Aplică automat această presetare oricând dispozitivul folosit acum este " +#~ "conectat la sistem" + +#~ msgid "Protocol" +#~ msgstr "Protocol" + +#~ msgid "Default Sample Format" +#~ msgstr "Formatul de Sample Prestabilit" + +#~ msgid "File" +#~ msgstr "Fișier" + +#~ msgid "Configuration" +#~ msgstr "Configurare" + +#~ msgid "Resamplers" +#~ msgstr "Resampleri" + +#~ msgid "Buffer" +#~ msgstr "Buffer" + +#~ msgid "Block Size" +#~ msgstr "Dimensiune Bloc" + +#~ msgid "Dry" +#~ msgstr "Uscat" + +#~ msgid "Show Spectrum" +#~ msgstr "Arată Spectrul" + +#~ msgid "Use Custom Color" +#~ msgstr "Folosește Culoare Personalizată" + +#~ msgid "Use Gradient" +#~ msgstr "Folosește Gradient" + +#~ msgid "Sampling" +#~ msgstr "Sampling" + +#~ msgid "Maximum Frequency" +#~ msgstr "Frecvență Maximă" + +#~ msgid "Spectrum Type" +#~ msgstr "Tip Spectru" + +#~ msgid "Spectrum Color" +#~ msgstr "Culoare Spectru" + +#~ msgid "Gradient Color" +#~ msgstr "Culoare Gradient" + +#~ msgid "S/C Level" +#~ msgstr "Nivel S/C" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Extended Filter" +#~ msgstr "Filtru Extins" + +#~ msgid "Low" +#~ msgstr "Jos" + +#~ msgid "Moderate" +#~ msgstr "Moderat" + +#~ msgid "High" +#~ msgstr "Înalt" + +#~ msgid "Delay Agnostic" +#~ msgstr "Întârziere Agnostică" + +#~ msgid "Very High" +#~ msgstr "Foarte Înalt" + +#~ msgid "Adaptive Digital" +#~ msgstr "Digital Adaptiv" + +#~ msgid "Fixed Digital" +#~ msgstr "Digital Fix" + +#~ msgid "Detection Likelihood" +#~ msgstr "Probabilitatea Detecției" + +#~ msgid "Very Low" +#~ msgstr "Foarte Jos" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..541f0fa --- /dev/null +++ b/po/ru.po @@ -0,0 +1,3997 @@ +# EasyEffects Russian translation +# This file is distributed under the same license as the EasyEffects package. +# ⓒ Mikhail Novosyolov [mikhailnov] , 2017-2019 +# ⓒ Georgiy Starodubtsov [Mewsimka] , 2018 +# ⓒ Denis Goncharov, 2018 +# ⓒ Vladimir Penchikov , 2018 +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-10-21 20:02+0000\n" +"Last-Translator: Andrei Stepanov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Weblate 5.1\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Эквалайзер, компрессор и прочие звуковые эффекты" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Звуковые эффекты для приложений PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "лимитер;компрессор;ревербератор;эквалайзер;автогромкость;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "«Предустановки»" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Включить/отключить это приложение" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Включить" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Исключённые приложения: Добавить/убрать это приложение" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Исключить" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Заглушить приложение" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Изменить громкость этого приложения" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Громкость приложения" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Справка" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "Сбросить настрой_ки" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Настройки" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "_Горячие клавиши" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_О программе Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Предустановки" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Меню предустановок" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Включить/отключить общий обход" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Общий обход" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Главное меню" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Окно Easy Effects" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Список приложений" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Список пуст" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Нет доступных звуковых приложений" + +# #, fuzzy +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Сброс истории" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "Элементы управления" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Целевая громкость" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Тишина" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Исторический максимум" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "База" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Моментальные измерения" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Краткосрочные измерения" + +# Время интеграции — это величина, характеризующая быстродействие измерителя. +# https://tech.ebu.ch/docs/factsheets/Factsheet-R128-2011-RUS.pdf +# В документе выше переводчик перевел 'Integrated' как 'Интегрированные', +# хотя сам же написал, что это "измерения от начала до конца" +# Яндекс.Переводчик перевел лучше — "Комплексные измерения" +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Комплексные измерения" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Среднее геометрическое (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Среднее геометрическое (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Среднее геометрическое (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Среднее геометрическое (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Громкость" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Относительное значение" + +# ??? Не уверен в переводе +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Диапазон" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Усиление выхода" + +# ############################################### +# https://github.com/wwmm/easyeffects/pull/289 +# Left here for future thinking +# msgid "Influence of measurements with momentary integration time" +# msgstr "Влияние измерений с моментальным временем интеграции" +# msgid "Influence of measurements with short integration time" +# msgstr "Влияние измерений с малым временем интеграции" +# msgid "Influence of integrated measurements" +# msgstr "Влияние комплексных измерений" +# ############################################### +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Вход" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Плагин усиления входа" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Выход" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Плагин усиления выхода" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Сброс" + +# #, fuzzy +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Устройство" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Название" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Профиль" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Предустановка" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Убрать эту предустановку из автозагрузки" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Прослушать" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Смешение гармоник" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3-ий" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2-ой" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Величина" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Гармоники" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Диапазон частот" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Нижний порог" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Величина нижнего порога" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Указатель" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Название приложения" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Добавить в исключённые приложения" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Исключённые приложения" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Показать исключённые приложения" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "Показать родное окно" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Компрессор" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Режим" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Нисходящий" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Восходящий" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Усиление" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Режим сжатия" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Порог усиления" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Величина усиления" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Атака" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Время" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Порог" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Время атаки" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Порог атаки" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Восстановление" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Время восстановления" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Порог восстановления" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Соотношение" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Колено" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Усиление вверх" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Уровень ориг." + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Уровень обраб." + +# #, fuzzy +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Боковая цепь" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "Режим разделения стерео" + +# #, fuzzy +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Источник" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Средний" + +# #, fuzzy +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Боковой" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Левый" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Правый" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "Мин." + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "Макс." + +# #, fuzzy +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Источник боковой цепи" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "Левый/правый" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "Правый/левый" + +# #, fuzzy +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "Середина/бок" + +# #, fuzzy +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "Бок/середина" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "Источник разделения стерео" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Пик" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "Среднеквадратично" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Фильтр нижних частот" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "Простая скользящая средняя" + +# #, fuzzy +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Режим боковой цепи" + +# #, fuzzy +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "Слушать боковую цепь" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Тип" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "Прямая связь" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Обратная связь" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Внешний" + +# #, fuzzy +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Тип боковой цепи" + +# #, fuzzy +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Устройство ввода" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Предусиление" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Скорость реакции" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Упреждение" + +# #, fuzzy +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Фильтры боковой цепи" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Фильтр ВЧ" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Частота" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Откл" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 дБ/окт" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 дБ/окт" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 дБ/окт" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Режим высокочастотного фильтра" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Частота высокочастотного фильтра" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Фильтр НЧ" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Режим низкочастотного фильтра" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Усиление" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "Огибающая" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Кривая" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "Л" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Левый канал" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "П" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Правый канал" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Импульсы" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Объединить" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Ширина стерео" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Спектр" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Логарифмическая шкала" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Авторегулятор" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Частота" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Образцы" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Длительность" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Объединить импульсные характеристики" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "Первое ядро" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "Второе ядро" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Имя файла на выходе" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Имя суммарного ядра" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Импортировать импульс" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Поиск" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Поиск файла импульса" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Список файлов импульса" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "По умолчанию" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Усечение" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Подача" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Обход" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Приглушить" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Выявление" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Широкий" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Частота раздела" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "Ч1 раздела" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Частота 1 раздела" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "Ч1 пик" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Частота 2 пик" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "Ч1 усиление" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Частота 1 усиление" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "Ч2 уровень" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Частота 2 уровень" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "Ч2 пик добротности" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Частота 2 пик добротности" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Допуск" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Выявлено" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Ослабление" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Задержка" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Обратить фазу" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "Предел затухания" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "Минимальный порог обработки" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "Максимальный порог обработки ERB" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "Максимальный порог обработки DF" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "Минимальный буфер обработки" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "Бета постфильтра" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Длина фильтра" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "Подавление остаточного эха" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "Подавление эха ближнего конца" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Исключённые приложения" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Число полос" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Баланс" + +# #, fuzzy +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Высота тона левого" + +# #, fuzzy +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Высота тона правого" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Разделить каналы" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Плоская АЧХ" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Подсчитать частоты" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "Сортировать полосы" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Импорт предустановки" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Наклон" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Соло" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Качество" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Ширина" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Потолок" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Величина потолка" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "Расширитель" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "Режим расширителя" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Внутренний" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Доступ" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Описание" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Удалить этот файл модели" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "Низкочастотный полочный фильтр" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "Высокочастотный полочный фильтр" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Колокол" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "Полосовой фильтр" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Вырез" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Резонансы" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "Лестничный фильтр" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "Лестнично-заграждающий фильтр" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "Фазовый фильтр" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "Режим эквалайзера" + +# http://wikisound.org/Гейт: шумовой гейт или просто гейт — это электронное устройство или плагин динамической обработки, который используется для контроля уровня звукового сигнала. Гейт пропускает или глушит сигнал в зависимости от установленного порогового значения. Он очень часто используется для подавления шума в паузах. +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Пропускной уровень (гейт)" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "Зона" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Отставание" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "Сведение" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Зона атаки" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Зона восстановления" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "Истинный пик" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Передискретизация" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "Подмешивать шум" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "Эрмит узкий" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "Эрмит широкий" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "Эрмит хвост" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "Эрмит нос" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "Эксп. узкий" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "Эксп. широкий" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "Эксп. хвост" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "Эксп. нос" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Лин. узкий" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Лин. широкий" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Лин. хвост" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "Лин. нос" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Нет" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "Половинный x2(2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "Половинный x2(3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "Половинный x3(2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "Половинный x3(3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "Половинный x4(2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "Половинный x4(3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "Половинный x6(2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "Половинный x6(3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "Половинный x8(2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "Половинный x8(3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "Полный x2(2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "Полный x2(3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "Полный x3(2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "Полный x3(3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "Полный x4(2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "Полный x4(3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "Полный x6(2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "Полный x6(3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "Полный x8(2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "Полный x8(3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "Предусил. бок. цепи" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Предусиление боковой цепи" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Усиление" + +# В данном режиме «Компрессор» обрабатывает сигналы сразу двух каналов (стерео), уравнивая их уровни. +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Стереосвязка" + +# #, fuzzy +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Внешняя боковая цепь" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Источник внешней боковой цепи" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Автовыравнивание" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Атака автовыравнивания" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Восстановление автовыравнивания" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Колено автовыравнивания" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Усиление левого" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Усиление правого" + +# #, fuzzy +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Боковая цепь левая" + +# #, fuzzy +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Боковая цепь правая" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Стандарт" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Плоский" + +# Taking lingual shortcuts to squeeze it in the text box +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Размер БПФ" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Громкость на выходе" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Клиппинг" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Верхний порог" + +# #, fuzzy +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Усиление боковой цепи" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "БП розового" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "СП розового" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "БП коричневого" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "СП коричневого" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "Показать родной интерфейс пользователя" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Режим работы" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Классический" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Современный" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "Линейная фаза" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Полосы" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Полоса 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Полоса 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Полоса 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Полоса 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Полоса 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Полоса 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Полоса 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Полоса 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "Начало полосы" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "Конец полосы" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Режим компрессии полосы" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "Обход полосы" + +# #, fuzzy +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Параметры боковой цепи полосы" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "Разделение стерео" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Фильтр" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "Фильтр среза НЧ" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Частота фильтра среза НЧ" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "Фильтр среза ВЧ" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Частота фильтра среза ВЧ" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "Предусиление" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Усиление полосы" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "Огибающая полосы" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Кривая полосы" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Уменьшение полосы" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Общие" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Управление устройством" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"Рекомендуется НЕ устанавливать источники Easy Effects в качестве " +"стандартного устройства во внешних приложениях (таких как Настройки Gnome и " +"Параметры системы Plasma)." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Использовать стандартный вход" + +# #, fuzzy +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Выбрать устройство ввода" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Использовать стандартный выход" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Выбрать устройство вывода" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Сведения о сервере" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Версия оболочки" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Версия библиотеки" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Частота дискретизации" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Минимальное квантование" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Максимальное квантование" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Стандартное квантование" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "Автозагрузка предустановок" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Устройства вывода" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Предустановки выхода" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "Создать ассоциацию" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "Добавить в автозагрузку предустановку выхода" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Список автозагружаемых предустановок выхода" + +# #, fuzzy +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Устройства ввода" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Предустановки входа" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "Добавить в автозагрузку предустановку входа" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Список автозагружаемых предустановок входа" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Модули" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Список модулей" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Клиенты" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "Список клиентов" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Проверочный сигнал" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Состояние" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Включено" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Свойства" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Каналы" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Оба" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Оба канала" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Форма волны" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Синусоида" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Белый шум" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "Быстрая перемотка" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "Сглаживание" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "Длина последовательности" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "Окно перемотки" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "Длина перекрытия" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Высота тона" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Полутона" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "Разница в темпе" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "Разница в частоте" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Удалить этот эффект" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Включить/отключить эффект" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Изменить позицию эффекта" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Добавить эффект" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Список используемых плагинов" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Без эффектов" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Аудиопоток не изменён" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Найти плагин" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Список плагинов" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Общие" + +# #, fuzzy +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Служба" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Запускать службу при старте системы" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Завершать работу по закрытии окна" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Аудио" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Обрабатывать все выходные потоки" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Обрабатывать все входные потоки" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Игнорировать потоки с монитора устройств" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "Использовать кубическую громкость" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Тайм-аут бездействия" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "Период обновления (уровнемеры и спектр)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "Частота обновления (плагины LV2)" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Стиль" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Использовать тёмную тему" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Скрывать меню по щелчку вне фокуса" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "Испытательные возможности" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "Родное окно плагина" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "Позволяет показывать/скрывать родное окно плагина" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Спектр" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Форма" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Полосы" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Линии" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Точки" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Пункты" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Высота" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Ширина линии" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Заливка" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Отобразить границы полос" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Скруглённые углы" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "Динамический масштаб" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Цвет" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Линии и полосы" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Разметка осей" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Диапазон частот" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Минимум" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Максимум" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Загрузить" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "Отменить текущие настройки и загрузить эту предустановку" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Сохранить текущие настройки в этот файл предустановки" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Удалить этот файл предустановки" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "Имя новой предустановки" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Создать новую предустановку" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Импорт предустановки" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "Поиск предустановки" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "Список предустановок" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Высокочастотное демпфирование" + +# Taking lingual shortcuts to squeeze it in the text box +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Размер комнаты" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Малый" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Средний" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Большой" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Туннель" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Большой/гладкий" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Опытный" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Диффузия" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Предзадержка" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Время распада" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Срез басов" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Срез тембра" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Атмосфера" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Голые стены" + +# Taking lingual shortcuts to squeeze it in the text box +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Комната" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Большой пустой зал" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Танцзал" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Большой занятый зал" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Импортировать модель" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Распознаватель голоса" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Модели" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Стандартная модель" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "Список моделей RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Модель Не Загружена" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Активная модель" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Стандартная модель RNNoise" + +# #, fuzzy +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Описание" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "Показать справку" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Полноэкраный/неполноэкраный режим" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Закрыть окно" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Выход из Easy Effects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "Шумоподавление" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Регулятор автоусиления" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "Дереверберация" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Вероятность голосовой активности" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Начало" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Продолжение" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Шумоглушитель" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "Уровень" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Баланс входа" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Мягкое усечение" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Уровень мягкого усечения" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Матрица стерео" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "ЛП > ЛП (стерео по умолчанию)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "Стерео > Моно-раздельно" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "Моно-раздельно > Стерео" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "Стерео > Моно левый канал" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "Стерео > Моно правый канал" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "Стерео > Моно левый+правый каналы" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "ЛП > ПЛ (обратить каналы стерео)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Режим стерео" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Боковой уровень" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Боковой баланс" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Средний уровень" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Срединная панорама" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Баланс выхода" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Задержка Л/П" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Задержка левый правый" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Стерео база" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Стерео фаза" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "Работает" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Приостановлено" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Простаивает" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Создание" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Ошибка" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Неизвестно" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "канала(-ов)" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Выход из Easy Effects. Полезно при работе в режиме службы." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Загрузить предустановку. Пример: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Сбросить Easy Effects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Скрыть окно." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "Глобальный обход. 1 — включить, 2 — отключить, 3 — получение статуса" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Показать доступные предустановки." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "Выхо_д" + +# ############################################### +# https://github.com/wwmm/easyeffects/pull/289 +# Left here for future thinking +# msgid "Influence of measurements with momentary integration time" +# msgstr "Влияние измерений с моментальным временем интеграции" +# msgid "Influence of measurements with short integration time" +# msgstr "Влияние измерений с малым временем интеграции" +# msgid "Influence of integrated measurements" +# msgstr "Влияние комплексных измерений" +# ############################################### +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "Вх_од" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "Нестандартный файл" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "Файл импульса повреждён или не поддерживается" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Поддерживаются только файлы импульса стерео" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Файл импульса не импортирован" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Импортировать файл импульса" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Открыть" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Импульсная реакция" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Загрузить импульс" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Удалить Импульс" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Нет загруженного файла импульса" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Не удалось загрузить файл импульса" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Рекордеры" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Проигрыватели" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Эффекты" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Импортировать файл предустановки APO" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "Предустановки APO" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"Предустановка APO не загружена. Возможно, формат файла не поддерживается. " +"Пожалуйста, проверьте его содержимое." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "Импортировать файл предустановки GraphicEQ" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "Предустановки GraphicEQ" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"Предустановка GraphicEQ не загружена. Возможно, формат файла не " +"поддерживается. Пожалуйста, проверьте его содержимое." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Удалить автозагрузку предустановки" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "Уровнемер выхода" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Удалить" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Устройство вывода" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Добавить" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "Сохранить?" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "Удалить?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Выбранная модель не загружена. Данный формат может быть не поддерживаемым. " +"Возвращение на стандартную модель." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Импорт файла модели" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "Модели RNNoise" + +# Энхансер (он же Эксайтер) — это прибор, который генерирует высшие гармоники низких частот, благодаря чему повышается локализация низких частот и их «читаемость». +# «Бас-Энхансер» или «Глубокий бас» +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Насыщение басов" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Громкость баса" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Конвольвер" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Перекрёстная подача" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Кристаллизатор" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "Глубокий шумоподавитель" + +# http://wikisound.org/Деэссер; предназначен для уменьшения или устранения избыточно шипящих звуков в записи человеческого голоса +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Антишипение (деэссер)" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Эхоподавитель" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Эквалайзер" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Гармонический возбудитель" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "Уровнемер" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Ограничитель (лимитер)" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Максимизатор" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Многополосный компрессор" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Многополосный пропускной уровень" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Реверберация" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Подавление шума" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Речевой процессор" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Стереоналадчики" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "Эффект «{}» недоступен" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" +"Программное обеспечение, необходимое для эффекта {}, «{}», не установлено. " +"Рассмотрите возможность использования пакета Easy Effects Flatpak или " +"установите программное обеспечение самостоятельно." + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" +"Эффект {} был отключён при компиляции Easy Effects. Возможно, это произошло " +"потому, что программное обеспечение, необходимое для этого эффекта, «{}», " +"было недоступно. Рассмотрите возможность использования пакета Easy Effects " +"Flatpak или сборки собственного пакета Easy Effects." + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "∞" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "Используется {}" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Фильтр среза НЧ" + +#~ msgid "High-Cut Filter" +#~ msgstr "Фильтр среза ВЧ" + +#~ msgid "Uniform" +#~ msgstr "Равномерно" + +#~ msgid "New Output Preset Name" +#~ msgstr "Имя новой предустановки выхода" + +#~ msgid "Search Output Preset" +#~ msgstr "Поиск предустановки выхода" + +#~ msgid "Output Presets List" +#~ msgstr "Список предустановок выхода" + +#~ msgid "New Input Preset Name" +#~ msgstr "Имя новой предустановки входа" + +#~ msgid "Search Input Preset" +#~ msgstr "Поиск предустановки входа" + +#~ msgid "Input Presets List" +#~ msgstr "Список предустановок входа" + +#~ msgid "infinity" +#~ msgstr "бесконечно" + +#~ msgid "IIR" +#~ msgstr "БИХ (IIR)" + +#~ msgid "FIR" +#~ msgstr "КИХ (FIR)" + +#~ msgid "FFT" +#~ msgstr "БПФ (FFT)" + +#~ msgid "SPM" +#~ msgstr "ФСМ (SPM)" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Соотношение" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Порог" + +#~ msgid "Low-pass" +#~ msgstr "Низкочастотный фильтр" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Фильтр ВЧ" + +#~ msgid "Gating" +#~ msgstr "Гейтирование" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12 дБ/окт фильтр НЧ" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24 дБ/окт фильтр НЧ" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36 дБ/окт фильтр НЧ" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12 дБ/окт фильтр ВЧ" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24 дБ/окт фильтр ВЧ" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36 дБ/окт фильтр ВЧ" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6 дБ/окт полосовой" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12 дБ/окт полосовой" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18 дБ/окт полосовой" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6 дБ/окт полосно-заграждающий" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12 дБ/окт полосно-заграждающий" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18 дБ/окт полосно-заграждающий" + +#~ msgid "Inertia" +#~ msgstr "Инертность" + +#~ msgid "Band Type" +#~ msgstr "Тип полосы" + +#~ msgid "Band Mode" +#~ msgstr "Режим полосы" + +#~ msgid "Band Slope" +#~ msgstr "Наклон полосы" + +#~ msgid "Loudness List" +#~ msgstr "Список громкости" + +#~ msgid "High Speed" +#~ msgstr "Высокая скорость" + +#~ msgid "High Quality" +#~ msgstr "Высокое качество" + +#~ msgid "High Consistency" +#~ msgstr "Высокая согласованность" + +#~ msgid "Formant" +#~ msgstr "Форманта" + +#~ msgid "Shifted" +#~ msgstr "Смещённый" + +#~ msgid "Preserved" +#~ msgstr "Сохраняемый" + +#~ msgid "Transients" +#~ msgstr "Переходные звуки" + +#~ msgid "Crisp" +#~ msgstr "Чёткий" + +#~ msgid "Mixed" +#~ msgstr "Смешанный" + +#~ msgid "Smooth" +#~ msgstr "Гладкий" + +#~ msgid "Detector" +#~ msgstr "Детектор" + +#~ msgid "Compound" +#~ msgstr "Составной" + +#~ msgid "Percussive" +#~ msgstr "Ударный" + +#~ msgid "Soft" +#~ msgstr "Мягкий" + +#~ msgid "Phase" +#~ msgstr "Фаза" + +#~ msgid "Laminar" +#~ msgstr "Ламинарный" + +#~ msgid "Independent" +#~ msgstr "Независимый" + +#~ msgid "Cents" +#~ msgstr "Центы" + +#~ msgid "Octaves" +#~ msgstr "Октавы" + +#~ msgid "_Manual" +#~ msgstr "_Руководство" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Открыть руководство Easy Effects" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} не установлено в системе" + +#~ msgid "High Pass" +#~ msgstr "Высокочастотный фильтр" + +#~ msgid "Low Pass" +#~ msgstr "Фильтр низких частот" + +#~ msgid "Cancel" +#~ msgstr "Отмена" + +#~ msgid " PreAmplification" +#~ msgstr " Предусиление" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Закрыть (нажмите ESC)" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Frame Size" +#~ msgstr "Размер кадра" + +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "" +#~ "Включить/отключить\n" +#~ " общий обход" + +#~ msgid " Low-Pass" +#~ msgstr " Фильтр НЧ" + +#~ msgid " Uniform" +#~ msgstr " Равномерно" + +#~ msgid "Left Delay" +#~ msgstr "Задержка левого" + +#~ msgid "Right Delay" +#~ msgstr "Задержка правого" + +#~ msgid "Left Dry Level" +#~ msgstr "Уровень ориг. левого" + +#~ msgid "Right Dry Level" +#~ msgstr "Уровень ориг. правого" + +#~ msgid "Left Wet Level" +#~ msgstr "Уровень обраб. левого" + +#~ msgid "Right Wet Level" +#~ msgstr "Уровень обраб. правого" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "Размер быстрого преобразования Фурье" + +#~ msgid "Clipping Range" +#~ msgstr "Диапазон клиппинга" + +#~ msgid "Suppression" +#~ msgstr "Подавление" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Звуковые эффекты для приложений PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Подавление шума" + +#~ msgid "Load APO Preset" +#~ msgstr "Загрузить предустановку APO" + +#~ msgid "Reset Volume of EasyEffects Virtual Devices at Startup" +#~ msgstr "Сбрасывать громкость виртуальных устройств EasyEffects при запуске" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Предустановки выхода: " + +#~ msgid "Input Presets: " +#~ msgstr "Предустановки входа: " + +#~ msgid "Split Mode" +#~ msgstr "Режим раздела" + +#~ msgid "Split 1/2" +#~ msgstr "Разделение 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "Частота раздела 1" + +#~ msgid "Split 2/3" +#~ msgstr "Разделение 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "Частота раздела 2" + +#~ msgid "Split 3/4" +#~ msgstr "Разделение 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "Частота раздела 3" + +#~ msgid "Sub Band" +#~ msgstr "Подполоса" + +#~ msgid "Band 1 Bypass" +#~ msgstr "Полоса 1 обход" + +#~ msgid "Band 1 Solo" +#~ msgstr "Полоса 1 соло" + +#~ msgid "Band 1 Detection" +#~ msgstr "Полоса 1 обнаружение" + +#~ msgid "Band 1 Attack" +#~ msgstr "Полоса 1 атака" + +#~ msgid "Band 1 Release" +#~ msgstr "Полоса 1 восстановление" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Полоса 1 порог" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Полоса 1 соотношение" + +#~ msgid "Band 1 Knee" +#~ msgstr "Полоса 1 колено" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Полоса 1 усиление вверх" + +#~ msgid "Max Reduction" +#~ msgstr "Максимум подавления" + +#~ msgid "Low Band" +#~ msgstr "Низкие частоты" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Полоса 2 обход" + +#~ msgid "Band 2 Solo" +#~ msgstr "Полоса 2 соло" + +#~ msgid "Band 2 Detection" +#~ msgstr "Полоса 2 обнаружение" + +#~ msgid "Band 2 Attack" +#~ msgstr "Полоса 2 атака" + +#~ msgid "Band 2 Release" +#~ msgstr "Полоса 2 восстановление" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Полоса 2 порог" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Полоса 2 соотношение" + +#~ msgid "Band 2 Knee" +#~ msgstr "Полоса 2 колено" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Полоса 2 усиление вверх" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Полоса 2 макс. подавление" + +#~ msgid "Mid Band" +#~ msgstr "Средние частоты" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Полоса 3 обход" + +#~ msgid "Band 3 Solo" +#~ msgstr "Полоса 3 соло" + +#~ msgid "Band 3 Detection" +#~ msgstr "Полоса 3 обнаружение" + +#~ msgid "Band 3 Attack" +#~ msgstr "Полоса 3 атака" + +#~ msgid "Band 3 Release" +#~ msgstr "Полоса 3 восстановление" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Полоса 3 порог" + +#~ msgid "Band 3 Ratio" +#~ msgstr "Полоса 3 соотношение" + +#~ msgid "Band 3 Knee" +#~ msgstr "Полоса 3 колено" + +#~ msgid "Band 3 Makeup" +#~ msgstr "Полоса 3 усиление вверх" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Полоса 3 макс. подавление" + +#~ msgid "High Band" +#~ msgstr "Высокие частоты" + +#~ msgid "Band 4 Bypass" +#~ msgstr "Полоса 4 обход" + +#~ msgid "Band 4 Solo" +#~ msgstr "Полоса 4 соло" + +#~ msgid "Band 4 Detection" +#~ msgstr "Полоса 4 обнаружение" + +#~ msgid "Band 4 Attack" +#~ msgstr "Полоса 4 атака" + +#~ msgid "Band 4 Release" +#~ msgstr "Полоса 4 восстановление" + +#~ msgid "Band 4 Threshold" +#~ msgstr "Полоса 4 порог" + +#~ msgid "Band 4 Ratio" +#~ msgstr "Полоса 4 соотношение" + +#~ msgid "Band 4 Knee" +#~ msgstr "Полоса 4 колено" + +#~ msgid "Band 4 Makeup" +#~ msgstr "Полоса 4 усиление вверх" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Полоса 4 макс. подавление" + +#~ msgid "Wet Amount" +#~ msgstr "Влажность" + +#~ msgid "Dry Amount" +#~ msgstr "Сухость" + +#~ msgid "Wellington Wallace" +#~ msgstr "Веллингтон Уоллис" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects — это продвинутый набор инструментов для работы со звуком. " +#~ "Приложение включает в себя эквалайзер, ограничитель (лимитер), " +#~ "компрессор, утилиту для реверберации и многое другое. Более того, имеется " +#~ "встроенный анализатор аудиоспектра." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects является наследником PulseEffects. EasyEffects поддерживает " +#~ "только PipeWire в качестве аудио-сервера. Пользователи PulseAudio должны " +#~ "продолжать использовать PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Так как EasyEffects использует стандартный сервер PipeWire, программа " +#~ "будет работать с большинством используемых вами приложений. Все " +#~ "поддерживаемые приложения представлены в главном окне, где каждое может " +#~ "быть настроено индивидуально." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Помимо изменения звука на выходе, EasyEffects также может использовать " +#~ "звуковые эффекты для входных аудио-потоков, таких как микрофон. К " +#~ "примеру, это может быть полезно во время аудиозаписи или голосовой " +#~ "конференции." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "При запуске, EasyEffects автоматически подгрузит ваши настройки из " +#~ "предыдущей сессии. Также вы можете сохранить ваши текущие настройки в " +#~ "качестве загружаемого профиля." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "Главная страница отображает приложения с выходными аудио-потоками" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "Страница усиления басов отображает настройки аудио" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "Страница конвольвера отображает настройки аудио" + +#~ msgid "This release adds the following features:" +#~ msgstr "Этот выпуск привносит следующие возможности:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Этот выпуск исправляет следующие ошибки:" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "Улучшен интерфейс плагина высоты тона" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "" +#~ "Значок нашего приложения теперь совместим с рабочими столами, " +#~ "использующими QT" + +#~ msgid "" +#~ "Our blocklist code will use the `application.id` tag if the stream sets it" +#~ msgstr "" +#~ "Наш код чёрного списка будет использовать тег `application.id`, если " +#~ "поток укажет его" + +#~ msgid "" +#~ "In order to avoid problems with the mouse scroll the entries in the " +#~ "applications list shown in our `Players/Recorders`" +#~ msgstr "" +#~ "Во избежание проблем с колесом мыши записи в списке приложений " +#~ "отображаются в `Проигрыватели/Рекордеры`" + +#~ msgid "" +#~ "tab do not show a volume scale anymore. More details about the problem " +#~ "and the solution for it can be found on #1211" +#~ msgstr "" +#~ "вкладка больше не показывает шкалу громкости. Подробнее о проблеме и её " +#~ "решении можно узнать в #1211" + +#~ msgid "and #1427" +#~ msgstr "и #1427" + +#~ msgid "" +#~ "When no application is available for display in the `Players/Recorders` a " +#~ "message will be shown to the user" +#~ msgstr "" +#~ "Когда ни одно приложение не доступно для отображения в `Проигрывателях/" +#~ "Рекордерах`, пользователю будет показано сообщение" + +#~ msgid "Many translation updates" +#~ msgstr "Крупное обновление переводов" + +#, fuzzy +#~ msgid "" +#~ "Fixed a bug where EasyEffects crashed when the number of points displayed " +#~ "in the spectrum was changed while" +#~ msgstr "" +#~ "Исправлена ошибка, при которой EasyEffeects аварийно завершал работу, " +#~ "когда изменялось количество точек, отображаемых в спектре, в то время как" + +#~ msgid "our pipeline was active and the spectrum widget was visible" +#~ msgstr "наш канал обработки был активен, и виджет спектра отображался" + +#~ msgid "" +#~ "The pipeline latency value displayed in our window could be wrong in some " +#~ "situations. This was fixed." +#~ msgstr "" +#~ "Значение задержки канала обработки, отображаемое в нашем окне, могло быть " +#~ "неверным в некоторых ситуациях. Это было исправлено." + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "" +#~ "Появился новый параметр, позволяющая пользователю выбирать тайм-аут " +#~ "бездействия для канала обработки. Когда ни один клиент не играет" + +#~ msgid "" +#~ "to or recording from our devices the filters will be unlinked after the " +#~ "timeout is reached. This is done to make sure" +#~ msgstr "" +#~ "или записывает с наших устройств, фильтры будут отключены после " +#~ "достижения тайм-аута. Это делается для уверенности в том, что" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "не тратится мощность процессора на обработку тишины." + +#~ msgid "" +#~ "The autogain plugin now allows the user to select which of the three " +#~ "loudness are used to calculate the geometric" +#~ msgstr "" +#~ "Плагин нормализации громкости теперь позволяет пользователю выбрать один " +#~ "из трёх уровней для расчета среднего" + +#~ msgid "mean." +#~ msgstr "геометрического." + +#~ msgid "" +#~ "The autogain plugin now allows the maximum history to be set and does not " +#~ "use `libebur128` histogram mode anymore." +#~ msgstr "" +#~ "Плагин нормализации громкости теперь позволяет устанавливать максимальную " +#~ "историю и больше не использует режим гистограммы «libebur128»." + +#~ msgid "" +#~ "This should avoid the cases where the `Integrated` loudness gets stuck " +#~ "forever in the same value." +#~ msgstr "" +#~ "Это поможет избегать случаев, когда «встроенная» громкость навсегда " +#~ "застревает на одном и том же значении." + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "Значок EasyEffects был обновлён таким образом, чтобы сделать его видимым " +#~ "на рабочих столах QT." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "В этом выпуске исправлены следующие ошибки:" + +#~ msgid "" +#~ "The command line option that returns the global bypass state is working " +#~ "again." +#~ msgstr "" +#~ "Параметр командной строки, возвращающий состояние глобального обхода, " +#~ "снова работает." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Этот выпуск добавляет следующие возможности:" + +#~ msgid "" +#~ "The crossfeed filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Фильтр перекрестной подачи должен лучше работать с динамическим " +#~ "изменением задержек PipeWire. Больше не должны возникать ситуации, " +#~ "приводящие к скачкам громкости." + +#~ msgid "" +#~ "Fixed a bug that prevented mono microphones from properly working with " +#~ "EasyEffects" +#~ msgstr "" +#~ "Исправлена ошибка, не дававшая моно-микрофонам корректно работать с " +#~ "EasyEffects" + +#~ msgid "Support for the next PipeWire release `0.3.44`" +#~ msgstr "Поддержка PipeWire версии `0.3.44`" + +#~ msgid "" +#~ "The autogain filter should deal better with PipeWire's dynamic latency " +#~ "switches. Jumps in volume level should not happen anymore in these " +#~ "situations." +#~ msgstr "" +#~ "Фильтр автогейн должен лучше работать с динамическим изменением задержек " +#~ "PipeWire. Теперь ситуации со скачками уровня громкости больше не должны " +#~ "возникать." + +#~ msgid "" +#~ "We added an option that allows the volume and mute state of our virtual " +#~ "devices to be reset when EasyEffects starts. It should help with the " +#~ "cases were our devices are muted by the audio server for unknown reasons." +#~ msgstr "" +#~ "Мы добавили опцию, позволяющую сбрасывать уровень громкости и заглушение " +#~ "устройства во время запуска EasyEffects. Это должно помочь в случае, " +#~ "когда ваши устройства по неизвестным причинам заглушаются аудио-сервером." + +#~ msgid "Better support for computer suspending." +#~ msgstr "Улучшена поддержка спящего режима." + +#~ msgid "Updated translations" +#~ msgstr "Обновление перевода" + +#~ msgid "" +#~ "Fixed a bug where trying to create an autoloading profile without having " +#~ "presets caused the application to crash." +#~ msgstr "" +#~ "Исправлена ошибка, при которой попытка создать профиль для автозагрузки, " +#~ "не имеющий предустановок, приводила к вылету приложения." + +#~ msgid "" +#~ "Fixed a bug where setting a equalizer band `quality` to `zero` would lead " +#~ "to an application crash." +#~ msgstr "" +#~ "Исправлена ошибка, при которой установка полосы эквалайзера в \"ноль\" " +#~ "приводила к аварийному завершению приложения." + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita используется для создания некоторых частей окна приложения и " +#~ "управления переключением между тёмной и светлой темами." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "" +#~ "Дизайн меню настроек приложения был изменен с использованием виджетов " +#~ "LibAdwaita." + +#~ msgid "" +#~ "Equalizer APO preset import feature has been improved to apply not only " +#~ "the Bell filter, but also other supported ones" +#~ msgstr "" +#~ "Функция импорта предустановок для Equalizer APO была улучшена: теперь " +#~ "возможно применить не только \"Bell\", но и другие поддерживаемые фильтры" + +#~ msgid "" +#~ "The `Reset All Settings` function in our menu should work in Flatpak now." +#~ msgstr "" +#~ "Функция «Сброс всех настроек» в меню теперь должна работать и с Flatpak." + +#~ msgid "" +#~ "We have a new option that allows the user to disable our menus " +#~ "`autohide`. This may help to workaround some bugs Popover menus currently " +#~ "have on gtk4." +#~ msgstr "" +#~ "Теперь у нас есть новая опция, которая позволяет пользователю отключить " +#~ "\"автоскрытие\" меню. Это должно помочь обойти некоторые ошибки " +#~ "наложения, имеющиеся в gtk4." + +#~ msgid "" +#~ "More robust parsing to import APO presets saved with comma as thousands " +#~ "separator in central frequency band." +#~ msgstr "" +#~ "Большинство сложных для обработки при импорте предустановок APO, " +#~ "сохранены с использованием запятой в качестве разделителя в центральный " +#~ "полосе частот." + +#~ msgid "" +#~ "The fmt library is a new dependency At least while the c++ compilers do " +#~ "not implement its features. This is expected to happen in the next years." +#~ msgstr "" +#~ "Библиотека fmt является новой зависимостью, поскольку компилятор C++ на " +#~ "данный момент не может реализовать ее возможности. Поддержка ожидается в " +#~ "ближайшие несколько лет." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM и GLIBMM больше не являются зависимостями. Теперь мы используем " +#~ "gtk4 напрямую." + +#~ msgid "" +#~ "It is now possible to combine impulse responses in the Convolver " +#~ "interface. A new impulse file is generated and it should be visible in " +#~ "the impulse list." +#~ msgstr "" +#~ "Теперь вы можете объединять характеристики импульсов в интерфейсе " +#~ "Конвольвера. Новые файлы импульсов созданы и должны быть видны в списке." + +#~ msgid "" +#~ "Improved `x axis` drawings in our plots. Now the number of labels is " +#~ "adjusted dynamically depending on our window width." +#~ msgstr "" +#~ "Улучшена горизонтальная отрисовка внутри окна приложения. Теперь " +#~ "количество элементов изменяется динамически в зависимости от ширины окна." + +#~ msgid "" +#~ "The documentation has been updated reflecting the new EasyEffects " +#~ "features. Old references about PulseEffects have been removed. The " +#~ "documentation button has been added in the menu section." +#~ msgstr "" +#~ "Была обновлена пользовательская документация в связи с добавлением в " +#~ "EasyEffects новых возможностей. Старые отсылки к PulseEffects были " +#~ "удалены. Кнопка для вызова документации была добавлена в качестве секции " +#~ "Меню." + +#~ msgid "" +#~ "When a spinbutton is filled with an out of range value, now it is updated " +#~ "with the lowest/highest value rather than resetting to the previous one." +#~ msgstr "" +#~ "Когда регулятор установлен в положение, превышающее возможное значение, " +#~ "он будет обновлен до наименьшего/высшего значения, наиболее " +#~ "соответствующего предыдущему." + +#~ msgid "" +#~ "The application window now remembers the maximized state and restores it " +#~ "on the next opening event." +#~ msgstr "" +#~ "Окно приложения теперь запоминает свое состояние, и будет восстановлено " +#~ "при его следующем открытии." + +#~ msgid "The `tbb` library is a new dependency" +#~ msgstr "Библиотека tbb теперь является новой зависимостью" + +#~ msgid "" +#~ "The Limiter and the Multiband Compressor plugins can now use an optional " +#~ "external sidechain." +#~ msgstr "" +#~ "Плагины Лимитер и Многополосный компрессор теперь могут использоваться в " +#~ "качестве опционального внешнего сайдчейна." + +#~ msgid "" +#~ "The Autogain plugin now allows the user to select which Loudness is used " +#~ "as reference for the volume correction." +#~ msgstr "" +#~ "Плагин Автогейн теперь позволяет пользователям выбрать, какая громкость " +#~ "будет использоваться в качестве значения для коррекции её уровня." + +#~ msgid "" +#~ "The APO Profile Import feature of Equalizer plugin now parses the \"Pre " +#~ "Amplification\" parameter." +#~ msgstr "" +#~ "Функция импорта предустановок APO для плагина Эквалайзера, теперь " +#~ "считывает параметры Предусиления." + +#~ msgid "Optional Cubic Volume can be enabled in General Settings." +#~ msgstr "" +#~ "Теперь в главных настройках можно выбрать Кубический Уровень в качестве " +#~ "опции." + +#~ msgid "" +#~ "PipeWire monitor streams are now excluded and removed from the " +#~ "applications list." +#~ msgstr "" +#~ "Монитор источников PipeWire был исключён и удалён из списка приложений." + +#~ msgid "Hopefully crashes like the one reported at [1172]( are fixed." +#~ msgstr "" +#~ "Надеемся, что ошибки вылета приложения, указанные в отчете [1172] были " +#~ "исправлены." + +#~ msgid "Prevented a case in which Spectrum was crashing." +#~ msgstr "" +#~ "Предотвращена ошибка, связанная со Спектром, приводящая к аварийному " +#~ "завершению приложения." + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "Pavucontrol больше не указывается в списке приложений с источниками " +#~ "аудиопотоков в системах, локализация которых отличается от английской." + +#~ msgid "" +#~ "Improved compatibility with WirePlumber. This is needed to run on systems " +#~ "that decided to use it instead of the" +#~ msgstr "" +#~ "Улучшена совместимость с WirePlumber, необходимая для работы в системах, " +#~ "использующих го в качестве основного" + +#~ msgid "built-in PipeWire session manager. More information at issue [1144](" +#~ msgstr "" +#~ "менеджера управления сессиями PipeWire. Больше информации в отчете [1144]" + +#~ msgid "" +#~ "When trying to add an autoloading profile for a device already in the " +#~ "list its target preset will be updated. This way we can change the " +#~ "profile preset without having to remove and recreating it." +#~ msgstr "" +#~ "При попытке добавить профиль для автозагрузки для устройства, " +#~ "находящегося в списке, его цель будет обновлена. С помощью этого, мы " +#~ "сможем изменять предустановки профиля без необходимости удалять и " +#~ "пересоздавать его заново." + +#~ msgid "" +#~ "The preset autoloading support implementation was redesigned again. It " +#~ "should work on more hardware now. For more information see issue [1051](" +#~ msgstr "" +#~ "Реализация поддержки автозагрузки профилей была заново переписана. Теперь " +#~ "она должна работать с большим количеством оборудования. Более детальная " +#~ "информация в отчете [1051]" + +#~ msgid "" +#~ "If the Limiter or the Maximizer are set in the last position of the " +#~ "plugin stack, new plugins are added at the second to last position in " +#~ "order to prevent hardware damage on eventually high output level." +#~ msgstr "" +#~ "Лимитер и Максимизатор теперь устанавливаются в последнюю позицию цепочки " +#~ "плагинов. Новые плагины добавляются в предыдущую секцию с целью " +#~ "предотвращения порчи оборудования чрезмерным выходным уровнем громкости." + +#~ msgid "" +#~ "Removing an application from the blocklist, its previous enabled state is " +#~ "restored." +#~ msgstr "" +#~ "При удалении приложения из черного списка, его предшествующее состояние " +#~ "будет восстановлено." + +#~ msgid "" +#~ "Sometimes when removing imported models from the noise reduction plugin " +#~ "the current used model was not properly updated. This should be fixed now." +#~ msgstr "" +#~ "Иногда, во время удаления импортированной модели в плагине " +#~ "шумоподавления, текущая используемая модель не обновлялась корректно. " +#~ "Теперь должно работать как положено." + +#~ msgid "" +#~ "When editing presets files in an external editor, duplicated entries " +#~ "won't be shown in our presets menu." +#~ msgstr "" +#~ "Во время правки файла предустановок во внешнем редакторе, повторяющиеся " +#~ "параметры не будут отображаться в меню." + +#~ msgid "Now the blocklist is correctly set when switching presets." +#~ msgstr "" +#~ "Теперь чёрный список правильно устанавливается при смене предустановок." + +#~ msgid "" +#~ "Now the status of the global bypass button is correctly updated when " +#~ "changing plugin stack." +#~ msgstr "" +#~ "Теперь статус при нажатии на кнопку глобального обхода корректно " +#~ "отображается при смене набора плагинов." + +#~ msgid "" +#~ "Missing icons on the system should not be shown inside the application " +#~ "info UI" +#~ msgstr "" +#~ "Потерянные системные значки теперь не должны отображаться внутри " +#~ "пользовательского интерфейса приложения" + +#~ msgid "" +#~ "Some icons not showing in Plasma DE with Breeze icon theme should appear " +#~ "now." +#~ msgstr "" +#~ "Некоторые значки, которые не отображались в окружении рабочего стола " +#~ "Plasma с темой Breeze, теперь должны отображаться." + +#~ msgid "Updated Chinese translation." +#~ msgstr "Обновлен Китайский перевод." + +#~ msgid "Updated Italian translation." +#~ msgstr "Обновлен перевод на Итальянский." + +#~ msgid "Added support for the compressor parameter `Boost Amount`" +#~ msgstr "В компрессор добавлена поддержка параметра `Boost Amount`" + +#~ msgid "" +#~ "The multiband compressor plugin now uses the stereo multiband compressor " +#~ "plugin from Linux Studio Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Плагин многополосного компрессора теперь использует плагин стерео " +#~ "многополосного компрессора из набора плагинов Linux Studio Plugins взамен " +#~ "Calf Studio." + +#~ msgid "" +#~ "The limiter plugin now uses the stereo limiter plugin from Linux Studio " +#~ "Plugins instead of the one from Calf Studio." +#~ msgstr "" +#~ "Плагин лимитера теперь использует стерео плагин лимитера из набора Linux " +#~ "Studio Plugins взамен Calf Studio." + +#~ msgid "" +#~ "LV2 filters now are spawned in PipeWire graph only when loaded the first " +#~ "time. Once loaded, they remain connected until EasyEffects shutdown." +#~ msgstr "" +#~ "Наборы LV2 фильтров отображаются в графе PipeWire только во время первой " +#~ "загрузки. Однажды загруженные, они останутся включёнными до тех пор пока " +#~ "EasyEffects продолжает работу." + +#~ msgid "The echo canceller sampling rate is now properly set." +#~ msgstr "" +#~ "Теперь для модуля эхоподавления возможно установить частотный спектр." + +#~ msgid "" +#~ "The threshold parameter from the deesser plugin is now saved to the " +#~ "preset file." +#~ msgstr "" +#~ "Уровень порогового значения в плагине антишипения (деэссера) теперь " +#~ "сохраняется в файле предустановки." + +#~ msgid "" +#~ "Improved band splitting for crystalizer with new default intensity values." +#~ msgstr "" +#~ "Улучшено полосное разделение для кристаллизатора с новыми значениями " +#~ "интенсивности по умолчанию." + +#~ msgid "" +#~ "Depending on the input gain or output gain values the corresponding level " +#~ "bars could not be aligned." +#~ msgstr "" +#~ "Зависимости во входных и выходных уровнях громкости теперь коррелируют со " +#~ "значениями регулятора, которые ранее нельзя было выровнять." + +#~ msgid "" +#~ "When adding more equalizer bands they are set to `Bell` instead of `Off`." +#~ msgstr "" +#~ "При добавлении новых полос в эквалайзер их значение равно «Bell» вместо " +#~ "«Отключено»." + +#~ msgid "" +#~ "Equalizer APO presets loading is now working properly on locales " +#~ "different than C." +#~ msgstr "" +#~ "Предустановки для Эквалайзера APO теперь работают корректно с языками, " +#~ "отличными от С." + +#~ msgid "Improved linking management between port filter nodes in PipeWire." +#~ msgstr "" +#~ "Улучшено взаимодействие между точками пересечения портов фильтров в " +#~ "PipeWire." + +#~ msgid "" +#~ "The crystalizer plugin signal amplification was too high before. It " +#~ "should be within more reasonable levels now." +#~ msgstr "" +#~ "Ранее, усиление сигнала в плагине кристаллизатора было слишком высоким. " +#~ "Установлены более адекватные значения." + +#~ msgid "" +#~ "Improved the resampler used in the plugins that require one(like the " +#~ "rnnoise plugin)" +#~ msgstr "Улучшена работа ресемлера с некоторыми плагинами (rnnoise и пр.)" + +#~ msgid "Setting multiple autoloading presets should be fine now" +#~ msgstr "" +#~ "Установка множества предустановок для автозагрузки теперь должно работать " +#~ "корректно" + +#~ msgid "Transient windows are now properly set for some plugins dialogs" +#~ msgstr "" +#~ "Временные окна для взаимодействия с некоторыми плагинами теперь работают " +#~ "корректно" + +#~ msgid "" +#~ "The convolver impulse response menu was improved to workaround an issue " +#~ "where the impulse files was not loaded when only one was available in the " +#~ "menu" +#~ msgstr "" +#~ "Была исправлена ошибка меню конвольвера, при которой файлы импульсов не " +#~ "подгружались, если на выбор доступна только одна опция" + +#~ msgid "" +#~ "Fixed a bug that could make the pitch plugin to not be properly " +#~ "initialized" +#~ msgstr "" +#~ "Исправлена ошибка, при которой плагин высоты тона не мог правильно " +#~ "инициализироваться" + +#~ msgid "" +#~ "The saturation warning should not displace its neighbor widgets anymore" +#~ msgstr "" +#~ "Предупреждение о переполнении больше не должно менять расположение " +#~ "соседних виджетов" + +#~ msgid "Fixed the locale in a few widgets" +#~ msgstr "Исправлен перевод некоторых виджетов" + +#~ msgid "Fixed wrong alignment in a few widgets" +#~ msgstr "Исправлено неправильное выравнивание некоторых виджетов" + +#~ msgid "" +#~ "The Loudness plugin is being used again for the reasons described at This " +#~ "means that is an optional dependency again." +#~ msgstr "" +#~ "По указаным выше причинам, лагин работы с громкостью теперь снова " +#~ "доступен. Это значит, что он снова добавлен в список опциональных " +#~ "зависимостей." + +#~ msgid "" +#~ "Fixed a segmentation fault that happened when optional dependencies were " +#~ "not installed" +#~ msgstr "" +#~ "Исправлена ошибка сегментирования, возникавшая в случае, когда " +#~ "опциональные зависимости не были установлены" + +#~ msgid "Improved equalizer interface." +#~ msgstr "Улучшен интерфейс эквалайзера." + +#~ msgid "" +#~ "Now we use a sidechain LSP compressor that allows the user to select and " +#~ "external source as the sidechain input." +#~ msgstr "" +#~ "Теперь используется компрессор LSP, что позволяет пользователю выбрать " +#~ "внешний источник в качестве входного сайдчейна." + +#~ msgid "We now support the LSP compressor `Boosting` mode." +#~ msgstr "Теперь компрессор LSP поддерживает режим 'Усиление'." + +#~ msgid "" +#~ "When `split-channels` is enabled in the equalizer the imported APO preset " +#~ "will be applied only to the channel being visualized in the window. This " +#~ "will allow to import different presets for each channel instead of just " +#~ "settings the same values to both." +#~ msgstr "" +#~ "Когда 'смещение каналов' активировано в эквалайзере, предустановки " +#~ "импортированные из APO будут применены только к каналу, отображаемому в " +#~ "окне. Это позволяет применять различные предустановки для каждого канала " +#~ "вместо установки одинакового значения в обоих каналах." + +#~ msgid "" +#~ "Fixed some segmentation faults that could happen when creating a preset " +#~ "autoloading profile or removing presets" +#~ msgstr "" +#~ "Исправлены ошибки сегментирования, возникавшие при создании или удалении " +#~ "предустановок, используемых для автозагрузки" + +#~ msgid "" +#~ "This is one of the biggest releases that I have ever made. The amount of " +#~ "changes is so big that it is hard to talk about everything here." +#~ msgstr "" +#~ "Этот выпуск является одним из самых крупных, что мы делали за всё время. " +#~ "Объём изменений обширен, поэтому очень трудно описать их все." + +#~ msgid "" +#~ "The following are just the most import ones. People interested on the " +#~ "journey that got us here can take" +#~ msgstr "" +#~ "Перечисленные изменения являются самыми важными на наш взгляд. Если вам " +#~ "интересны возможности, предоставляемые приложением, просто возьмите" + +#~ msgid "a look at and" +#~ msgstr "и опробуйте их" + +#~ msgid "" +#~ "The application and its repository have been renamed from PulseEffects to " +#~ "`EasyEffects`" +#~ msgstr "Приложение и его репозиторий были переименованы в 'EasyEffects'" + +#~ msgid "gtkmm3 was replaced by gtkmm4" +#~ msgstr "gtkmm3 был заменен на gtkmm4" + +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "Фильтры GStreamer были заменены на собственные фильтры PipeWire." + +#~ msgid "" +#~ "Many features were reimplemented from scratch. The preset autoloading is " +#~ "one example. Another remarkable change will be seen in the plugins " +#~ "selection menu. Now the user can show in the window only the plugins that " +#~ "he/she wants to use." +#~ msgstr "" +#~ "Множество возможностей былы переписаны с нуля. Например предустановки для " +#~ "автозагрузки. Другие изменения, которые стоит упомянуть, можно увидеть в " +#~ "меню выбора плагинов. Теперь пользователь может отобразить в окне только " +#~ "те плагины, которые посчитает необходимыми." + +#~ msgid "" +#~ "Boost is no longer a dependency. The price paid for that was a little " +#~ "change in our presets structures. With some patience it is possible to " +#~ "edit PulseEffects presets in a text editor and make them work in " +#~ "EasyEffects. Hopefully someone will come up with a script for this in the " +#~ "feature." +#~ msgstr "" +#~ "Библиотека Boost более не является зависимостью. Ценой данного решения " +#~ "является небольшое изменение структуры предустановок. Имея немного " +#~ "терпения, можно отредактировать предустановки PulseEffects в любом " +#~ "текстовом редакторе, чтобы сделать их совместимыми с EasyEffects. " +#~ "Надеемся, кто нибудь создаст скрипт для автоматизации данной возможности." + +#~ msgid "" +#~ "New libraries are being used and some of the librarires that were " +#~ "optional before are now required" +#~ msgstr "" +#~ "Наличие некоторых новых библиотек, ранее считавшиеся опциональными, " +#~ "теперь является обязательным" + +#~ msgid "Average" +#~ msgstr "Средняя" + +#~ msgid "Failed" +#~ msgstr "Не удалось" + +#~ msgid "Use Default" +#~ msgstr "Установить по умолчанию" + +#~ msgid "Remove this plugin" +#~ msgstr "Удалить этот плагин" + +#~ msgid "Import Presets" +#~ msgstr "Импорт предустановок" + +#~ msgid "Start Service at Login" +#~ msgstr "Запуск службы при запуске" + +#~ msgid "Reset Our Devices Volume on Startup" +#~ msgstr "Сброс громкости устройств при запуске" + +#~ msgid "Activate" +#~ msgstr "Активировать" + +#~ msgid "Add to Blocklist" +#~ msgstr "Добавить в чёрный список" + +#~ msgid "Blocklist" +#~ msgstr "Чёрный список" + +#~ msgid "Add Plugin" +#~ msgstr "Добавить плагин" + +#~ msgid "Speakers" +#~ msgstr "Динамики" + +#~ msgid "Microphone" +#~ msgstr "Микрофон" + +#~ msgid "Plugins" +#~ msgstr "Плагины" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Включено" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Включено" + +#~ msgid "Format" +#~ msgstr "Формат" + +#~ msgid "Latency" +#~ msgstr "Задержка" + +#~ msgid "idle" +#~ msgstr "простаивание" + +#~ msgid "Faster" +#~ msgstr "Быстрее" + +#~ msgid "Preserve Formant" +#~ msgstr "Сохранить формат" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Усиление выхода" + +#~ msgid "Channel" +#~ msgstr "Канал" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Нижний порог" + +#~ msgid "Output Effects" +#~ msgstr "Эффекты для вывода звука" + +#~ msgid "Settings" +#~ msgstr "Настройки" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Настройки" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Продолжительность" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Проверочный сигнал" + +#~ msgid "Signal" +#~ msgstr "Сигнал" + +#~ msgid "Show Spectrum" +#~ msgstr "Показывать спектр" + +#~ msgid "Border" +#~ msgstr "Граница" + +#~ msgid "Spectrum Type" +#~ msgstr "Тип спектра" + +#~ msgid "Spectrum Color" +#~ msgstr "Цвет спектра" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Активная модель" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Увеличение ослабления" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Вес в расчете громкости" + +#~ msgid "Dry" +#~ msgstr "Влажность" + +#~ msgid "S/C Level" +#~ msgstr "Уровень Раздельный/Центр" + +#~ msgid "Phase Correlation" +#~ msgstr "Корреляция фазы" + +#~ msgid "Short Term" +#~ msgstr "Короткие измерения" + +#~ msgid "Id" +#~ msgstr "Id" + +#~ msgid "Preamp" +#~ msgstr "Предусилитель" + +#~ msgid "Run in Background" +#~ msgstr "Запускать в фоновом режиме" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Настройка громкости и вкл/откл эффектов" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Содержит эквалайзер с предустановками" + +#~ msgid "Input Limiter" +#~ msgstr "Ограничитель ввода" + +#~ msgid "Calibration" +#~ msgstr "Калибровка" + +#~ msgid "Limit" +#~ msgstr "Ограничение" + +#~ msgid "ASC" +#~ msgstr "Адаптивное управление наклоном" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Аудиоэффекты для приложений PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Аудиоэффекты для приложений PulseAudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Калибровка корректировки микрофона" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Автоматически применять этот набор предустановок, когда текущее звукое " +#~ "устройство подключают к системе" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Версия" + +#~ msgid "Sine" +#~ msgstr "Синусоида" + +#~ msgid "Square" +#~ msgstr "Квадратный" + +#~ msgid "Saw" +#~ msgstr "Пилообразный" + +#~ msgid "Triangle" +#~ msgstr "Треугольный" + +#~ msgid "Pink Noise" +#~ msgstr "Розовый шум" + +#~ msgid "Ticks" +#~ msgstr "Тики" + +#~ msgid "Gaussian Noise" +#~ msgstr "Гауссовский шум" + +#~ msgid "Blue Noise" +#~ msgstr "Голубой шум" + +#~ msgid "Violet Noise" +#~ msgstr "Фиолетовый шум" + +#~ msgid "Volume" +#~ msgstr "Громкость" + +#~ msgid "Measure Noise" +#~ msgstr "Измерение шума" + +#~ msgid "Subtract Noise" +#~ msgstr "Вычетание шума" + +#~ msgid "Extended Filter" +#~ msgstr "Расширенный фильтр" + +#~ msgid "Low" +#~ msgstr "Низкочастотный фильтр" + +#~ msgid "Moderate" +#~ msgstr "Средний" + +#~ msgid "High" +#~ msgstr "Высокий" + +#~ msgid "Delay Agnostic" +#~ msgstr "Задержка" + +#~ msgid "Very High" +#~ msgstr "Очень высокий" + +# # TODO: Mode/Режим заменить на "Режим сжатия" +#~ msgid "Adaptive Digital" +#~ msgstr "Адаптивное цифровое сжатие" + +#~ msgid "Fixed Digital" +#~ msgstr "Фиксированное цифровое сжатие" + +#~ msgid "Detection Likelihood" +#~ msgstr "Вероятность обнаружения" + +#~ msgid "Very Low" +#~ msgstr "Очень низкий" + +#~ msgid "Use Custom Color" +#~ msgstr "Использовать свой цвет" + +#~ msgid "Use Gradient" +#~ msgstr "Использовать градиент" + +#~ msgid "Gradient Color" +#~ msgstr "Цвет градиента" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Импортировать файл импульсной реакции" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Выбрать файл с импульсной реакцией" + +#~ msgid "Aggressive Mode" +#~ msgstr "Агрессивный режим" + +#~ msgid "Before" +#~ msgstr "До" + +#~ msgid "After" +#~ msgstr "После" + +#~ msgid "Loudness Range" +#~ msgstr "Диапазон громкости" + +#~ msgid "Apply" +#~ msgstr "Применить" + +#, fuzzy +#~ msgid "Default Clock Rate" +#~ msgstr "Частота дискретизации по умолчанию" + +#~ msgid "Server" +#~ msgstr "Сервер" + +#~ msgid "File" +#~ msgstr "Файл" + +#~ msgid "Configuration" +#~ msgstr "Параметры" + +#, fuzzy +#~ msgid "server" +#~ msgstr "Сервер" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Подсчитать частоты" + +# #, fuzzy +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Параметры" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Предустановки" + +#~ msgid "Detect Silence" +#~ msgstr "Определять тишину" + +#~ msgid "Muted" +#~ msgstr "Приглушенный" + +#~ msgid "Distant Headphones" +#~ msgstr "Находящиеся далеко наушники" + +#~ msgid "Priority Type" +#~ msgstr "Тип приоритета процесса" + +#~ msgid "Niceness" +#~ msgstr "Приоритет процесса (nice)" + +#~ msgid "Priority" +#~ msgstr "Приоритет" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Частота" + +#, fuzzy +#~ msgid "Maximum Frequency" +#~ msgstr "Частота" + +#~ msgid "About" +#~ msgstr "О программе" + +#~ msgid "Protocol" +#~ msgstr "Версия протокола сервера" + +#~ msgid "Default Sample Format" +#~ msgstr "Спецификация отсчётов по умолчанию" + +#~ msgid "Resamplers" +#~ msgstr "Ресемплеры" + +#~ msgid "Buffer" +#~ msgstr "Буфер" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Эквалайзер - Выход" + +# Taking lingual shortcuts to squeeze it in the text box +#~ msgid "Block Size" +#~ msgstr "Размер блока" + +#~ msgid "Resampler" +#~ msgstr "Ресемплер" + +#~ msgid "paused" +#~ msgstr "на паузе" + +#~ msgid "playing" +#~ msgstr "воспроизводится" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Импортировать предустановки" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Увеличение ослабления" + +#~ msgid "Exponent" +#~ msgstr "Степень" + +#~ msgid "Red Noise" +#~ msgstr "Красный шум" + +#~ msgid "Noise Suppressor" +#~ msgstr "Простой шумодав" + +#~ msgid "Voice Detector" +#~ msgstr "Обнаруживатель голоса" + +#~ msgid "Gain Controller" +#~ msgstr "Автоконтроль усиления (AGC)" diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..2e4d619 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,3547 @@ +# Slovak translation for Pulseeffects. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Mlocik97 , 2020. +# Jose Riha , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-09 14:07+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ekvalizér, kompresor a ďalšie audio efekty" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Zvukové efekty pre aplikácie využívajúce PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "obmedzovač;kompresor;ozvena;ekvalizér;automatická hlasitosť;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Predvoľby\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +#, fuzzy +msgid "Enable" +msgstr "Povolené" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +#, fuzzy +msgid "Mute Application" +msgstr "Aplikácie" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +#, fuzzy +msgid "Application Volume" +msgstr "Aplikácie" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Pomocník" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "Nastavenia" + +#: data/ui/application_window.ui:18 +#, fuzzy +msgid "_Preferences" +msgstr "Referenčný Signál" + +#: data/ui/application_window.ui:22 +#, fuzzy +msgid "_Shortcuts" +msgstr "Krátkodobá" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "Vstupné efekty" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Predvoľby" + +#: data/ui/application_window.ui:55 +#, fuzzy +msgid "Presets Menu" +msgstr "Predvoľby" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Globálne premostenie" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +#, fuzzy +msgid "Easy Effects Window" +msgstr "PulseEffects" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Aplikácie" + +#: data/ui/apps_box.ui:27 +#, fuzzy +msgid "Empty List" +msgstr "Prázdne steny" + +#: data/ui/apps_box.ui:28 +#, fuzzy +msgid "No Audio Application Available" +msgstr "Aplikácie" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Vymazať históriu" + +#: data/ui/autogain.ui:39 +#, fuzzy +msgid "Controls" +msgstr "Ovládač zosilnenia" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Cieľ" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Ticho" + +#: data/ui/autogain.ui:92 +#, fuzzy +msgid "Maximum History" +msgstr "Maximálna" + +#: data/ui/autogain.ui:116 +#, fuzzy +msgid "Reference" +msgstr "Referenčný Signál" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Okamžitá" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Krátkodobá" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Integrovaná" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Použiť geometrický priemer" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Použiť geometrický priemer" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Použiť geometrický priemer" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Použiť geometrický priemer" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Hlasitosť" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Relatívna" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Rozsah" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Výstupný Zisk" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Vstup" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +#, fuzzy +msgid "Plugin Input Gain" +msgstr "Výstupný Zisk" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Výstup" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +#, fuzzy +msgid "Plugin Output Gain" +msgstr "Výstupný Zisk" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Obnoviť pôvodné hodnoty" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Názov" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Predvoľby" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Odstrániť predvoľbu" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Počúvať" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Miešať harmonické kmity" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3." + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2." + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Množstvo" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonickosť" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Rozsah" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Spodná hranica" + +#: data/ui/bass_enhancer.ui:240 +#, fuzzy +msgid "Floor Value" +msgstr "Spodná hranica" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +#, fuzzy +msgid "Application Name" +msgstr "Aplikácie" + +#: data/ui/blocklist_menu.ui:42 +#, fuzzy +msgid "Add to Excluded Applications" +msgstr "Zobraziť aplikácie zo zoznamu blokovaných na hlavnej karte" + +#: data/ui/blocklist_menu.ui:86 +#, fuzzy +msgid "Excluded Applications List" +msgstr "Aplikácie" + +#: data/ui/blocklist_menu.ui:99 +#, fuzzy +msgid "Show Excluded Applications" +msgstr "Zobraziť aplikácie zo zoznamu blokovaných na hlavnej karte" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Skryť okno" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompresor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Režim" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Dole" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Hore" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Mód kompresora" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Zvýrazniť prah" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +#, fuzzy +msgid "Boost Amount" +msgstr "Množstvo" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Nábeh" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +#, fuzzy +msgid "Time" +msgstr "V reálnom čase" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Prah" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +#, fuzzy +msgid "Attack Time" +msgstr "Nábeh" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +#, fuzzy +msgid "Attack Threshold" +msgstr "Prah" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Uvoľnenie" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +#, fuzzy +msgid "Release Time" +msgstr "Uvoľnenie" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +#, fuzzy +msgid "Release Threshold" +msgstr "Relatívny prah uvoľnenia" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Pomer" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Prechod" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Pozdvihnutie" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Úroveň F2" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Cieľová úroveň" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Postranný reťazec" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Režim sterea" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Zdroj" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Stredný" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Postranný" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Ľavý" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Pravý" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Maximálna" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Maximálna" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +#, fuzzy +msgid "Sidechain Source" +msgstr "Postranný reťazec" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Oneskorenie Ľavo/Pravo" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Pravý" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Postranný" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Postranný" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Predvolený bdroj" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Vrchol" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +#, fuzzy +msgid "Low-Pass Filter" +msgstr "Režim filtra vysokej priepuste" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +#, fuzzy +msgid "Sidechain Mode" +msgstr "Postranný reťazec" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Postranný reťazec" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Typ" + +#: data/ui/compressor.ui:699 +#, fuzzy +msgid "Feed-forward" +msgstr "Kanál-Vpred" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Kanál-Vzad" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +#, fuzzy +msgid "Sidechain Type" +msgstr "Postranný reťazec" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +#, fuzzy +msgid "Input Device" +msgstr "Obmedzovač na vstupe" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +#, fuzzy +msgid "PreAmplification" +msgstr "Predzosilnenie" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Reaktivita" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "Výhľad" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +#, fuzzy +msgid "Sidechain Filters" +msgstr "Postranný reťazec" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +#, fuzzy +msgid "High-Pass" +msgstr "Horné pásmo" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frekvencia" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Vyp" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/okt" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/okt" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/okt" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +#, fuzzy +msgid "High-Pass Filter Mode" +msgstr "Režim filtra vysokej priepuste" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +#, fuzzy +msgid "High-Pass Filter Frequency" +msgstr "Frekvencia vysokej priepuste" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Dolná priepusť" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +#, fuzzy +msgid "Low-Pass Filter Mode" +msgstr "Režim filtra vysokej priepuste" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Zisk" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Sklon" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Krivka" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "Ľ" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +#, fuzzy +msgid "Left Channel" +msgstr "Kanály" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "P" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +#, fuzzy +msgid "Right Channel" +msgstr "Rozdeliť kanály" + +#: data/ui/convolver.ui:71 +#, fuzzy +msgid "Impulses" +msgstr "Odpoveď impulzu" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Šírka sterea" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +#, fuzzy +msgid "Log Scale" +msgstr "Mierka" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +#, fuzzy +msgid "Autogain" +msgstr "Automatická hlasitosť" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Kmitočet" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Vzorky" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Trvanie" + +#: data/ui/convolver_menu_combine.ui:15 +#, fuzzy +msgid "Combine Impulse Responses" +msgstr "Odpoveď impulzu" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +#, fuzzy +msgid "Output File Name" +msgstr "Výstup" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importovať impulz" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +#, fuzzy +msgid "Search Impulse File" +msgstr "Načítať súbor impulzu" + +#: data/ui/convolver_menu_impulses.ui:47 +#, fuzzy +msgid "Impulse Files List" +msgstr "Načítať súbor impulzu" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Predvolený" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Zrezanie" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Kanál" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Premostiť" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Stíšený" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Detekcia" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Široký" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Rozdeliť" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "Rozdeliť F1" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Frekvencia" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "Vrchol F2" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Frekvencia" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "Zisk F1" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Frekvencia" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "Úroveň F2" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Frekvencia" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 vrchol Q" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Frekvencia" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Nedbanlivosť" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Zistené" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +#, fuzzy +msgid "Reduction" +msgstr "Redukcia" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Oneskorenie" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Preklopiť fázu" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Zoslabenie" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filter" + +#: data/ui/echo_canceller.ui:27 +#, fuzzy +msgid "Filter Length" +msgstr "Filter" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Potlačenie šumu" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Potlačenie šumu" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Pásma" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Vyváženie" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Postranný reťazec" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Postranný reťazec" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Rozdeliť kanály" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Vyhladiť" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Vypočítať frekvencie" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Pásma" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +#, fuzzy +msgid "Import Preset" +msgstr "Načítať predvoľbu" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Sklon" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Sólo" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kvalita" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Šírka" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Strop" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Pásma" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +#, fuzzy +msgid "Internal" +msgstr "Integrovaná" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +#, fuzzy +msgid "Description" +msgstr "Detekcia" + +#: data/ui/factory_rnnoise_listview.ui:24 +#, fuzzy +msgid "Remove this model file" +msgstr "Odstrániť predvoľbu" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Spodný prah" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Horný prah" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Zvonček" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Premostiť" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Zárez" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Rezonancia" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Dolná priepusť" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Redukcia zosilnenia" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Dolné Pásmo" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ekvalizér" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Brána" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +#, fuzzy +msgid "Release Zone Start" +msgstr "Uvoľnenie" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frekvencia" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Prevzorkovanie" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Široký" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Široký" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Šírka čiary" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Šírka čiary" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Šírka čiary" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Žiadny" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Predzosilnenie" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Spojenie sterea" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +#, fuzzy +msgid "External Sidechain" +msgstr "Postranný reťazec" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Automatické úrovne" + +#: data/ui/limiter.ui:537 +#, fuzzy +msgid "Auto Leveling Attack" +msgstr "Automatické úrovne" + +#: data/ui/limiter.ui:573 +#, fuzzy +msgid "Auto Leveling Release" +msgstr "Automatické úrovne" + +#: data/ui/limiter.ui:608 +#, fuzzy +msgid "Auto Leveling Knee" +msgstr "Automatické úrovne" + +#: data/ui/limiter.ui:633 +#, fuzzy +msgid "Gain Left" +msgstr "Ľavý" + +#: data/ui/limiter.ui:660 +#, fuzzy +msgid "Gain Right" +msgstr "Pravý" + +#: data/ui/limiter.ui:687 +#, fuzzy +msgid "Sidechain Left" +msgstr "Postranný reťazec" + +#: data/ui/limiter.ui:714 +#, fuzzy +msgid "Sidechain Right" +msgstr "Postranný reťazec" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Štandardný" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Rovný" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "Veľkosť FFT" + +#: data/ui/loudness.ui:82 +#, fuzzy +msgid "Output Volume" +msgstr "Výstup" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Priradenie kanála" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Strop" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Postranný reťazec" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +#, fuzzy +msgid "Operating Mode" +msgstr "Importovať model" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +#, fuzzy +msgid "Modern" +msgstr "Režim" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Preklopiť fázu" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +#, fuzzy +msgid "Bands List" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +#, fuzzy +msgid "Band 1" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +#, fuzzy +msgid "Band 2" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +#, fuzzy +msgid "Band 3" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +#, fuzzy +msgid "Band 4" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +#, fuzzy +msgid "Band 5" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +#, fuzzy +msgid "Band 6" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +#, fuzzy +msgid "Band 7" +msgstr "Pásma" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +#, fuzzy +msgid "Band 8" +msgstr "Pásma" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +#, fuzzy +msgid "Band End" +msgstr "Pásma" + +#: data/ui/multiband_compressor_band.ui:112 +#, fuzzy +msgid "Band Compression Mode" +msgstr "Mód kompresora" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Premostiť" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +#, fuzzy +msgid "Band Sidechain Options" +msgstr "Postranný reťazec" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Režim sterea" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Režim filtra nízkej priepuste" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Režim filtra nízkej priepuste" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Horný prechod" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Horný prechod" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +#, fuzzy +msgid "Band Gain" +msgstr "Vstupné Zosilnenie" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +#, fuzzy +msgid "Band Curve" +msgstr "Krivka" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Redukcia zosilnenia" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Všeobecné" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +#, fuzzy +msgid "Use Default Input" +msgstr "Použiť predvolený" + +#: data/ui/pipe_manager_box.ui:65 +#, fuzzy +msgid "Custom Input Device" +msgstr "Obmedzovač na vstupe" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +#, fuzzy +msgid "Use Default Output" +msgstr "Použiť predvolený" + +#: data/ui/pipe_manager_box.ui:101 +#, fuzzy +msgid "Custom Output Device" +msgstr "Výstupné efekty" + +#: data/ui/pipe_manager_box.ui:112 +#, fuzzy +msgid "Server Information" +msgstr "Ozvena (reverb)" + +#: data/ui/pipe_manager_box.ui:116 +#, fuzzy +msgid "Header Version" +msgstr "Verzia" + +#: data/ui/pipe_manager_box.ui:127 +#, fuzzy +msgid "Library Version" +msgstr "Verzia" + +#: data/ui/pipe_manager_box.ui:138 +#, fuzzy +msgid "Sampling Rate" +msgstr "Predvolená rýchlosť vzorkovania" + +#: data/ui/pipe_manager_box.ui:149 +#, fuzzy +msgid "Minimum Quantum" +msgstr "Minimálna frekvencia" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Maximálny zisk" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Predvolené Zoslabnutie" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +#, fuzzy +msgid "Output Devices" +msgstr "Výstupné efekty" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Výstupné predvoľby:" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Výstupné predvoľby:" + +#: data/ui/pipe_manager_box.ui:329 +#, fuzzy +msgid "Input Devices" +msgstr "Obmedzovač na vstupe" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +#, fuzzy +msgid "Input Presets" +msgstr "Vstupné predvoľby: " + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +#, fuzzy +msgid "Input Autoloading Presets List" +msgstr "Vstupné predvoľby: " + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Moduly" + +#: data/ui/pipe_manager_box.ui:429 +#, fuzzy +msgid "Modules List" +msgstr "Moduly" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "Klienti" + +#: data/ui/pipe_manager_box.ui:461 +#, fuzzy +msgid "Clients List" +msgstr "Klienti" + +#: data/ui/pipe_manager_box.ui:475 +#, fuzzy +msgid "Test Signal" +msgstr "Skúšobné signály" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Stav" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +#, fuzzy +msgid "Enabled" +msgstr "Povolené" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanály" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +#, fuzzy +msgid "Both Channels" +msgstr "Kanály" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +#, fuzzy +msgid "Sine Wave" +msgstr "Sínusová tabuľka" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Biely šum" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frekvencia" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Okno" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filter" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Výška tónu" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Poltóny" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Referenčný Signál" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Referenčný Signál" + +#: data/ui/plugin_row.ui:39 +#, fuzzy +msgid "Remove this effect" +msgstr "Odstrániť predvoľbu" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +#, fuzzy +msgid "Add Effect" +msgstr "Vstupné predvoľby: " + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +#, fuzzy +msgid "No Effects" +msgstr "EasyEffects" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +#, fuzzy +msgid "_General" +msgstr "Všeobecné" + +#: data/ui/preferences_general.ui:10 +#, fuzzy +msgid "Service" +msgstr "Server" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +#, fuzzy +msgid "Process All Output Streams" +msgstr "Spracovať všetky výstupy" + +#: data/ui/preferences_general.ui:54 +#, fuzzy +msgid "Process All Input Streams" +msgstr "Spracovať všetky vstupy" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +#, fuzzy +msgid "Inactivity Timeout" +msgstr "Čas. limit aktivity" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Použiť tmavý motív" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Experimentálna" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Skryť okno" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +#, fuzzy +msgid "_Spectrum" +msgstr "Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Pruhy" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Čiary" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Body" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Výška" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Šírka čiary" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Výplň" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +#, fuzzy +msgid "Color" +msgstr "Farba osi" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +#, fuzzy +msgid "Frequency Range" +msgstr "Frekvencia" + +#: data/ui/preferences_spectrum.ui:212 +#, fuzzy +msgid "Minimum" +msgstr "Maximálna" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Maximálna" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "Načítať" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Uložiť aktuálne nastavenia do tejto predvoľby" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Uložiť aktuálne nastavenia do tejto predvoľby" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Odstrániť predvoľbu" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Vstupné predvoľby: " + +#: data/ui/presets_menu.ui:38 +#, fuzzy +msgid "Create a new preset" +msgstr "Vytvoriť predvoľbu" + +#: data/ui/presets_menu.ui:52 +#, fuzzy +msgid "Import a preset" +msgstr "Načítať predvoľbu" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Vstupné predvoľby: " + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Vstupné predvoľby: " + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Vysokofrekvenčné tlmenie" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Veľkosť miestnosti" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Malá" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Stredná" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Veľká" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tunel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Veľká/hladká" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Experimentálna" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Rozptyl" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Predoneskorenie" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Čas dozvuku" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Odrezanie basov" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Odrezanie výšok" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Okolie" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Prázdne steny" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Miestnosť" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Veľká miestnosť (prázdna)" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disko" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Veľká miestnosť (plná)" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importovať model" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Detekcia reči" + +#: data/ui/rnnoise.ui:153 +#, fuzzy +msgid "Models" +msgstr "Režim" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +#, fuzzy +msgid "Standard Model" +msgstr "Štandardný model RNNoise" + +#: data/ui/rnnoise.ui:205 +#, fuzzy +msgid "RNNoise Models List" +msgstr "Štandardný model RNNoise" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Aktívny model" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Štandardný model RNNoise" + +#: data/ui/shortcuts.ui:11 +#, fuzzy +msgid "Overview" +msgstr "Server" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +#, fuzzy +msgid "Close the Window" +msgstr "Skryť okno" + +#: data/ui/shortcuts.ui:37 +#, fuzzy +msgid "Quit Easy Effects" +msgstr "Vstupné efekty" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Červený šum" + +#: data/ui/speex.ui:46 +#, fuzzy +msgid "Automatic Gain Control" +msgstr "Automatické vyhladenie" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Ozvena (reverb)" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Potlačenie šumu" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Úroveň F2" + +#: data/ui/stereo_tools.ui:79 +#, fuzzy +msgid "Input Balance" +msgstr "Vyváženie" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:116 +#, fuzzy +msgid "Softclip Level" +msgstr "Softclip" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Stereo matica" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "ĽP > PĽ (štandardné Stereo)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "ĽP > SS (stereo ku strednej strane)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "SS > ĽP (stredná strana ku stereu)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "ĽP > ĽĽ (mono ľavý kanál)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "ĽP > PP (mono pravý kanál)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "ĽP > Ľ+P (mono sčítanie Ľ+P)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "ĽP > PĽ (stereo preklopené Kanály)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Režim sterea" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Úroveň strán" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Vyváženie strán" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Stredová úroveň" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Stredná paronáma" + +#: data/ui/stereo_tools.ui:424 +#, fuzzy +msgid "Output Balance" +msgstr "Výstupný Zisk" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Oneskorenie Ľ/P" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Oneskorenie Ľavo/Pravo" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Základ sterea" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Fáza sterea" + +#: src/app_info.cpp:65 +#, fuzzy +msgid "Running" +msgstr "beží" + +#: src/app_info.cpp:67 +#, fuzzy +msgid "Suspended" +msgstr "pozastavené" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +#, fuzzy +msgid "Creating" +msgstr "vytváram" + +#: src/app_info.cpp:73 +#, fuzzy +msgid "Error" +msgstr "chyba" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +#, fuzzy +msgid "channels" +msgstr "Kanály" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +#, fuzzy +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Ukončiť PulseEffect. Užitočné pre beh v režime služby." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Načítať predvoľby. Napr.: easyffects -l music" + +#: src/application.cpp:556 +#, fuzzy +msgid "Reset Easy Effects." +msgstr "Obnoviť EasyEffects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Skryť okno." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Globálne premostenie. 1 pre zapnutie, 2 pre vypnutie, 3 pre získanie stavu" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Zobraziť dostupné predvoľby." + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Výstup" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Vstup" + +#: src/application_ui.cpp:323 +#, fuzzy +msgid "_PipeWire" +msgstr "PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +#, fuzzy +msgid "Impulse File Not Imported" +msgstr "Načítať súbor impulzu" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Načítať súbor impulzu" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Otvoriť" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Odpoveď impulzu" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Načítať impulz" + +#: src/convolver_menu_impulses.cpp:268 +#, fuzzy +msgid "Remove Impulse" +msgstr "Importovať impulz" + +#: src/convolver_ui.cpp:330 +#, fuzzy +msgid "No Impulse File Loaded" +msgstr "Načítať súbor impulzu" + +#: src/convolver_ui.cpp:356 +#, fuzzy +msgid "Failed To Load The Impulse File" +msgstr "Nedá sa načítať súbor s impulzom" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +#, fuzzy +msgid "Recorders" +msgstr "Okraj" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Prehrávače" + +#: src/effects_box.cpp:317 +#, fuzzy +msgid "Effects" +msgstr "EasyEffects" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Načítať APO predvoľbu" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO predvoľby" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +#, fuzzy +msgid "Import GraphicEQ Preset File" +msgstr "Načítať APO predvoľbu" + +#: src/equalizer_ui.cpp:585 +#, fuzzy +msgid "GraphicEQ Presets" +msgstr "Vstupné predvoľby: " + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +#, fuzzy +msgid "Remove Autoloading Preset" +msgstr "Odstrániť predvoľbu" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Výstupné efekty" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +#, fuzzy +msgid "Output Device" +msgstr "Výstupné efekty" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Pridať" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importovať model zo súboru" + +#: src/rnnoise_ui.cpp:151 +#, fuzzy +msgid "RNNoise Models" +msgstr "Štandardný model RNNoise" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Vylepšovač hĺbok" + +#: src/tags_plugin_name.cpp:33 +#, fuzzy +msgid "Bass Loudness" +msgstr "Hlasitosť" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Zbaľovač" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Prelínanie kanálov" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Kryštalizátor" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Rušenie ozveny" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ekvalizér" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Budič" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Výstupné efekty" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Obmedzovač" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Zosilňovač" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Viacpásmový kompresor" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Viacpásmová brána" + +#: src/tags_plugin_name.cpp:54 +#, fuzzy +msgid "Reverberation" +msgstr "Ozvena (reverb)" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Redukcia šumu" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Stereo nástroje" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Režim filtra nízkej priepuste" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Horný prechod" + +#~ msgid "Uniform" +#~ msgstr "Rovnomerný" + +#, fuzzy +#~ msgid "New Output Preset Name" +#~ msgstr "Výstupné predvoľby: " + +#, fuzzy +#~ msgid "Search Output Preset" +#~ msgstr "Výstupné predvoľby: " + +#, fuzzy +#~ msgid "Output Presets List" +#~ msgstr "Výstupné predvoľby: " + +#~ msgid "infinity" +#~ msgstr "nekonečno" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Pomer" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Dolná priepusť" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Horné pásmo" + +#~ msgid "Gating" +#~ msgstr "Hradlo" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "Nízka pásmová priepusť 12dB/okt" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "Nízka pásmová priepusť 24dB/okt" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "Nízka pásmová priepusť 36dB/okt" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "Vysoká pásmová priepusť 12dB/okt" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "Vysoká pásmová priepusť 24dB/okt" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "Vysoká pásmová priepusť 36dB/okt" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "Pásmová priepusť 6dB/okt" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "Pásmová priepusť 12dB/okt" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "Pásmová priepusť 18dB/okt" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "Vylúčenie pásma 6dB/okt" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "Vylúčenie pásma 12dB/okt" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "Vylúčenie pásma 18dB/okt" + +#~ msgid "Inertia" +#~ msgstr "Zotrvačnosť" + +#, fuzzy +#~ msgid "Band Type" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band Mode" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band Slope" +#~ msgstr "Sklon" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Hlasitosť" + +#, fuzzy +#~ msgid "High Speed" +#~ msgstr "Horný prah" + +#, fuzzy +#~ msgid "High Quality" +#~ msgstr "Kvalita" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Formát" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Predvoľby" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Krehkosť" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Detekcia" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Kompresia" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Softclip" + +#~ msgid "Cents" +#~ msgstr "Centy" + +#~ msgid "Octaves" +#~ msgstr "Oktávy" + +#, fuzzy +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Obnoviť PulseEffects" + +#~ msgid "High Pass" +#~ msgstr "Horné pásmo" + +#~ msgid "Low Pass" +#~ msgstr "Spodné pásmo" + +#~ msgid "Cancel" +#~ msgstr "Zrušiť" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Predzosilnenie" + +#~ msgid "Frame Size" +#~ msgstr "Veľkosť rámca" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Dolná priepusť" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Rovnomerný" + +#, fuzzy +#~ msgid "Left Delay" +#~ msgstr "Predoneskorenie" + +#, fuzzy +#~ msgid "Right Delay" +#~ msgstr "Rozdeliť kanály" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Úroveň F2" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Úroveň F2" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Cieľová úroveň" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Cieľová úroveň" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Zvukové efekty pre aplikácie využívajúce PipeWire" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Redukcia šumu" + +#, fuzzy +#~ msgid "Load APO Preset" +#~ msgstr "APO predvoľby" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Výstupné predvoľby: " + +#~ msgid "Input Presets: " +#~ msgstr "Vstupné predvoľby: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Rozdeliť" + +#~ msgid "Split 1/2" +#~ msgstr "Rozdeliť 1/2" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Frekvencia" + +#~ msgid "Split 2/3" +#~ msgstr "Rozdeliť 2/3" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Frekvencia" + +#~ msgid "Split 3/4" +#~ msgstr "Rozdeliť 3/4" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Frekvencia" + +#~ msgid "Sub Band" +#~ msgstr "Spodné pásmo" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 1 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 1 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Pozdvihnutie" + +#~ msgid "Max Reduction" +#~ msgstr "Redukcia" + +#~ msgid "Low Band" +#~ msgstr "Nízke pásmo" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 2 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 2 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Pozdvihnutie" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "Mid Band" +#~ msgstr "Stredné pásmo" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 3 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Pozdvihnutie" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "High Band" +#~ msgstr "Vysoké pásmo" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Premostiť" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Nábeh" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Uvoľnenie" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Prah" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Pozdvihnutie" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Redukcia zosilnenia" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Množstvo" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Množstvo" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects je pokročilý nástroj pre úpravu zvuku. Obsahuje ekvalizér, " +#~ "obmedzovač, kompresor, nástroj ozveny a množstvo ďalších efektov. Pre " +#~ "doplnenie je napríklad zabudovaný aj analyzátor spektra." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects je následovník PulseEffects. EasyEffects podporuje len " +#~ "zvukový server PipeWire. Použivatelia PulseAudio by mali používať " +#~ "PulseEffects." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Pretože EasyEffects štandardne používa zvukový server PulseWire, funguje " +#~ "s väčšinou (ak nie so všetkými) aplikácií. Všetky podprované programy sú " +#~ "zobrazené v hlavnom okne, kde je ich možné individuálne povoliť." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Popri práci s úpravou výstupného zvuku, EasyEffects je možné použiť aj na " +#~ "úpravu vstupných zvukov z mikrofónu. To môžete využiť napríklad pri " +#~ "nahrávaní, ale funguje to dobre aj pri audiohovoroch." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "Keď je EasyEffects spustený, zapamätá si posledné používané nastavenia. " +#~ "Taktiež je možné uložiť všetky aktuálne nastavenia ako profily." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "Hlavná stránka ukazujújca dve výstupové aplikácie." + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Pásma" + +#, fuzzy +#~ msgid "Many translation updates" +#~ msgstr "Aktualizované preklady" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "neplýtvame výkonom procesora počas ticha." + +#~ msgid "mean." +#~ msgstr "geometrický priemer." + +#~ msgid "This release adds the following feature:" +#~ msgstr "Toto vydanie pridáva následujúcu vlastnosť:" + +#~ msgid "Updated translations" +#~ msgstr "Aktualizované preklady" + +#~ msgid "Average" +#~ msgstr "Priemerná" + +#~ msgid "Failed" +#~ msgstr "Zlyhalo" + +#, fuzzy +#~ msgid "Use Default" +#~ msgstr "Použiť predvolený" + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Odstrániť predvoľbu" + +#~ msgid "Import Presets" +#~ msgstr "Načítať predvoľbu" + +#~ msgid "Start Service at Login" +#~ msgstr "Spustiť službu pri prihlásení" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Aktívny model" + +#~ msgid "Add to Blocklist" +#~ msgstr "Pridať na zoznam blokovaných" + +#~ msgid "Blocklist" +#~ msgstr "Zoznam blokovaných" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibrovať mikrofón" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Povolené" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Povolené" + +#~ msgid "Format" +#~ msgstr "Formát" + +#~ msgid "Latency" +#~ msgstr "Odozva" + +#~ msgid "idle" +#~ msgstr "nečinné" + +#~ msgid "running" +#~ msgstr "beží" + +#~ msgid "suspended" +#~ msgstr "pozastavené" + +#~ msgid "creating" +#~ msgstr "vytváram" + +#~ msgid "error" +#~ msgstr "chyba" + +#~ msgid "unknown" +#~ msgstr "neznáme" + +#~ msgid "Faster" +#~ msgstr "Rýchlo" + +#~ msgid "Preserve Formant" +#~ msgstr "Zachovať zložku rozhodujúcu o farbe zvuku" + +#~ msgid "Cmoy" +#~ msgstr "Slúchadlový zosilňovač (CMoy)" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Výstupný Zisk" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanály" + +#, fuzzy +#~ msgid "Value" +#~ msgstr "Spodná hranica" + +#, fuzzy +#~ msgid "Output Effects" +#~ msgstr "Výstupné efekty" + +#~ msgid "Settings" +#~ msgstr "Nastavenia" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Nastavenia" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Trvanie" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Skúšobné signály" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Skúšobné signály" + +#~ msgid "Show Spectrum" +#~ msgstr "Zobraziť spektrum" + +#~ msgid "Border" +#~ msgstr "Okraj" + +#~ msgid "Spectrum Type" +#~ msgstr "Typ spektra" + +#~ msgid "Spectrum Color" +#~ msgstr "Farba spektra" + +#, fuzzy +#~ msgid "Remove Model" +#~ msgstr "Aktívny model" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Najvyššia redukcia zisku" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "Váhy" + +#~ msgid "Dry" +#~ msgstr "Skúšobný" + +#~ msgid "S/C Level" +#~ msgstr "S/C Úroveň" + +#~ msgid "Short Term" +#~ msgstr "Krátkodobá" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Nastaviť hlasitosť a zapnúť/vypnúť efekty" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Zahŕňa ekvalizér s prednastavenými profilmi" + +#~ msgid "Input Limiter" +#~ msgstr "Obmedzovač na vstupe" + +#~ msgid "Calibration" +#~ msgstr "Kalibrácia" + +#~ msgid "Limit" +#~ msgstr "Obmedzenie" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Zvukové efekty pre aplikácie využívajúce PulseAudio" + +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Zvukové efekty pre aplikácie PulseAudio" + +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrovať mikrofón" + +#~ msgid "Based on" +#~ msgstr "Na základe" + +#~ msgid "Detect Silence" +#~ msgstr "Detekcia ticha" + +#~ msgid "Provided by" +#~ msgstr "Poskytuje" + +#~ msgid "Reconnect the microphone to apply new changes made to the Blocklist" +#~ msgstr "" +#~ "Znovu pripojiť mikrofón pre použitie zmien vykonaných v zozname " +#~ "blokovaných" + +#~ msgid "Restart the player to apply new changes made to the Blocklist" +#~ msgstr "Reštartovať prehrávač, aby sa uplatnili zmeny v zozname blokovaných" + +#~ msgid "Sine" +#~ msgstr "Sínus" + +#~ msgid "Square" +#~ msgstr "Štvorec" + +#~ msgid "Saw" +#~ msgstr "Píla" + +#~ msgid "Triangle" +#~ msgstr "Trojuholník" + +#~ msgid "Pink Noise" +#~ msgstr "Ružový Šum" + +#~ msgid "Ticks" +#~ msgstr "Tiky" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussový šum" + +#~ msgid "Blue Noise" +#~ msgstr "Modrý šum" + +#~ msgid "Violet Noise" +#~ msgstr "Fialový Šum" + +#~ msgid "Volume" +#~ msgstr "Hlasitosť" + +#~ msgid "Measure Noise" +#~ msgstr "Merať šum" + +#~ msgid "Subtract Noise" +#~ msgstr "Odčítať šum" + +#~ msgid "Low-pass Frequency" +#~ msgstr "Frekvencia nízkej priepuste" + +#~ msgid "Advanced" +#~ msgstr "Pokročilé" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Importovať súbor s odpoveďou impulzu" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Vyberte súbor s odpoveďou impulzu" + +#~ msgid "Aggressive Mode" +#~ msgstr "Agresívny režim" + +#~ msgid "Before" +#~ msgstr "Pred" + +#~ msgid "After" +#~ msgstr "Po" + +#~ msgid "Loudness Range" +#~ msgstr "Dynamický Rozsah" + +#~ msgid "Apply APO Preset" +#~ msgstr "Použiť APO predvoľby" + +#~ msgid "Apply" +#~ msgstr "Použiť" + +#~ msgid "Muted" +#~ msgstr "Stíšený" + +#~ msgid "Distant Headphones" +#~ msgstr "Vzdialené slúchadlá" + +#~ msgid "Niceness" +#~ msgstr "Hodnota nice" + +#~ msgid "Priority Type" +#~ msgstr "Typ priority" + +#~ msgid "Priority" +#~ msgstr "Priorita" + +#~ msgid "About" +#~ msgstr "O programe" + +#~ msgid "Loudness Compensator" +#~ msgstr "Kompenzácia hlasitosti" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Automaticky použiť toto nastavenie, ak je aktuálne používané zariadenie " +#~ "pripojené" + +#~ msgid "Protocol" +#~ msgstr "Protokol" + +#~ msgid "Default Sample Format" +#~ msgstr "Predvolený formát vzorkovania" + +#~ msgid "File" +#~ msgstr "Súbor" + +#~ msgid "Configuration" +#~ msgstr "Konfigurácia" + +#~ msgid "Resamplers" +#~ msgstr "Prevzorkovače" + +#~ msgid "Pipeline Input" +#~ msgstr "Pipeline vstup" + +#~ msgid "Buffer" +#~ msgstr "Vyrovnávacia pamäť" + +#~ msgid "Pipeline Output" +#~ msgstr "Pipeline výstup" + +#~ msgid "Block Size" +#~ msgstr "Veľkosť bloku" + +#~ msgid "Use Custom Color" +#~ msgstr "Použiť vlastnú Farbu" + +#~ msgid "Use Gradient" +#~ msgstr "Použiť tieňovanie" + +#~ msgid "Sampling" +#~ msgstr "Vzorkovanie" + +#~ msgid "Maximum Frequency" +#~ msgstr "Maximálna frekvencia" + +#~ msgid "Gradient Color" +#~ msgstr "Farba prechodu" + +#~ msgid "WebRTC" +#~ msgstr "WebRTC" + +#~ msgid "Extended Filter" +#~ msgstr "Rozšírený filter" + +#~ msgid "Low" +#~ msgstr "Nízky" + +#~ msgid "Moderate" +#~ msgstr "Stredný" + +#~ msgid "High" +#~ msgstr "Vysoký" + +#~ msgid "Delay Agnostic" +#~ msgstr "Absolútne oneskorenie" + +#~ msgid "Very High" +#~ msgstr "Veľmi vysoká" + +#~ msgid "Adaptive Digital" +#~ msgstr "Prispôsobivý digitálny" + +#~ msgid "Fixed Digital" +#~ msgstr "Pevný digitálny" + +#~ msgid "Detection Likelihood" +#~ msgstr "Pravdepodobnosť zistenia" + +#~ msgid "Very Low" +#~ msgstr "Veľmi nízka" + +#~ msgid "Resampler" +#~ msgstr "Prevzorkovač" + +#~ msgid "paused" +#~ msgstr "pozastavené" + +#~ msgid "playing" +#~ msgstr "hrá" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "Import APO Presets" +#~ msgstr "Načítať APO predvoľbu" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Redukcia zosilnenia" + +#~ msgid "Exponent" +#~ msgstr "Exponent" diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..3407903 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,2980 @@ +# Swedish translation of EasyEffects application. +# Copyright (C) 2017 +# This file is distributed under the same license as the easyeffects package. +# Patrik Nilsson , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-02-20 00:59+0000\n" +"Last-Translator: Luna Jernberg \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.16-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Equalizer, kompressor och andra ljudeffekter" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Ljudeffekter för PipeWire-applikationer" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "begränsare;kompressor;eko;utjämnare;autovolym;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Förinställningar\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Aktivera/inaktivera detta program" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Aktivera" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Tysta applikationen" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Applikationsvolym" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "_Återställ inställningar" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "_Om Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Profiler" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Förinställningsmeny" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Easy Effects-fönster" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Applikationslista" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Ingen ljudapplikation tillgänglig" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Återställ historik" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Målvärde (dB)" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Tystnad" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Maximal historik" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Utgångsförstärkning (dB)" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Ingång" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Plugin ingångsförstärkning (dB)" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Utgång" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Plugin utgångsförstärkning (dB)" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Återställ" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Enhet" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "Namn" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Förinställning" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Ta bort denna modellfil" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Lyssna" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Applikationsnamn" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Lägg till i exkluderade applikationer" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Lista över exkluderade applikationer" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Visa exkluderade applikationer" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Mellanrum (s)" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Kompressor" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Förstärkning" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Komprimeringsläge" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Tröskelvärde för förstärkning (dB)" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Förstärkningsmängd" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Attack (ms)" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Tröskelvärde (dB)" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Attacktid (ms)" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Tröskelvärde för attack (dB)" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Släpp (s)" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Tid för frisläppning (s)" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Tröskelvärde för frisläppning (dB)" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Förhållande (n:1)" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Knävärde (dB)" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Makeup (dB)" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "Torrnivå" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "Våtnivå" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Sidokedja" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereoläge" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Mitten" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Sida" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Minst" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Sidokedjekälla" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Fördröj vänster höger" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Tonhöjd vänster" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Sida" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Sida" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Stereoläge" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Topp" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Lågpassfilter" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Sidokedjeläge" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Extern sidokedja" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Respons" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Typ av sidokedja" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Ingångsenhet" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Förförstärkning" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Sidokedjefilter" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Högpass" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Frekvens (Hz)" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Högpassfilterläge" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Högpassfilterfrekvens" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Lågpass" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Lågpassfilterläge" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Förstärkning" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "V" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Vänster kanal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "H" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Höger kanal" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulser" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Stereobredd" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Automatisk förstärkning" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Takt" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Prover" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Varaktighet" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Kombinera impulssvar" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Utdatafilnamn" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Importera impuls" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Sök impulsfil" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Lista över impulsfiler" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Gräns (Hz)" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Mata (dB)" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Upptäckt" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "Frekvens 1 delning (Hz)" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 topp" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "Frekvens 2 topp (Hz)" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 förstärkning (dB)" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "Frekvens 1 förstärkning (Hz)" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 nivå" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "Frekvens 2 nivå (Hz)" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2 topp Q" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "Frekvens 2 topp Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Upptäckt" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Reduktion" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Fördröjning" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Försvagning" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Filterlängd" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Filterlängd" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Kompressor" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Kompressor" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Balans" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "Tonhöjd vänster" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "Tonhöjd höger" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Delade kanaler" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Platt respons" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Underband" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Importera förinställning" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kvalitet" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Bredd" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "Tak (dB)" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Bandläge" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Beskrivning" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Ta bort denna modellfil" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Låg hylla" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Hög hylla" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Förbikoppling av band 1" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Lågpass" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Bandreduktion" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Lågpass" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Utjämnare" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Start av frisläppande zon" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Frekvens 2 topp (Hz)" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "Linje tunn" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "Linje bred" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "Linje svans" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "Sidokedjeförförstärkning" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "Förstärkning" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Stereolänk" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Extern sidokedja" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "Automatisk utjämning" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "Automatisk utjämningsattack" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "Automatisk utjämningsutlösning" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "Automatisk knäutjämning" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Förstärkning vänster" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Sidokedja vänster" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Sidokedja höger" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "FFT-storlek" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Utgångsvolym" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "Klippning" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Tak" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "Sidokedjeförstärkning" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Driftläge" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Stereofas" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Lista över band" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Bandkomprimeringsläge" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "Alternativ för bandsidokedja" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereoläge" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Filter" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Lågklippt filter" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "Lågklippt filterfrekvens" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Högklippt filter" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "Högklippt filterfrekvens" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Bandförstärkning" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "Bandreduktion" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Allmänt" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Anpassad indataenhet" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Anpassad utdataenhet" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Serverinformation" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Samplingshastighet" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "Minsta kvantum" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "Största kvantum" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "Standardkvantum" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Utgångsenheter" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Utgångsförinställningar" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Lista över utgångsförinställningar" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Ingångsenheter" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Ingångsförinställningar" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Lista över ingångsförinställningar" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Testsignal" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Aktiverad" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanaler" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Båda kanalerna" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinusvåg" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Vitt brus" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frekvensomfång" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Mellanrum (s)" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Filterlängd" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Ta bort denna effekt" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Lägg till effekt" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Inga effekter" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Allmänt" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Tjänst" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Använd mörkt tema" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Mellanrum (s)" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Punkter" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Linjebredd" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Frekvensomfång" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Minst" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Spara dessa inställningar till fil" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Spara dessa inställningar till fil" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Nytt namn på förinställd ingång" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Skapa en ny förinställning" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Importera en förinställning" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Sök ingångsförinställning" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Lista över ingångsförinställningar" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Rumsstorlek" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Liten" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Stor" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Före fördröjning" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Omgivning" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Rum" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Importmodell" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +#, fuzzy +msgid "Voice Detection" +msgstr "Försvagning" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Aktiv modell" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Översikt" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Avsluta Easy Effects" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Rött brus" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Eko" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +#, fuzzy +msgid "Noise Suppression" +msgstr "Kompressor" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "F2 nivå" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Ingångsbalans" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Softclipnivå" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Stereomatris" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Mono vänster kanal)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Mono höger kanal)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Stereoläge" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Sidonivå" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Sidobalans" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Mellannivå" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Mellanpanorama" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Utgångsbalans" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Fördröjning L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Fördröj vänster höger" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Stereobas" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Stereofas" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Skapande" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "kanaler" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Återställ Easy Effects." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +#, fuzzy +msgid "_Output" +msgstr "Utgång" + +#: src/application_ui.cpp:322 +#, fuzzy +msgid "_Input" +msgstr "Ingång" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Impulsfilen har inte importerats" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Importera impulsfil" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Impulssvar" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Ladda impuls" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Ta bort impuls" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Ingen impulsfil laddad" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Det gick inte att ladda Impulsfilen" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Effekter" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "Importera APO-förinställd fil" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO-förinställningar" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "Importera GraphicEQ-förinställd fil" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "GraphicEQ-förinställningar" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Utmatningsenhet" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Ta bort" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Utmatningsenhet" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Importera modellfil" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise-modeller" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Basförstärkare" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Kristalliserare" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Ekosläckare" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Utjämnare" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Utmatningsenhet" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Begränsare" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Flerbandskompressor" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Flerbandsport" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Eko" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Brusreducering" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Stereoverktyg" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Använder" + +#~ msgid "Low-Cut Filter" +#~ msgstr "Lågklippt filter" + +#~ msgid "High-Cut Filter" +#~ msgstr "Högklippt filter" + +#~ msgid "New Output Preset Name" +#~ msgstr "Nytt namn på förinställd utgång" + +#~ msgid "Search Output Preset" +#~ msgstr "Sök utgångsförinställning" + +#~ msgid "Output Presets List" +#~ msgstr "Lista över utgångsförinställningar" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Förhållande (n:1)" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Tröskelvärde (dB)" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Lågpass" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Högpass" + +#~ msgid "Band Type" +#~ msgstr "Bandtyp" + +#~ msgid "Band Mode" +#~ msgstr "Bandläge" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Lista över band" + +#~ msgid "High Speed" +#~ msgstr "Hög hastighet" + +#~ msgid "High Quality" +#~ msgstr "Hög kvalitet" + +#~ msgid "Formant" +#~ msgstr "Formant" + +#~ msgid "Preserved" +#~ msgstr "Bevarad" + +#~ msgid "Detector" +#~ msgstr "Detektor" + +#~ msgid "Compound" +#~ msgstr "Förening" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Öppna Easy Effects Manual" + +#~ msgid "High Pass" +#~ msgstr "Högpass" + +#~ msgid "Low Pass" +#~ msgstr "Lågpass" + +#~ msgid "Cancel" +#~ msgstr "Avbryt" + +#, fuzzy +#~ msgid " PreAmplification" +#~ msgstr "Förförstärkning" + +#~ msgid "Frame Size" +#~ msgstr "Ramstorlek" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Lågpass" + +#~ msgid "Left Delay" +#~ msgstr "Vänsterfördröjning" + +#~ msgid "Right Delay" +#~ msgstr "Högerfördröjning" + +#~ msgid "Left Dry Level" +#~ msgstr "Vänster torrnivå" + +#~ msgid "Right Dry Level" +#~ msgstr "Höger torrnivå" + +#~ msgid "Left Wet Level" +#~ msgstr "Vänster våtnivå" + +#~ msgid "Right Wet Level" +#~ msgstr "Höger våtnivå" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Förstärkningsreducering" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "Ljudeffekter för PipeWire-applikationer" + +#, fuzzy +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Förstärkningsreducering" + +#~ msgid "Load APO Preset" +#~ msgstr "Ladda APO-förinställning" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Utgångsförinställningar: " + +#~ msgid "Input Presets: " +#~ msgstr "Ingångsförinställningar: " + +#~ msgid "Split Mode" +#~ msgstr "Delat läge" + +#~ msgid "Split Frequency 1" +#~ msgstr "Delad frekvens 1" + +#~ msgid "Split Frequency 2" +#~ msgstr "Delad frekvens 2" + +#~ msgid "Split Frequency 3" +#~ msgstr "Delad frekvens 3" + +#~ msgid "Band 1 Solo" +#~ msgstr "Band 1 solo" + +#~ msgid "Band 1 Detection" +#~ msgstr "Band 1-detektering" + +#~ msgid "Band 1 Attack" +#~ msgstr "Band 1 attack" + +#~ msgid "Band 1 Release" +#~ msgstr "Band 1 släpp" + +#~ msgid "Band 1 Threshold" +#~ msgstr "Band 1 tröskel" + +#~ msgid "Band 1 Ratio" +#~ msgstr "Band 1-förhållande" + +#~ msgid "Band 1 Knee" +#~ msgstr "Band 1 knä" + +#~ msgid "Band 1 Makeup" +#~ msgstr "Band 1 sammansättning" + +#~ msgid "Max Reduction" +#~ msgstr "Maximal minskning" + +#~ msgid "Low Band" +#~ msgstr "Lågt band" + +#~ msgid "Band 2 Bypass" +#~ msgstr "Förbikoppling av band 2" + +#~ msgid "Band 2 Solo" +#~ msgstr "Band 2 solo" + +#~ msgid "Band 2 Detection" +#~ msgstr "Band 2-detektering" + +#~ msgid "Band 2 Attack" +#~ msgstr "Band 2 attack" + +#~ msgid "Band 2 Release" +#~ msgstr "Band 2 släpp" + +#~ msgid "Band 2 Threshold" +#~ msgstr "Tröskelvärde för band 2" + +#~ msgid "Band 2 Ratio" +#~ msgstr "Band 2-förhållande" + +#~ msgid "Band 2 Knee" +#~ msgstr "Band 2 knä" + +#~ msgid "Band 2 Makeup" +#~ msgstr "Band 2 sammansättning" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Band 2 max reduktion" + +#~ msgid "Mid Band" +#~ msgstr "Mittband" + +#~ msgid "Band 3 Bypass" +#~ msgstr "Förbikoppling av band 3" + +#~ msgid "Band 3 Solo" +#~ msgstr "Band 3 solo" + +#~ msgid "Band 3 Detection" +#~ msgstr "Band 3-detektering" + +#~ msgid "Band 3 Attack" +#~ msgstr "Band 3 attack" + +#~ msgid "Band 3 Release" +#~ msgstr "Band 3 släpp" + +#~ msgid "Band 3 Threshold" +#~ msgstr "Band 3 tröskelvärde" + +#, fuzzy +#~ msgid "Band 3 Ratio" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Makeup (dB)" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "High Band" +#~ msgstr "Högpass" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Release (s)" + +#, fuzzy +#~ msgid "Band 4 Solo" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Attack (ms)" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Release (s)" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Tröskelvärde (dB)" + +#, fuzzy +#~ msgid "Band 4 Ratio" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Makeup (dB)" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Förstärkningsreducering" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects är ett avancerat verktyg för manipulation av ljud. Det " +#~ "innehåller en ljudutjämnare (equalizer), ljudbegränsare (limiter), " +#~ "kompressor och ett efterklangsverktyg (eko), för att bara nämna några få. " +#~ "Där finns även en inbyggd frekvensanalysator som kompletterar dessa." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "Eftersom EasyEffects använder sig av standard PipeWire som ljudserver " +#~ "stödjer den de flesta, om inte alla, program du använder. Alla " +#~ "applikationer som stöds presenteras i huvudfönstret, där var och en kan " +#~ "aktiveras individuellt." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Förutom att manipulera dina programs ljud kan EasyEffects tillämpa " +#~ "effekter på en ingångsenhet, såsom en mikrofon. Detta är exempelvis " +#~ "användbart vid ljudinspelning, men det fungerar även bra under röstsamtal." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "När EasyEffects startas kommer det ihåg konfigurationen som användes " +#~ "under den senaste sessionen. Det är också möjligt att spara alla aktuella " +#~ "inställningar som profiler." + +#, fuzzy +#~ msgid "Remove this plugin" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Import Presets" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Microphone" +#~ msgstr "Kalibrering och mikrofon korrigering" + +#, fuzzy +#~ msgid "enabled" +#~ msgstr "Sinustabell" + +#, fuzzy +#~ msgid "disabled" +#~ msgstr "Sinustabell" + +#~ msgid "Format" +#~ msgstr "Format" + +#~ msgid "Latency" +#~ msgstr "Latens" + +#, fuzzy +#~ msgid "Output Channel" +#~ msgstr "Ingångsförstärkning (dB)" + +#, fuzzy +#~ msgid "Channel" +#~ msgstr "Kanaler" + +#, fuzzy +#~ msgid "Output Effects" +#~ msgstr "Ingångs-begränsning" + +#~ msgid "Settings" +#~ msgstr "Inställningar" + +#, fuzzy +#~ msgid "Settings Menu" +#~ msgstr "Inställningar" + +#, fuzzy +#~ msgid "Documentation" +#~ msgstr "Kalibrering" + +#, fuzzy +#~ msgid "Enable Test Signal" +#~ msgstr "Testsignal" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "Testsignal" + +#, fuzzy +#~ msgid "Show Spectrum" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Spectrum Type" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Spectrum Color" +#~ msgstr "Spektrum" + +#, fuzzy +#~ msgid "Maximum Gain Reduction" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "S/C Level" +#~ msgstr "Nivå" + +#~ msgid "Input Limiter" +#~ msgstr "Ingångs-begränsning" + +#~ msgid "Calibration" +#~ msgstr "Kalibrering" + +#, fuzzy +#~ msgid "Limit" +#~ msgstr "Gränsvärde (dB)" + +#~ msgid "Audio Effects for PulseAudio Applications" +#~ msgstr "Ljudeffekter för PulseAudio applikationer" + +#, fuzzy +#~ msgid "Audio effects for PulseAudio applications" +#~ msgstr "Ljudeffekter för PulseAudio applikationer" + +#, fuzzy +#~ msgid "Calibration Microphone" +#~ msgstr "Kalibrering och mikrofon korrigering" + +#~ msgid "Sine" +#~ msgstr "Sinus" + +#~ msgid "Square" +#~ msgstr "Fyrkant" + +#~ msgid "Saw" +#~ msgstr "Sågtand" + +#~ msgid "Triangle" +#~ msgstr "Triangel" + +#~ msgid "Pink Noise" +#~ msgstr "Skärt brus" + +#~ msgid "Ticks" +#~ msgstr "Tickande" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gaussiskt brus" + +#~ msgid "Blue Noise" +#~ msgstr "Blått brus" + +#~ msgid "Violet Noise" +#~ msgstr "Violett brus" + +#~ msgid "Volume" +#~ msgstr "Volym" + +#~ msgid "Measure Noise" +#~ msgstr "Mät brus" + +#~ msgid "Subtract Noise" +#~ msgstr "Ta bort brus" + +#, fuzzy +#~ msgid "High" +#~ msgstr "Högpass" + +#, fuzzy +#~ msgid "Very High" +#~ msgstr "Högpass" + +#, fuzzy +#~ msgid "Detection Likelihood" +#~ msgstr "Försvagning" + +#, fuzzy +#~ msgid "Select the impulse Response File" +#~ msgstr "Platt respons" + +#, fuzzy +#~ msgid "Aggressive Mode" +#~ msgstr "Ingen komprimering" + +#, fuzzy +#~ msgid "Configuration" +#~ msgstr "Kalibrering" + +#, fuzzy +#~ msgid "Low-pass Frequency" +#~ msgstr "Återställ frekvens" + +#, fuzzy +#~ msgid "Advanced" +#~ msgstr "Inställningar" + +#, fuzzy +#~ msgid "Apply APO Preset" +#~ msgstr "Profiler" + +#, fuzzy +#~ msgid "Detect Silence" +#~ msgstr "Försvagning" + +#, fuzzy +#~ msgid "Minimum Frequency" +#~ msgstr "Frekvens (Hz)" + +#, fuzzy +#~ msgid "Resamplers" +#~ msgstr "Resampler" + +#, fuzzy +#~ msgid "Buffer" +#~ msgstr "Latens" + +#, fuzzy +#~ msgid "Pipeline Output" +#~ msgstr "Ljudutjämnare - Utgång" + +#, fuzzy +#~ msgid "Block Size" +#~ msgstr "Rumsstorlek" + +#~ msgid "Resampler" +#~ msgstr "Resampler" + +#, fuzzy +#~ msgid "Import APO Presets" +#~ msgstr "Öppna förinställning" + +#, fuzzy +#~ msgid "Gain Detection" +#~ msgstr "Förstärkningsreducering" + +#, fuzzy +#~ msgid "Suppression Level" +#~ msgstr "Förstärkningsreducering" diff --git a/po/th.po b/po/th.po new file mode 100644 index 0000000..c52af92 --- /dev/null +++ b/po/th.po @@ -0,0 +1,2406 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2022-08-17 04:16+0000\n" +"Last-Translator: Giusy Digital \n" +"Language-Team: Thai \n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.14-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +msgid "Search Preset" +msgstr "" + +#: data/ui/presets_menu.ui:129 +msgid "Presets List" +msgstr "" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..f3c02ad --- /dev/null +++ b/po/tr.po @@ -0,0 +1,3353 @@ +# EasyEffects Türkçe Çeviri Dosyası. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# Serdar Sağlam , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-02-22 18:30+0000\n" +"Last-Translator: atahanacar \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.16-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Ekolayzır, Sıkıştırıcı ve Diğer Ses Efektleri" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "PipeWire Uygulamaları için Ses Efektleri" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "" +"sınırlayıcı,kompresör,yankı,ekolayzır,otomatikses;yükseltici;sıkıştırıcı;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"Ön Ayarlar\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "Bu uygulamayı etkinleştir/devre dışı bırak" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Etkinleştir" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Hariç Tutulan Uygulama Listesi: Bu uygulamayı ekle/kaldır" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Hariç tut" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "Uygulamayı Sessize Al" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "Bu uygulamanın ses seviyesini değiştir" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Uygulama Ses Seviyesi" + +#: data/ui/application_window.ui:6 +#, fuzzy +msgid "_Help" +msgstr "Yardım" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "Ayarları _Sıfırla" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "_Tercihler" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "Kısa_yollar" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "Easy Effects _Hakkında" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "Ön Ayarlar" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "Ön Ayarlar Menüsü" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "Genel atlatmayı etkinleştir/devre dışı bırak" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "Genel Atla" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "Ana Menü" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Easy Effects Penceresi" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "Uygulama Listesi" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Boş Liste" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "Ses Uygulaması Yok" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "Geçmişi Sıfırla" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Hedef" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Sessizlik" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "Azami Geçmiş" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "Referans" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "Anlık" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "Kısa Süreli" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "Tümleşik" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "Geometrik Ortalama (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "Geometrik Ortalama (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "Geometrik Ortalama (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "Geometrik Ortalama (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "Yüksek Ses" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "Göreceli" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "Sınır" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "Çıkış Kazancı" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "Giriş" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "Eklenti Giriş Kazancı" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Çıkış" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "Eklenti Çıkış Kazancı" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Sıfırla" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "Aygıt" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "İsim" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Profil" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "Ön Ayar" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "Bu otomatik yükleme ön ayarını kaldır" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Liste" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "Harmonik Karışımları" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3." + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2." + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "Miktar" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "Harmonikler" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "Kapsam" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "Zemin" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "Zemin Değeri" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Bağ" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Uygulama Adı" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Hariç Tutulan Uygulamalara Ekle" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Hariç Tutulan Uygulamalar Listesi" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Hariç Tutulan Uygulamaları Göster" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +#, fuzzy +msgid "Show Native Window" +msgstr "Pencereyi Kapat" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Sıkıştırıcı" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Kip" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Aşağıya" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Yukarıya" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Yükseltme" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "Sıkıştırma Kipi" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "Yükseltme Eşiği" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "Yükseltme Miktarı" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "Atak" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Zaman" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Eşik" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "Atak Zamanı" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "Atak Eşiği" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "Bırak" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "Bırakma Zamanı" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "Bırakma Eşiği" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Oran" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "Oynak" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "Süs" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +#, fuzzy +msgid "Dry Level" +msgstr "Seviye" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +#, fuzzy +msgid "Wet Level" +msgstr "Hedef Seviye" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "Yanzincir" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "Stereo Kipi" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "Kaynak" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "Orta" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "Yan" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "Sol" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "Sağ" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +#, fuzzy +msgid "Min" +msgstr "Asgari" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +#, fuzzy +msgid "Max" +msgstr "Azami" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "Yanzincir Kaynağı" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "Gecikme Sol Sağ" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "Sağ" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "Yan" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "Yan" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "Öntanımlı Kaynak" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "Doruk" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "RMS" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "Düşük Geçiş Süzgeci" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +#, fuzzy +msgid "Simple Moving Average" +msgstr "Basit Harekelti Ortalama" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "Yanzincir Kipi" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "Harici Yanzincir" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "Tür" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "İleri-besleme" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "Geri-besleme" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "Harici" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "Yanzincir Türü" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "Giriş Aygıtı" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "Ön Yükseltme" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "Tepkinirlik" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "İlerleme" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "Yanzincir Süzgeçleri" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "Yüksek Geçiş" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "Sıklık" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "Kapalı" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "12 dB/oct" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "24 dB/oct" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "36 dB/oct" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "Yüksek Geçiş Süzgeci Kipi" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "Yüksek Geçiş Süzgeci Frekansı" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "Düşük Geçiş" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "Alçak Geçiş Süzgeci Kipi" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "Kazanç" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +#, fuzzy +msgid "Envelope" +msgstr "Eğim" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "Eğri" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "L" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "Sol Kanal" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "R" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "Sağ Kanal" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Dürtüler" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "Birleştir" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "Stereo Genişliği" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "Spektrum" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "Günlük Ölçeği" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "Otomatik Kazanç" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "Oran" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "Örnekler" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "Süre" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "Dürtü Yanıtlarını Birleştir" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "İlk Çekirdek" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "İkinci Çekirdek" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "Çıkış Dosyası Adı" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "Birleşik Çekirdek Adı" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "Dürtü Dosyasını İçeri Al" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "Ara" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "Dürtü Dosyasını Ara" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "Dürtü Dosyaları Listesi" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "Öntanımlı" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "Kesici" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "Akış" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "Atla" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "Sessiz" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "Keşif" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "Geniş" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "Ayır" + +#: data/ui/deesser.ui:96 +#, fuzzy +msgid "F1 Split" +msgstr "Ayır" + +#: data/ui/deesser.ui:116 +#, fuzzy +msgid "Frequency 1 Split" +msgstr "Sıklık" + +#: data/ui/deesser.ui:129 +#, fuzzy +msgid "F2 Peak" +msgstr "Doruk" + +#: data/ui/deesser.ui:149 +#, fuzzy +msgid "Frequency 2 Peak" +msgstr "Sıklık" + +#: data/ui/deesser.ui:167 +#, fuzzy +msgid "F1 Gain" +msgstr "Kazanç" + +#: data/ui/deesser.ui:195 +#, fuzzy +msgid "Frequency 1 Gain" +msgstr "Sıklık" + +#: data/ui/deesser.ui:202 +#, fuzzy +msgid "F2 Level" +msgstr "Seviye" + +#: data/ui/deesser.ui:230 +#, fuzzy +msgid "Frequency 2 Level" +msgstr "Sıklık" + +#: data/ui/deesser.ui:237 +#, fuzzy +msgid "F2 Peak Q" +msgstr "Q Doruk" + +#: data/ui/deesser.ui:265 +#, fuzzy +msgid "Frequency 2 Peak Q" +msgstr "Sıklık" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "Gevşeklik" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "Saptanan" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "Azaltma" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "Gecikme" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "Ters Faz" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "Zayıflatma" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "Süzgeç Uzunluğu" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "Süzgeç Uzunluğu" + +#: data/ui/echo_canceller.ui:50 +#, fuzzy +msgid "Residual Echo Suppression" +msgstr "Gürültü Baskılayıcı" + +#: data/ui/echo_canceller.ui:72 +#, fuzzy +msgid "Near End Echo Suppression" +msgstr "Gürültü Baskılayıcı" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "Hariç Tutulan Uygulamalar" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "Bantlar" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "Denge" + +#: data/ui/equalizer.ui:127 +#, fuzzy +msgid "Pitch Left" +msgstr "Yanzincir" + +#: data/ui/equalizer.ui:160 +#, fuzzy +msgid "Pitch Right" +msgstr "Yanzincir" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "Kanalları Böl" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "Düz Yanıt" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "Frekansları Hesapla" + +#: data/ui/equalizer.ui:314 +#, fuzzy +msgid "Sort Bands" +msgstr "Bantlar" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "Ön Ayarı İçe Aktar" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "Eğim" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "Tekli" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "Kalite" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "Genişlik" + +#: data/ui/exciter.ui:211 +#, fuzzy +msgid "Ceil" +msgstr "Tavan" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "Tavan Değeri" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "Bant Kipi" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "Dahili" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "Erişim" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "Açıklama" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "Bu model dosyasını kaldır" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "Düşük Sığlık" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "Yüksek Sığlık" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "Çan" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "Atla" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "Çentik" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "Çınlama" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "Düşük Geçiş" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "Azalım" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "Düşük Geçiş" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "Ekolayzır" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "Aralık" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +#, fuzzy +msgid "Zone" +msgstr "Bölge" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "Gecikme" + +#: data/ui/gate.ui:336 +#, fuzzy +msgid "Mix" +msgstr "Miks" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "Atak Bölgesi Başlangıcı" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "Bırakma Bölgesi Başlangıcı" + +#: data/ui/level_meter.ui:39 +#, fuzzy +msgid "True Peak" +msgstr "Sıklık" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "Aşırı Örnekleme" + +#: data/ui/limiter.ui:80 +#, fuzzy +msgid "Dither" +msgstr "Titreme" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +#, fuzzy +msgid "Herm Wide" +msgstr "Geniş" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +#, fuzzy +msgid "Exp Wide" +msgstr "Geniş" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +#, fuzzy +msgid "Line Thin" +msgstr "Hat Genişliği" + +#: data/ui/limiter.ui:103 +#, fuzzy +msgid "Line Wide" +msgstr "Hat Genişliği" + +#: data/ui/limiter.ui:104 +#, fuzzy +msgid "Line Tail" +msgstr "Sinüs Tablosu" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "Hiçbiri" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +#, fuzzy +msgid "Sidechain PreAmplification" +msgstr "Öntanımlı-yükselticiler" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "Stereo Bağ" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "Harici Yanzincir" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "Harici Yanzincir Kaynağı" + +#: data/ui/limiter.ui:497 +#, fuzzy +msgid "Auto Leveling" +msgstr "Otomatik Kazanç" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "Kazanç Sol" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "Kazanç Sağ" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "Yanzincir Sol" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "Yanzincir Sağ" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "Standart" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "Düz" + +#: data/ui/loudness.ui:58 +#, fuzzy +msgid "FFT Size" +msgstr "Çerçeve Boyutu" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "Çıkış Ses Seviyesi" + +#: data/ui/loudness.ui:104 +#, fuzzy +msgid "Clipping" +msgstr "Kanal Eşleme" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "Tavan" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +#, fuzzy +msgid "Sidechain Boost" +msgstr "Yanzincir" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "Çalışma Kipi" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "Klasik" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "Çağdaş" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "Ters Faz" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "Bant Listesi" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "Bant 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "Bant 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "Bant 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "Bant 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "Bant 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "Bant 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "Bant 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "Bant 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +#, fuzzy +msgid "Band End" +msgstr "Bantlar" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "Bant Sıkıştırma Kipi" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +#, fuzzy +msgid "Band Bypass" +msgstr "Atla" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "Stereo Kipi" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "Süzgeç" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "Süzgeç" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +#, fuzzy +msgid "Low-Cut Filter Frequency" +msgstr "Frekansları Hesapla" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "Yüksek Geçiş Süzgeci" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +#, fuzzy +msgid "High-Cut Filter Frequency" +msgstr "Frekansları Hesapla" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "Bant Kazancı" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "Bant Eğrisi" + +#: data/ui/multiband_gate_band.ui:850 +#, fuzzy +msgid "Band Reduction" +msgstr "Azalım" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "Genel" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "Aygıt Yönetimi" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"Harici uygulamalarda (örn. Gnome Ayarları ve Plasma Sistem Ayarları) Easy " +"Effects alıcısı/kaynağının öntanımlı aygıt olarak ayarlanmaması tavsiye " +"edilir." + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "Öntanımlı Girişi Kullan" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "Özel Giriş Aygıtı" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "Öntanımlı Çıkışı Kullan" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "Özel Çıkış Aygıtı" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "Sunucu Bilgileri" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "Başlık Sürümü" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "Kütüphane Sürümü" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "Örnekleme Hızı" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +#, fuzzy +msgid "Maximum Quantum" +msgstr "Azami Kazanç" + +#: data/ui/pipe_manager_box.ui:171 +#, fuzzy +msgid "Default Quantum" +msgstr "Öntanımlı Sink" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "Çıkış Aygıtları" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "Çıkış Ön Ayarları" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "Çıkış Otomatik Yükleme Ön Ayarları Listesi" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "Giriş Aygıtları" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "Giriş Ön Ayarları" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "Giriş Otomatik Yükleme Ön Ayarları Listesi" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "Modüller" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "Modül Listesi" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "İstemciler" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "İstemci Listesi" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "Test Sinyali" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "Durum" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "Etkin" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "Özellikler" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "Kanallar" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "Her ikisi" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "Her İki Kanal" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "Dalga Biçimi" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "Sinüs Dalgası" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "Beyaz Gürültü" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +#, fuzzy +msgid "Sequence Length" +msgstr "Frekans Aralığı" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "Pencere" + +#: data/ui/pitch.ui:104 +#, fuzzy +msgid "Overlap Length" +msgstr "Süzgeç Uzunluğu" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "Perde" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "Yarım Ses" + +#: data/ui/pitch.ui:160 +#, fuzzy +msgid "Tempo Difference" +msgstr "Referans" + +#: data/ui/pitch.ui:183 +#, fuzzy +msgid "Rate Difference" +msgstr "Referans" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "Bu efekti kaldır" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "Bu efekti etkinleştir/devre dışı bırak" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "Bu efektin konumunu değiştir" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "Efekt Ekle" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "Kullanılan Eklentiler Listesi" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "Efekt Yok" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "Ses Akışı Değiştirilmedi" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "Eklenti Ara" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "Eklenti Listesi" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "_Genel" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "Hizmet" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "Sistem Başlangıcında Hizmeti Başlat" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "Pencere Kapandığında Kapat" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "Ses" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "Tüm Çıkış Akışlarını İşle" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "Tüm Giriş Akışlarını İşle" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "Aygıtların Ekranından Gelen Akışları Yoksay" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "Tepkisizlik Zaman Aşımı" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "Görünüm" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "Koyu Tema Kullan" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "Dış Tıklamalarda Menüleri Gizle" + +#: data/ui/preferences_general.ui:190 +#, fuzzy +msgid "Experimental Features" +msgstr "Deneysel" + +#: data/ui/preferences_general.ui:193 +#, fuzzy +msgid "Native Plugin Window" +msgstr "Pencereyi Kapat" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "_Spektrum" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "Şekil" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "Çubuklar" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "Çizgiler" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "Noktalar" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "Noktalar" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "Yükseklik" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "Hat Genişliği" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "Dolgu" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "Çubuk Kenarlığını Göster" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "Yuvarlatılmış Köşeler" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "Renk" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "Çizgiler ve Çubuklar" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "Eksen Etiketleri" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "Frekans Aralığı" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "Asgari" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "Azami" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +#, fuzzy +msgid "Discard the current settings and load this preset" +msgstr "Geçerli ayarları bu ön ayar dosyasına kaydet" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "Geçerli ayarları bu ön ayar dosyasına kaydet" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "Hazır ayar dosyasını kaldır" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "Yeni Giriş Ön Ayarı Adı" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "Yeni bir ön ayar oluştur" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "Bir ön ayarı içe aktar" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Giriş Ön Ayarı Ara" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Giriş Ön Ayarları Listesi" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "Yüksek Frekans Sönümleme" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "Oda Boyutu" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "Küçük" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "Orta" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "Büyük" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "Tünel" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "Büyük/pürüzsüz" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "Deneysel" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "Yayılma" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "Ön Gecikme" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "Bozunma Süresi" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "Bas Kesim" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "Tiz Kesim" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "Ortam" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "Boş Duvarlar" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "Oda" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "Büyük Boş Salon" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "Disko" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "Büyük Dolu Salon" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "Modeli İçe Aktar" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "Ses Algılama" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "Modeller" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "Standart Model" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "RNNoise Modelleri Listesi" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "Model Yüklenmedi" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "Etkin Model" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "Standart RNNoise Modeli" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "Genel Görünüm" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "Tam ekran/Tam ekrandan geri yükle" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "Pencereyi Kapat" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "Easy Effects'ten Çık" + +#: data/ui/speex.ui:33 +#, fuzzy +msgid "Denoise" +msgstr "Kırmızı Gürültü" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "Otomatik Kazanç Denetleyicisi" + +#: data/ui/speex.ui:72 +#, fuzzy +msgid "Dereverberation" +msgstr "Yankılanma" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "Ses Etkinliği Olasılığı" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "Başla" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "Devam et" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "Gürültü Baskılayıcı" + +#: data/ui/speex.ui:147 +#, fuzzy +msgid "Level" +msgstr "Seviye" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "Giriş Dengesi" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "Yumuşak kırpım" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "Yumuşak Kırpım Seviyesi" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "Stereo Matris" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (Stereo Öntanımlı)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (Stereo Orta Tarafa)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (Orta Taraftan Stereo)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (Mono Sol Kanal)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (Mono Sağ Kanal)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (Mono İşlem L+R)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (Stereo Kanalları Ters Çevir)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "Stereo Kipi" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "Seviye Tarafı" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "Denge Tarafı" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "Orta Seviye" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "Orta Panorama" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "Çıkış Dengesi" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "Gecikme L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "Gecikme Sol Sağ" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "Stereo Taban" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "Stereo Faz" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "Çalışıyor" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "Askıya alındı" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "Boşta" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "Oluşturuluyor" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "Hata" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "Bilinmiyor" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "kanallar" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "Easy Effects'ten çık. Servis kipinde çalışırken kullanışlıdır." + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "Bir ön ayar yükle. Örnek: easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "Easy Effects’i Sıfırla." + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "Pencereyi Gizle." + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" +"Genel atlama. 1 etkinleştirmek, 2 devre dışı bırakmak ve 3 durumu almak için" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "Kullanılabilir hazır ayarları göster." + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "_Çıkış" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "_Giriş" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "_PipeWire" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "Dosya Normal Değil" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "Dürtü Dosyası Bozuk veya Desteklenmiyor Olabilir" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "Yalnızca Stereo Dürtü Dosyaları Desteklenir" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "Dürtü Dosyası İçe Aktarılmadı" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "Dürtü Dosyasını İçe Aktar" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "Aç" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "Dürtü Yanıtı" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "Dürtüyü Yükle" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "Dürtüyü Kaldır" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "Dürtü Dosyası Yüklenmedi" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "Dürtü Dosyası Yüklenemedi" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "Kaydediciler" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "Oynatıcılar" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "Efektler" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "APO Ön Ayar Dosyasını İçe Aktar" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO Ön Ayarları" + +#: src/equalizer_ui.cpp:412 +#, fuzzy +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" +"APO Ön Ayarı Yüklenmedi. Dosya Biçimi Yanlış Olabilir. Lütfen İçeriğini " +"Gözden Geçirin." + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "GraphicEQ Ön Ayar Dosyasını İçe Aktar" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "GraphicEQ Ön Ayarları" + +#: src/equalizer_ui.cpp:610 +#, fuzzy +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" +"GraphicEQ Ön Ayarı Yüklenmedi. Dosya Biçimi Yanlış Olabilir. Lütfen " +"İçeriğini Gözden Geçirin." + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "Otomatik Yükleme Ön Ayarını Kaldır" + +#: src/plugin_base.cpp:197 +#, fuzzy +msgid "Output Level Meter" +msgstr "Çıkış Aygıtı" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "Kaldır" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "Çıkış Aygıtı" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "Ekle" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" +"Seçilen Model Yüklenmedi. Biçimi Desteklenmiyor Olabilir. Bunun Yerine " +"Standart Modele Dönüldü." + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "Model Dosyasını İçe Aktar" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise Modelleri" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "Bas Yükseltici" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "Bas Yüksekliği" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "Sarsıcı" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "Çapraz Besleme" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "Kristalleştirici" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "Deesser" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "Yankı Önleyici" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "Ekolayzır" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "Uyarıcı" + +#: src/tags_plugin_name.cpp:47 +#, fuzzy +msgid "Level Meter" +msgstr "Çıkış Aygıtı" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "Sınırlayıcı" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "Yükseltici" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "Çoklu Bant Şıkıştırıcı" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "Çoklu Bant Geçitleme" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "Yankılanma" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "Gürültü Azaltma" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "Konuşma İşleyici" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "Stereo Araçları" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} Kullanılabilir Değil" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-sonsuz" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Kullanılan" + +#, fuzzy +#~ msgid "Low-Cut Filter" +#~ msgstr "Süzgeç" + +#, fuzzy +#~ msgid "High-Cut Filter" +#~ msgstr "Yüksek Geçiş Süzgeci" + +#~ msgid "Uniform" +#~ msgstr "Aynı" + +#~ msgid "New Output Preset Name" +#~ msgstr "Yeni Çıkış Ön Ayarı Adı" + +#~ msgid "Search Output Preset" +#~ msgstr "Çıkış Ön Ayarı Ara" + +#~ msgid "Output Presets List" +#~ msgstr "Çıkış Ön Ayarları Listesi" + +#~ msgid "infinity" +#~ msgstr "sonsuzluk" + +#~ msgid "IIR" +#~ msgstr "IIR" + +#~ msgid "FIR" +#~ msgstr "FIR" + +#~ msgid "FFT" +#~ msgstr "FFT" + +#~ msgid "SPM" +#~ msgstr "SPM" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Oran" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Low-pass" +#~ msgstr "Düşük Geçiş" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "Yüksek Geçiş" + +#~ msgid "Gating" +#~ msgstr "Geçitleme" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct Düşük geçiş" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct Düşük geçiş" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct Düşük geçiş" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct Yüksek geçiş" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct Yüksek geçiş" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct Yüksek geçiş" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct Bant geçişi" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct Bant geçişi" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct Bant geçişi" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct Bant reddet" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct Bant reddet" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "12dB/oct Bant reddet" + +#~ msgid "Inertia" +#~ msgstr "Durağan" + +#~ msgid "Band Type" +#~ msgstr "Bant Türü" + +#~ msgid "Band Mode" +#~ msgstr "Bant Kipi" + +#~ msgid "Band Slope" +#~ msgstr "Bant Eğimi" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Yüksek Ses" + +#~ msgid "High Speed" +#~ msgstr "Yüksek Hız" + +#~ msgid "High Quality" +#~ msgstr "Yüksek Kalite" + +#~ msgid "High Consistency" +#~ msgstr "Yüksek Tutarlılık" + +#, fuzzy +#~ msgid "Formant" +#~ msgstr "Biçim" + +#, fuzzy +#~ msgid "Preserved" +#~ msgstr "Ön Ayarlar" + +#, fuzzy +#~ msgid "Crisp" +#~ msgstr "Canlılık" + +#, fuzzy +#~ msgid "Detector" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Compound" +#~ msgstr "Sıkıştırma" + +#, fuzzy +#~ msgid "Soft" +#~ msgstr "Yumuşak kırpım" + +#~ msgid "Independent" +#~ msgstr "Bağımsız" + +#~ msgid "Cents" +#~ msgstr "Küsür" + +#~ msgid "Octaves" +#~ msgstr "Oktav" + +#~ msgid "_Manual" +#~ msgstr "_Kılavuz" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "Easy Effects Kılavuzunu Aç" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} Sistemde Kurulu Değil" + +#~ msgid "High Pass" +#~ msgstr "Yüksek Geçiş" + +#~ msgid "Low Pass" +#~ msgstr "Düşük Geçiş" + +#~ msgid "Cancel" +#~ msgstr "İptal" + +#~ msgid " PreAmplification" +#~ msgstr " Ön Yükseltme" + +#~ msgid "Close (Press ESC)" +#~ msgstr "Kapat (ESC tuşuna basın)" + +#~ msgid "Frame Size" +#~ msgstr "Çerçeve Boyutu" + +#, fuzzy +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "Genel atlamayı etkinleştir/devre dışı bırak" + +#, fuzzy +#~ msgid " Low-Pass" +#~ msgstr "Düşük Geçiş" + +#, fuzzy +#~ msgid " Uniform" +#~ msgstr "Aynı" + +#~ msgid "Left Delay" +#~ msgstr "Sol Gecikme" + +#~ msgid "Right Delay" +#~ msgstr "Sağ Gecikme" + +#, fuzzy +#~ msgid "Left Dry Level" +#~ msgstr "Seviye" + +#, fuzzy +#~ msgid "Right Dry Level" +#~ msgstr "Seviye" + +#, fuzzy +#~ msgid "Left Wet Level" +#~ msgstr "Hedef Seviye" + +#, fuzzy +#~ msgid "Right Wet Level" +#~ msgstr "Hedef Seviye" + +#, fuzzy +#~ msgid "Suppression" +#~ msgstr "Bastırma Seviyesi" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "PipeWire uygulamaları için ses efektleri" + +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "Gürültü Azaltma (Hızlı)" + +#~ msgid "Load APO Preset" +#~ msgstr "APO Ön Ayarını Yükle" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "Çıkış Ön Ayarları: " + +#~ msgid "Input Presets: " +#~ msgstr "Giriş Ön Ayarları: " + +#, fuzzy +#~ msgid "Split Mode" +#~ msgstr "Ayır" + +#~ msgid "Split 1/2" +#~ msgstr "1/2 Böl" + +#, fuzzy +#~ msgid "Split Frequency 1" +#~ msgstr "Sıklık" + +#~ msgid "Split 2/3" +#~ msgstr "2/3 Böl" + +#, fuzzy +#~ msgid "Split Frequency 2" +#~ msgstr "Sıklık" + +#~ msgid "Split 3/4" +#~ msgstr "3/4 Böl" + +#, fuzzy +#~ msgid "Split Frequency 3" +#~ msgstr "Sıklık" + +#~ msgid "Sub Band" +#~ msgstr "Alt Bant" + +#, fuzzy +#~ msgid "Band 1 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 1 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 1 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 1 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 1 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 1 Makeup" +#~ msgstr "Süs" + +#~ msgid "Max Reduction" +#~ msgstr "Azalım" + +#~ msgid "Low Band" +#~ msgstr "Düşük Bant" + +#, fuzzy +#~ msgid "Band 2 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 2 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 2 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 2 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 2 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 2 Makeup" +#~ msgstr "Süs" + +#, fuzzy +#~ msgid "Band 2 Max Reduction" +#~ msgstr "Azalım" + +#~ msgid "Mid Band" +#~ msgstr "Orta Bant" + +#, fuzzy +#~ msgid "Band 3 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 3 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 3 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 3 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 3 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 3 Makeup" +#~ msgstr "Süs" + +#, fuzzy +#~ msgid "Band 3 Max Reduction" +#~ msgstr "Azalım" + +#~ msgid "High Band" +#~ msgstr "Yüksek Bant" + +#, fuzzy +#~ msgid "Band 4 Bypass" +#~ msgstr "Atla" + +#, fuzzy +#~ msgid "Band 4 Detection" +#~ msgstr "Keşif" + +#, fuzzy +#~ msgid "Band 4 Attack" +#~ msgstr "Atak" + +#, fuzzy +#~ msgid "Band 4 Release" +#~ msgstr "Bırak" + +#, fuzzy +#~ msgid "Band 4 Threshold" +#~ msgstr "Eşik" + +#, fuzzy +#~ msgid "Band 4 Makeup" +#~ msgstr "Süs" + +#, fuzzy +#~ msgid "Band 4 Max Reduction" +#~ msgstr "Azalım" + +#, fuzzy +#~ msgid "Wet Amount" +#~ msgstr "Miktar" + +#, fuzzy +#~ msgid "Dry Amount" +#~ msgstr "Miktar" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects gelişmiş bir ses işleme aracıdır. Ekolayzır, sınırlayıcı, " +#~ "sıkıştırıcı ve yankılanma araçları içerir. Bunları tamamlamak için ayrıca " +#~ "bir spektrum analizörü bulunmaktadır." + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects, PulseEffects'in devamıdır. EasyEffects yalnızca PipeWire'ın " +#~ "ses sunucusunu destekler. PulseAudio kullanıcıları bunun yerine " +#~ "PulseEffects kullanmalıdır." + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "EasyEffects, öntanımlı PipeWire ses sunucusunu kullandığından, " +#~ "kullandığınız uygulamaların tümü olmasa da çoğu ile çalışacaktır. " +#~ "Desteklenen tüm uygulamalar, her birinin ayrı ayrı etkinleştirilebileceği " +#~ "ana pencerede sunulur." + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "Ses çıkışını manipüle etmenin yanı sıra, EasyEffects, mikrofon gibi bir " +#~ "giriş cihazına da efektler uygulayabilir. Bu özellik ses kaydında da " +#~ "kullanışlıdır ve sesli konuşmalarda da iyi çalışır." + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "EasyEffects başlatıldığında, son oturumda kullanılan ayarlamaları " +#~ "rahatlıkla hatırlayacaktır. Tüm mevcut ayarları profil olarak kaydetmek " +#~ "de mümkündür." + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "İki ses çıkışı uygulamasını gösteren ana sayfa" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "Ses denetimlerini gösteren bas yükseltici sayfası" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "Ses denetimlerini gösteren sarsıcı sayfası" + +#~ msgid "This release adds the following features:" +#~ msgstr "Bu sürüm aşağıdaki özellikleri ekler:" + +#~ msgid "This release fixes the following bugs:" +#~ msgstr "Bu sürüm aşağıdaki hataları düzeltir:" + +#, fuzzy +#~ msgid "and #1427" +#~ msgstr "Bant 1" + +#, fuzzy +#~ msgid "Many translation updates" +#~ msgstr "Çeviriler güncellendi" + +#~ msgid "" +#~ "EasyEffects icon has been updated in a way that should make it visible in " +#~ "QT desktops." +#~ msgstr "" +#~ "EasyEffects simgesi, QT masaüstlerinde görünmesini sağlayacak şekilde " +#~ "güncellendi." + +#~ msgid "This release fixes the following bug:" +#~ msgstr "Bu sürüm aşağıdaki hatayı düzeltir:" + +#~ msgid "This release adds the following feature:" +#~ msgstr "Bu sürüm aşağıdaki özelliği ekler:" + +#~ msgid "Better support for computer suspending." +#~ msgstr "Bilgisayarın askıya alınması için daha iyi destek." + +#~ msgid "Updated translations" +#~ msgstr "Çeviriler güncellendi" + +#~ msgid "" +#~ "LibAdwaita is used to create some parts of our window and for handling " +#~ "the switching between dark and light themes." +#~ msgstr "" +#~ "LibAdwaita, penceremizin bazı bölümlerini oluşturmak ve koyu ile açık " +#~ "temalar arasında geçiş yapmak için kullanılır." + +#~ msgid "The settings menu has been redesigned using LibAdwaita widgets." +#~ msgstr "" +#~ "Ayarlar menüsü, LibAdwaita widget'ları kullanılarak yeniden tasarlandı." + +#~ msgid "" +#~ "GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly." +#~ msgstr "" +#~ "GTKMM ve GLIBMM artık bir bağımlılık değil. Artık doğrudan gtk4 " +#~ "kullanıyoruz." + +#~ msgid "" +#~ "Pavucontrol is not added anymore to input applications list on systems " +#~ "with localization different than English." +#~ msgstr "" +#~ "İngilizce'den farklı yerelleştirmeye sahip sistemlerde giriş uygulamaları " +#~ "listesine Pavucontrol artık eklenmiyor." + +#~ msgid "Updated Chinese translation." +#~ msgstr "Çince çeviri güncellendi." + +#~ msgid "Updated Italian translation." +#~ msgstr "İtalyanca çeviri güncellendi." + +#~ msgid "Fixed the locale in a few widgets" +#~ msgstr "Birkaç widget'ta yerel ayar düzeltildi" + +#~ msgid "Fixed wrong alignment in a few widgets" +#~ msgstr "Birkaç widget'ta yanlış hizalama düzeltildi" + +#~ msgid "Improved equalizer interface." +#~ msgstr "Ekolayzır arayüzü iyileştirildi." + +#~ msgid "" +#~ "The application and its repository have been renamed from PulseEffects to " +#~ "`EasyEffects`" +#~ msgstr "" +#~ "Uygulama ve deposu, PulseEffects'ten `EasyEffects` olarak yeniden " +#~ "adlandırıldı" + +#~ msgid "gtkmm3 was replaced by gtkmm4" +#~ msgstr "gtkmm3, gtkmm4 ile değiştirildi" + +#~ msgid "Gstreamer was replaced by native PipeWire filters." +#~ msgstr "Gstreamer, yerel PipeWire süzgeçleriyle değiştirildi." + +#~ msgid "" +#~ "New libraries are being used and some of the librarires that were " +#~ "optional before are now required" +#~ msgstr "" +#~ "Yeni kütüphaneler kullanılıyor ve daha önce isteğe bağlı olan " +#~ "kütüphanelerden bazıları artık gerekli" + +#~ msgid "Average" +#~ msgstr "Ortalama" + +#~ msgid "Failed" +#~ msgstr "Başarısız" + +#~ msgid "Use Default" +#~ msgstr "Öntanımlıyı Kullan" + +#~ msgid "Remove this plugin" +#~ msgstr "Bu eklentiyi kaldır" + +#~ msgid "Import Presets" +#~ msgstr "Önayarları İçe Aktar" + +#~ msgid "Start Service at Login" +#~ msgstr "Oturum Açarken Hizmeti Başlat" + +#, fuzzy +#~ msgid "Activate" +#~ msgstr "Etkin Model" + +#~ msgid "Add to Blocklist" +#~ msgstr "Kara Listeye Ekle" + +#~ msgid "Blocklist" +#~ msgstr "Kara Liste" + +#~ msgid "Add Plugin" +#~ msgstr "Eklenti Ekle" + +#~ msgid "Speakers" +#~ msgstr "Hoparlörler" + +#~ msgid "Microphone" +#~ msgstr "Mikrofon" + +#~ msgid "enabled" +#~ msgstr "etkin" + +#~ msgid "disabled" +#~ msgstr "devre dışı" + +#~ msgid "Plugins" +#~ msgstr "Eklentiler" + +#~ msgid "Format" +#~ msgstr "Biçim" + +#~ msgid "Latency" +#~ msgstr "Gecikme" + +#~ msgid "idle" +#~ msgstr "boşta" + +#~ msgid "Faster" +#~ msgstr "Daha Hızlı" + +#~ msgid "Preserve Formant" +#~ msgstr "Biçimlendiriciyi Koru" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Show Spectrum" +#~ msgstr "Spektrumu Göster" + +#~ msgid "Use Custom Color" +#~ msgstr "Özel Renk Kullan" + +#~ msgid "Use Gradient" +#~ msgstr "Geçişli Renk Kullan" + +#~ msgid "Spectrum Color" +#~ msgstr "Spektrum Rengi" + +#~ msgid "Gradient Color" +#~ msgstr "Geçiş Rengi" + +#~ msgid "Spectrum Type" +#~ msgstr "Spektrum Türü" + +#~ msgid "Exponent" +#~ msgstr "Katsayı" + +#~ msgid "Sampling" +#~ msgstr "Örnekleme" + +#~ msgid "Block Size" +#~ msgstr "Blok Boyutu" + +#~ msgid "Pipeline Input" +#~ msgstr "Pipeline Giriş" + +#~ msgid "Buffer" +#~ msgstr "Arabellek" + +#~ msgid "Niceness" +#~ msgstr "Hassaslık" + +#~ msgid "Priority Type" +#~ msgstr "Öncelik Türü" + +#~ msgid "About" +#~ msgstr "Hakkında" + +#~ msgid "Priority" +#~ msgstr "Öncelik" + +#~ msgid "Resampler" +#~ msgstr "Örnekleme" + +#~ msgid "Protocol" +#~ msgstr "Protokol" + +#~ msgid "Default Sample Format" +#~ msgstr "Öntanımlı Örnek Biçimi" + +#~ msgid "File" +#~ msgstr "Dosya" + +#~ msgid "Configuration" +#~ msgstr "Yapılandırma" + +#~ msgid "Resamplers" +#~ msgstr "Örnekleyiciler" + +#~ msgid "Detect Silence" +#~ msgstr "Sessizliği Algıla" + +#~ msgid "Weights" +#~ msgstr "Ağırlık" + +#~ msgid "Limit" +#~ msgstr "Sınır" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "LR4" +#~ msgstr "LR4" + +#~ msgid "LR8" +#~ msgstr "LR8" + +#~ msgid "Muted" +#~ msgstr "Sessiz" + +#~ msgid "Distant Headphones" +#~ msgstr "Uzak Kulaklıklar" + +#~ msgid "Reset Equalizer" +#~ msgstr "Ekolayzır Sıfırla" + +#~ msgid "RLC (BT)" +#~ msgstr "RLC (BT)" + +#~ msgid "RLC (MT)" +#~ msgstr "RLC (MT)" + +#~ msgid "BWC (BT)" +#~ msgstr "BWC (BT)" + +#~ msgid "BWC (MT)" +#~ msgstr "BWC (MT)" + +#~ msgid "LRX (BT)" +#~ msgstr "LRX (BT)" + +#~ msgid "LRX (MT)" +#~ msgstr "LRX (MT)" + +#~ msgid "APO (DR)" +#~ msgstr "APO (DR)" + +#~ msgid "x1" +#~ msgstr "x1" + +#~ msgid "x2" +#~ msgstr "x2" + +#~ msgid "x3" +#~ msgstr "x3" + +#~ msgid "x4" +#~ msgstr "x4" + +#~ msgid "Apply" +#~ msgstr "Uygula" + +#~ msgid "Dry" +#~ msgstr "Sertlik" + +#~ msgid "S/C Level" +#~ msgstr "S/C Seviye" + +#~ msgid "Import Impulse Response File" +#~ msgstr "Dürtü Yanıt Dosyasını İçeri Aktar" + +#~ msgid "Select the impulse Response File" +#~ msgstr "Dürtü Yanıt Dosyasını Seç" + +#~ msgid "Loudness Range" +#~ msgstr "Yüksek Ses Aralığı" + +#~ msgid "Before" +#~ msgstr "Öncesi" + +#~ msgid "After" +#~ msgstr "Sonrası" + +#~ msgid "Webrtc" +#~ msgstr "Webrtc" + +#~ msgid "Extended Filter" +#~ msgstr "Genişletilmiş Süzgeç" + +#~ msgid "Delay Agnostic" +#~ msgstr "Agnostik Gecikme" + +#~ msgid "Low" +#~ msgstr "Düşük" + +#~ msgid "Moderate" +#~ msgstr "Ölçülü" + +#~ msgid "High" +#~ msgstr "Yüksek" + +#~ msgid "Very High" +#~ msgstr "Çok Yüksek" + +#~ msgid "Adaptive Digital" +#~ msgstr "Dijital Uyarlamalı" + +#~ msgid "Fixed Digital" +#~ msgstr "Dijital Sabitleyici" + +#~ msgid "Detection Likelihood" +#~ msgstr "Algılama Olasılığı" + +#~ msgid "Very Low" +#~ msgstr "Çok Düşük" + +#~ msgid "" +#~ "Automatically apply this preset whenever the currently used device is " +#~ "plugged in the system" +#~ msgstr "" +#~ "Şu anda kullanılan cihaz sisteme takılı olduğunda bu ön ayarı otomatik " +#~ "olarak uygula" + +#~ msgid "Volume" +#~ msgstr "Ses" + +#~ msgid "Sine" +#~ msgstr "Sinüs" + +#~ msgid "Square" +#~ msgstr "Kare" + +#~ msgid "Saw" +#~ msgstr "Kesir" + +#~ msgid "Triangle" +#~ msgstr "Üçgen" + +#~ msgid "Pink Noise" +#~ msgstr "Pembe Gürültü" + +#~ msgid "Ticks" +#~ msgstr "İşaretler" + +#~ msgid "Gaussian Noise" +#~ msgstr "Gauss Gürültü" + +#~ msgid "Blue Noise" +#~ msgstr "Mavi Gürültü" + +#~ msgid "Violet Noise" +#~ msgstr "Menekşe Gürültü" + +#~ msgid "Measure Noise" +#~ msgstr "Gürültü Ölçümü" + +#~ msgid "Subtract Noise" +#~ msgstr "Gürültü Çıkar" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "Sesi ayarla ve efektleri aç/kapat" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "Yerleşik ön ayarlara sahip bir ekolayzır içerir" + +#~ msgid "Input Limiter" +#~ msgstr "Giriş Sınırlayıcı" + +#~ msgid "Calibration" +#~ msgstr "Kalibrasyon" + +#~ msgid "easyeffects" +#~ msgstr "easyeffects" + +#~ msgid "Pulseaudio" +#~ msgstr "Pulseaudio" + +#~ msgid "paused" +#~ msgstr "durdurulmuş" + +#~ msgid "playing" +#~ msgstr "oynatılıyor" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..bd969d6 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,2458 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-10-05 06:10+0000\n" +"Last-Translator: Max Digital \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.1-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "EasyEffects" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "Еквалайзер, компресор та інші звукові ефекти" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "Аудіоефекти для додатків PipeWire" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "обмежувач;компресор;реверберація;еквалайзер;автогучність;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +#, fuzzy +msgid "\"Presets\"" +msgstr "\"Пресети\"" + +#: data/ui/app_info.ui:212 +#, fuzzy +msgid "Enable/disable this application" +msgstr "Увімкнути / Вимкнути цей додаток" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "Увімкнути" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "Список виключених програм: Додати/видалити цей додаток" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "Виключити" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +#, fuzzy +msgid "Mute Application" +msgstr "Вимкнути звук програми" + +#: data/ui/app_info.ui:270 +#, fuzzy +msgid "Change the volume of this application" +msgstr "Змініть гучність цієї програми" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "Гучність програми" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "_Допомога" + +#: data/ui/application_window.ui:12 +#, fuzzy +msgid "_Reset Settings" +msgstr "_Скинути налаштування" + +#: data/ui/application_window.ui:18 +#, fuzzy +msgid "_Preferences" +msgstr "_Налаштування" + +#: data/ui/application_window.ui:22 +#, fuzzy +msgid "_Shortcuts" +msgstr "_Швидкі команди" + +#: data/ui/application_window.ui:26 +#, fuzzy +msgid "_About Easy Effects" +msgstr "_Про Easy Effects" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +#, fuzzy +msgid "Presets" +msgstr "Пресети" + +#: data/ui/application_window.ui:55 +#, fuzzy +msgid "Presets Menu" +msgstr "Меню пресетів" + +#: data/ui/application_window.ui:62 +#, fuzzy +msgid "Enable/disable the global bypass" +msgstr "Увімкнути/вимкнути глобальний обхід" + +#: data/ui/application_window.ui:67 +#, fuzzy +msgid "Global Bypass" +msgstr "Глобальний обхід" + +#: data/ui/application_window.ui:77 +#, fuzzy +msgid "Primary Menu" +msgstr "Основне меню" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "Вікно Eassy Effects" + +#: data/ui/apps_box.ui:17 +#, fuzzy +msgid "Applications List" +msgstr "Список додатків" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "Порожній список" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +#, fuzzy +msgid "Reset History" +msgstr "Очистити історію" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "Ціль" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "Тиша" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +#, fuzzy +msgid "Momentary" +msgstr "Миттєве" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +#, fuzzy +msgid "Short-Term" +msgstr "Короткострокові" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +#, fuzzy +msgid "Integrated" +msgstr "Інтегроване" + +#: data/ui/autogain.ui:125 +#, fuzzy +msgid "Geometric Mean (MSI)" +msgstr "Середнє геометричне (MSI)" + +#: data/ui/autogain.ui:126 +#, fuzzy +msgid "Geometric Mean (MS)" +msgstr "Середнє геометричне (MS)" + +#: data/ui/autogain.ui:127 +#, fuzzy +msgid "Geometric Mean (MI)" +msgstr "Середнє геометричне (MI)" + +#: data/ui/autogain.ui:128 +#, fuzzy +msgid "Geometric Mean (SI)" +msgstr "Середнє геометричне (SІ)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +#, fuzzy +msgid "Loudness" +msgstr "Гучність" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +#, fuzzy +msgid "Relative" +msgstr "Відносне" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +#, fuzzy +msgid "Range" +msgstr "Діапазон" + +#: data/ui/autogain.ui:378 +#, fuzzy +msgid "Output Gain" +msgstr "Вихідний коефіцієнт підсилення" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +#, fuzzy +msgid "Input" +msgstr "Вхідний пристрій" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "Вихід" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "Скинути" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +#, fuzzy +msgid "Device" +msgstr "Пристрій" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +#, fuzzy +msgid "Name" +msgstr "Назва" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "Профіль" + +#: data/ui/autoload_row.ui:89 +#, fuzzy +msgid "Preset" +msgstr "Пресет" + +#: data/ui/autoload_row.ui:114 +#, fuzzy +msgid "Remove this autoload preset" +msgstr "Видаліть цей параметр автозавантаження" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "Прослухати" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3-й" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2-й" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +#, fuzzy +msgid "Amount" +msgstr "Кількість" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "" + +#: data/ui/bass_loudness.ui:71 +msgid "Link" +msgstr "Посилання" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "Назва програми" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "Додати до виключених програм" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "Список виключених програм" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "Показати виключені програми" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "Компресор" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "Режим" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "Вниз" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "Вгору" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "Підсилення" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +#, fuzzy +msgid "Compression Mode" +msgstr "Режим стиснення" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "Час" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "Поріг" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "Співвідношення" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +msgid "Stereo Split Mode" +msgstr "" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +msgid "Left/Right" +msgstr "" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +msgid "Right/Left" +msgstr "" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +msgid "Mid/Side" +msgstr "" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +msgid "Side/Mid" +msgstr "" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +msgid "Stereo Split Source" +msgstr "" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +msgid "Listen Sidechain" +msgstr "" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:48 +msgid "First Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:82 +msgid "Second Kernel" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "" + +#: data/ui/deepfilternet.ui:31 +msgid "Attenuation Limit" +msgstr "" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +msgid "Post Filter Beta" +msgstr "" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "" + +#: data/ui/expander.ui:86 +msgid "Expander Mode" +msgstr "" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "" + +#: data/ui/filter.ui:46 +msgid "Low-Shelf" +msgstr "" + +#: data/ui/filter.ui:47 +msgid "High-Shelf" +msgstr "" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "" + +#: data/ui/filter.ui:49 +msgid "Band-Pass" +msgstr "" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "" + +#: data/ui/filter.ui:52 +msgid "Ladder-Pass" +msgstr "" + +#: data/ui/filter.ui:53 +msgid "Ladder-Rejection" +msgstr "" + +#: data/ui/filter.ui:54 +msgid "All-Pass" +msgstr "" + +#: data/ui/filter.ui:95 +msgid "Equalizer Mode" +msgstr "" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +msgid "Linear Phase" +msgstr "" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +msgid "Stereo Split" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +msgid "Low-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +msgid "High-Cut" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "" + +#: data/ui/pitch.ui:81 +msgid "Seek Window" +msgstr "" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "" + +#: data/ui/presets_menu.ui:30 +msgid "New Preset Name" +msgstr "" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "Пресет" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "Пресети" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "" + +#: src/tags_plugin_name.cpp:37 +msgid "Crystalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, fuzzy, c++-format +msgid "Using {}" +msgstr "Використання" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "Співвідношення" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "Поріг" + +#, fuzzy +#~ msgid "Loudness List" +#~ msgstr "Гучність" + +#, fuzzy +#~ msgid "_Manual" +#~ msgstr "_Посібник" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..4051cdb --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,3058 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the easyeffects package. +# FIRST AUTHOR , YEAR. +# eternal , 2020-2021. +# +msgid "" +msgstr "" +"Project-Id-Version: easyeffects\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-27 11:34-0300\n" +"PO-Revision-Date: 2023-08-17 14:53+0000\n" +"Last-Translator: hch12907 \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.0-dev\n" + +#. Translators: This is a variable for the application name, don't translate! +#: data/com.github.wwmm.easyeffects.desktop.in:4 +msgid "@APP_NAME@" +msgstr "@APP_NAME@" + +#: data/com.github.wwmm.easyeffects.desktop.in:5 +msgid "Equalizer, Compressor and Other Audio Effects" +msgstr "均衡器、压缩器和其他音效" + +#: data/com.github.wwmm.easyeffects.desktop.in:6 +msgid "Audio Effects for PipeWire Applications" +msgstr "为使用 PipeWire 的应用提供音效" + +#: data/com.github.wwmm.easyeffects.desktop.in:7 +msgid "limiter;compressor;reverberation;equalizer;autovolume;" +msgstr "限幅器;压缩器;混响;均衡器;自动音量;" + +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:14 +#: data/schemas/com.github.wwmm.easyeffects.gschema.xml:17 +msgid "\"Presets\"" +msgstr "\"预设\"" + +#: data/ui/app_info.ui:212 +msgid "Enable/disable this application" +msgstr "启用/禁用此应用程序" + +#: data/ui/app_info.ui:213 data/ui/rnnoise.ui:52 +msgid "Enable" +msgstr "启用" + +#: data/ui/app_info.ui:225 +msgid "Excluded App List: Add/remove this application" +msgstr "排除的应用程序列表:添加/删除此应用程序" + +#: data/ui/app_info.ui:226 +msgid "Exclude" +msgstr "排除" + +#: data/ui/app_info.ui:247 data/ui/app_info.ui:249 +msgid "Mute Application" +msgstr "将程序静音" + +#: data/ui/app_info.ui:270 +msgid "Change the volume of this application" +msgstr "改变该应用的音量" + +#: data/ui/app_info.ui:272 +msgid "Application Volume" +msgstr "应用程序音量" + +#: data/ui/application_window.ui:6 +msgid "_Help" +msgstr "帮助(_H)" + +#: data/ui/application_window.ui:12 +msgid "_Reset Settings" +msgstr "重置设置(_R)" + +#: data/ui/application_window.ui:18 +msgid "_Preferences" +msgstr "首选项(_P)" + +#: data/ui/application_window.ui:22 +msgid "_Shortcuts" +msgstr "快捷键(_S)" + +#: data/ui/application_window.ui:26 +msgid "_About Easy Effects" +msgstr "关于 EasyEffects (_A)" + +#: data/ui/application_window.ui:53 data/ui/crossfeed.ui:27 +#: data/ui/reverb.ui:25 src/presets_menu.cpp:103 src/presets_menu.cpp:390 +#: src/presets_menu.cpp:401 src/presets_menu.cpp:429 src/presets_menu.cpp:440 +msgid "Presets" +msgstr "预设" + +#: data/ui/application_window.ui:55 +msgid "Presets Menu" +msgstr "预设菜单" + +#: data/ui/application_window.ui:62 +msgid "Enable/disable the global bypass" +msgstr "开启/关闭全局旁通" + +#: data/ui/application_window.ui:67 +msgid "Global Bypass" +msgstr "全局旁路" + +#: data/ui/application_window.ui:77 +msgid "Primary Menu" +msgstr "主菜单" + +#: data/ui/application_window.ui:93 +msgid "Easy Effects Window" +msgstr "EasyEffects 窗口" + +#: data/ui/apps_box.ui:17 +msgid "Applications List" +msgstr "应用程序列表" + +#: data/ui/apps_box.ui:27 +msgid "Empty List" +msgstr "空列表" + +#: data/ui/apps_box.ui:28 +msgid "No Audio Application Available" +msgstr "没有可用的音频应用程序" + +#: data/ui/autogain.ui:25 data/ui/level_meter.ui:25 +msgid "Reset History" +msgstr "清除记录" + +#: data/ui/autogain.ui:39 +msgid "Controls" +msgstr "控制" + +#: data/ui/autogain.ui:43 +msgid "Target" +msgstr "目标" + +#: data/ui/autogain.ui:67 +msgid "Silence" +msgstr "静音" + +#: data/ui/autogain.ui:92 +msgid "Maximum History" +msgstr "历史记录最大值" + +#: data/ui/autogain.ui:116 +msgid "Reference" +msgstr "参考" + +#: data/ui/autogain.ui:122 data/ui/autogain.ui:159 data/ui/level_meter.ui:83 +msgid "Momentary" +msgstr "瞬时" + +#: data/ui/autogain.ui:123 data/ui/autogain.ui:196 data/ui/level_meter.ui:120 +msgid "Short-Term" +msgstr "短期" + +#: data/ui/autogain.ui:124 data/ui/autogain.ui:232 data/ui/level_meter.ui:156 +msgid "Integrated" +msgstr "综合" + +#: data/ui/autogain.ui:125 +msgid "Geometric Mean (MSI)" +msgstr "几何平均 (MSI)" + +#: data/ui/autogain.ui:126 +msgid "Geometric Mean (MS)" +msgstr "几何平均 (MS)" + +#: data/ui/autogain.ui:127 +msgid "Geometric Mean (MI)" +msgstr "几何平均 (MI)" + +#: data/ui/autogain.ui:128 +msgid "Geometric Mean (SI)" +msgstr "几何平均 (SI)" + +#: data/ui/autogain.ui:145 data/ui/autogain.ui:342 data/ui/bass_loudness.ui:27 +#: data/ui/level_meter.ui:69 src/tags_plugin_name.cpp:49 +msgid "Loudness" +msgstr "响度" + +#: data/ui/autogain.ui:268 data/ui/level_meter.ui:192 +msgid "Relative" +msgstr "相对值" + +#: data/ui/autogain.ui:304 data/ui/level_meter.ui:228 +msgid "Range" +msgstr "范围" + +#: data/ui/autogain.ui:378 +msgid "Output Gain" +msgstr "输出增益" + +#: data/ui/autogain.ui:423 data/ui/bass_enhancer.ui:262 +#: data/ui/bass_loudness.ui:110 data/ui/compressor.ui:661 +#: data/ui/compressor.ui:1155 data/ui/convolver.ui:226 data/ui/crossfeed.ui:119 +#: data/ui/crystalizer.ui:46 data/ui/deesser.ui:424 data/ui/delay.ui:231 +#: data/ui/deepfilternet.ui:211 data/ui/echo_canceller.ui:112 +#: data/ui/equalizer.ui:382 data/ui/exciter.ui:262 data/ui/expander.ui:580 +#: data/ui/expander.ui:1073 data/ui/filter.ui:294 data/ui/gate.ui:794 +#: data/ui/gate.ui:1287 data/ui/level_meter.ui:274 data/ui/limiter.ui:750 +#: data/ui/loudness.ui:150 data/ui/maximizer.ui:109 +#: data/ui/multiband_compressor.ui:495 data/ui/multiband_gate.ui:495 +#: data/ui/pipe_manager_box.ui:306 data/ui/pitch.ui:225 data/ui/reverb.ui:366 +#: data/ui/rnnoise.ui:274 data/ui/speex.ui:190 data/ui/stereo_tools.ui:40 +#: data/ui/stereo_tools.ui:629 +msgid "Input" +msgstr "输入" + +#: data/ui/autogain.ui:442 data/ui/bass_enhancer.ui:281 +#: data/ui/bass_loudness.ui:129 data/ui/compressor.ui:1174 +#: data/ui/convolver.ui:245 data/ui/crossfeed.ui:138 data/ui/crystalizer.ui:65 +#: data/ui/deesser.ui:443 data/ui/delay.ui:250 data/ui/deepfilternet.ui:230 +#: data/ui/echo_canceller.ui:131 data/ui/equalizer.ui:401 +#: data/ui/exciter.ui:281 data/ui/expander.ui:1092 data/ui/filter.ui:313 +#: data/ui/gate.ui:1306 data/ui/limiter.ui:769 data/ui/loudness.ui:169 +#: data/ui/maximizer.ui:128 data/ui/multiband_compressor.ui:514 +#: data/ui/multiband_gate.ui:514 data/ui/pitch.ui:244 data/ui/reverb.ui:385 +#: data/ui/rnnoise.ui:293 data/ui/speex.ui:209 data/ui/stereo_tools.ui:648 +msgid "Plugin Input Gain" +msgstr "插件输入增益" + +#: data/ui/autogain.ui:507 data/ui/bass_enhancer.ui:346 +#: data/ui/bass_loudness.ui:49 data/ui/bass_loudness.ui:194 +#: data/ui/compressor.ui:1239 data/ui/convolver.ui:310 data/ui/crossfeed.ui:203 +#: data/ui/crystalizer.ui:130 data/ui/deesser.ui:508 data/ui/delay.ui:315 +#: data/ui/deepfilternet.ui:295 data/ui/echo_canceller.ui:196 +#: data/ui/equalizer.ui:466 data/ui/exciter.ui:346 data/ui/expander.ui:1157 +#: data/ui/filter.ui:378 data/ui/gate.ui:1371 data/ui/limiter.ui:834 +#: data/ui/loudness.ui:234 data/ui/maximizer.ui:193 +#: data/ui/multiband_compressor.ui:579 data/ui/multiband_gate.ui:579 +#: data/ui/pipe_manager_box.ui:209 data/ui/pitch.ui:309 data/ui/reverb.ui:450 +#: data/ui/rnnoise.ui:358 data/ui/speex.ui:274 data/ui/stereo_tools.ui:385 +#: data/ui/stereo_tools.ui:713 +msgid "Output" +msgstr "输出" + +#: data/ui/autogain.ui:526 data/ui/bass_enhancer.ui:365 +#: data/ui/bass_loudness.ui:213 data/ui/compressor.ui:1258 +#: data/ui/convolver.ui:329 data/ui/crossfeed.ui:222 data/ui/crystalizer.ui:149 +#: data/ui/deesser.ui:527 data/ui/delay.ui:334 data/ui/deepfilternet.ui:314 +#: data/ui/echo_canceller.ui:215 data/ui/equalizer.ui:485 +#: data/ui/exciter.ui:365 data/ui/expander.ui:1176 data/ui/filter.ui:397 +#: data/ui/gate.ui:1390 data/ui/limiter.ui:853 data/ui/loudness.ui:253 +#: data/ui/maximizer.ui:212 data/ui/multiband_compressor.ui:598 +#: data/ui/multiband_gate.ui:598 data/ui/pitch.ui:328 data/ui/reverb.ui:469 +#: data/ui/rnnoise.ui:377 data/ui/speex.ui:293 data/ui/stereo_tools.ui:732 +msgid "Plugin Output Gain" +msgstr "插件输出增益" + +#: data/ui/autogain.ui:591 data/ui/bass_enhancer.ui:462 +#: data/ui/bass_loudness.ui:279 data/ui/compressor.ui:1323 +#: data/ui/convolver.ui:395 data/ui/crossfeed.ui:288 data/ui/crystalizer.ui:204 +#: data/ui/deesser.ui:653 data/ui/delay.ui:399 data/ui/deepfilternet.ui:379 +#: data/ui/echo_canceller.ui:281 data/ui/equalizer.ui:550 +#: data/ui/exciter.ui:461 data/ui/expander.ui:1241 data/ui/filter.ui:462 +#: data/ui/gate.ui:1455 data/ui/limiter.ui:918 data/ui/loudness.ui:318 +#: data/ui/maximizer.ui:310 data/ui/multiband_compressor.ui:663 +#: data/ui/multiband_gate.ui:663 data/ui/pitch.ui:393 data/ui/reverb.ui:535 +#: data/ui/rnnoise.ui:442 data/ui/speex.ui:359 data/ui/stereo_tools.ui:798 +msgid "Reset" +msgstr "重置" + +#: data/ui/autoload_row.ui:16 data/ui/compressor.ui:684 data/ui/expander.ui:603 +#: data/ui/gate.ui:817 +msgid "Device" +msgstr "设备" + +#: data/ui/autoload_row.ui:40 data/ui/factory_clients_listview.ui:44 +#: data/ui/factory_modules_listview.ui:44 data/ui/pipe_manager_box.ui:53 +#: data/ui/pipe_manager_box.ui:89 data/ui/presets_menu.ui:26 +msgid "Name" +msgstr "名称" + +#: data/ui/autoload_row.ui:64 +msgid "Profile" +msgstr "概述" + +#: data/ui/autoload_row.ui:89 +msgid "Preset" +msgstr "预设" + +#: data/ui/autoload_row.ui:114 +msgid "Remove this autoload preset" +msgstr "删除此自动加载预设" + +#: data/ui/bass_enhancer.ui:23 data/ui/compressor.ui:638 data/ui/deesser.ui:24 +#: data/ui/exciter.ui:23 data/ui/expander.ui:557 data/ui/gate.ui:771 +msgid "Listen" +msgstr "聆听" + +#: data/ui/bass_enhancer.ui:34 data/ui/exciter.ui:34 +msgid "Blend Harmonics" +msgstr "谐波注入" + +#: data/ui/bass_enhancer.ui:46 data/ui/exciter.ui:46 +msgid "3rd" +msgstr "3 次" + +#: data/ui/bass_enhancer.ui:89 data/ui/exciter.ui:89 +msgid "2nd" +msgstr "2 次" + +#: data/ui/bass_enhancer.ui:108 data/ui/exciter.ui:108 +msgid "Amount" +msgstr "程度" + +#: data/ui/bass_enhancer.ui:142 data/ui/bass_enhancer.ui:424 +#: data/ui/exciter.ui:142 data/ui/exciter.ui:424 +msgid "Harmonics" +msgstr "谐波" + +#: data/ui/bass_enhancer.ui:177 data/ui/exciter.ui:177 +msgid "Scope" +msgstr "范围" + +#: data/ui/bass_enhancer.ui:211 +msgid "Floor" +msgstr "下限" + +#: data/ui/bass_enhancer.ui:240 +msgid "Floor Value" +msgstr "下限" + +#: data/ui/bass_loudness.ui:71 +#, fuzzy +msgid "Link" +msgstr "连接" + +#: data/ui/blocklist_menu.ui:23 data/ui/blocklist_menu.ui:26 +msgid "Application Name" +msgstr "应用程序名称" + +#: data/ui/blocklist_menu.ui:42 +msgid "Add to Excluded Applications" +msgstr "添加到排除的程序" + +#: data/ui/blocklist_menu.ui:86 +msgid "Excluded Applications List" +msgstr "已排除程序列表" + +#: data/ui/blocklist_menu.ui:99 +msgid "Show Excluded Applications" +msgstr "显示已排除的程序" + +#: data/ui/compressor.ui:25 data/ui/delay.ui:25 data/ui/equalizer.ui:283 +#: data/ui/expander.ui:25 data/ui/filter.ui:25 data/ui/gate.ui:25 +#: data/ui/limiter.ui:25 data/ui/loudness.ui:25 +#: data/ui/multiband_compressor.ui:105 data/ui/multiband_gate.ui:105 +msgid "Show Native Window" +msgstr "显示原生窗口" + +#: data/ui/compressor.ui:51 src/tags_plugin_name.cpp:34 +msgid "Compressor" +msgstr "压缩器" + +#: data/ui/compressor.ui:63 data/ui/compressor.ui:606 data/ui/compressor.ui:885 +#: data/ui/deesser.ui:68 data/ui/equalizer.ui:62 data/ui/equalizer_band.ui:122 +#: data/ui/expander.ui:63 data/ui/expander.ui:525 data/ui/expander.ui:803 +#: data/ui/filter.ui:68 data/ui/gate.ui:739 data/ui/gate.ui:1017 +#: data/ui/limiter.ui:56 data/ui/multiband_compressor_band.ui:544 +#: data/ui/multiband_gate_band.ui:603 +msgid "Mode" +msgstr "模式" + +#: data/ui/compressor.ui:76 data/ui/expander.ui:76 +#: data/ui/multiband_compressor_band.ui:101 +msgid "Downward" +msgstr "向下" + +#: data/ui/compressor.ui:77 data/ui/expander.ui:77 +#: data/ui/multiband_compressor_band.ui:102 +msgid "Upward" +msgstr "向上" + +#: data/ui/compressor.ui:78 data/ui/multiband_compressor_band.ui:103 +msgid "Boosting" +msgstr "加强" + +#: data/ui/compressor.ui:87 data/ui/multiband_compressor_band.ui:88 +msgid "Compression Mode" +msgstr "压缩模式" + +#: data/ui/compressor.ui:94 data/ui/multiband_compressor_band.ui:821 +msgid "Boost Threshold" +msgstr "增强阈值" + +#: data/ui/compressor.ui:134 data/ui/multiband_compressor_band.ui:777 +msgid "Boost Amount" +msgstr "增强量" + +#: data/ui/compressor.ui:181 data/ui/expander.ui:100 data/ui/gate.ui:70 +#: data/ui/limiter.ui:284 data/ui/limiter.ui:507 +#: data/ui/multiband_compressor_band.ui:190 data/ui/multiband_gate_band.ui:144 +msgid "Attack" +msgstr "建立" + +#: data/ui/compressor.ui:192 data/ui/expander.ui:111 +#: data/ui/multiband_compressor_band.ui:170 +msgid "Time" +msgstr "时间" + +#: data/ui/compressor.ui:202 data/ui/deesser.ui:307 data/ui/expander.ui:121 +#: data/ui/gate.ui:163 data/ui/gate.ui:257 data/ui/limiter.ui:368 +#: data/ui/maximizer.ui:50 data/ui/multiband_compressor_band.ui:181 +#: data/ui/multiband_gate_band.ui:237 data/ui/multiband_gate_band.ui:331 +#: data/ui/rnnoise.ui:65 +msgid "Threshold" +msgstr "阈值" + +#: data/ui/compressor.ui:228 data/ui/expander.ui:147 +#: data/ui/multiband_compressor_band.ui:226 +msgid "Attack Time" +msgstr "建立时间" + +#: data/ui/compressor.ui:250 data/ui/expander.ui:169 data/ui/gate.ui:547 +#: data/ui/multiband_compressor_band.ui:251 +msgid "Attack Threshold" +msgstr "建立阈值" + +#: data/ui/compressor.ui:257 data/ui/expander.ui:176 data/ui/gate.ui:76 +#: data/ui/limiter.ui:326 data/ui/limiter.ui:544 data/ui/maximizer.ui:27 +#: data/ui/multiband_compressor_band.ui:199 data/ui/multiband_gate_band.ui:150 +#: data/ui/rnnoise.ui:119 +msgid "Release" +msgstr "释放" + +#: data/ui/compressor.ui:283 data/ui/expander.ui:202 +#: data/ui/multiband_compressor_band.ui:278 +msgid "Release Time" +msgstr "释放时间" + +#: data/ui/compressor.ui:307 data/ui/expander.ui:226 data/ui/gate.ui:601 +#: data/ui/multiband_compressor_band.ui:306 +msgid "Release Threshold" +msgstr "释放阈值" + +#: data/ui/compressor.ui:314 data/ui/deesser.ui:341 data/ui/expander.ui:233 +#: data/ui/multiband_compressor_band.ui:313 +msgid "Ratio" +msgstr "比率" + +#: data/ui/compressor.ui:351 data/ui/expander.ui:270 data/ui/limiter.ui:580 +#: data/ui/multiband_compressor_band.ui:351 +msgid "Knee" +msgstr "拐点" + +#: data/ui/compressor.ui:386 data/ui/deesser.ui:376 data/ui/expander.ui:305 +#: data/ui/gate.ui:438 data/ui/multiband_compressor_band.ui:389 +#: data/ui/multiband_gate_band.ui:418 +msgid "Makeup" +msgstr "补偿" + +#: data/ui/compressor.ui:421 data/ui/delay.ui:63 data/ui/delay.ui:153 +#: data/ui/expander.ui:340 data/ui/gate.ui:352 +#: data/ui/multiband_compressor.ui:174 data/ui/multiband_gate.ui:174 +#: data/ui/reverb.ui:212 data/ui/stereo_tools.ui:538 +msgid "Dry Level" +msgstr "干声级别" + +#: data/ui/compressor.ui:456 data/ui/delay.ui:87 data/ui/delay.ui:177 +#: data/ui/expander.ui:375 data/ui/gate.ui:357 +#: data/ui/multiband_compressor.ui:208 data/ui/multiband_gate.ui:208 +#: data/ui/reverb.ui:246 data/ui/rnnoise.ui:92 data/ui/stereo_tools.ui:574 +msgid "Wet Level" +msgstr "湿声级别" + +#: data/ui/compressor.ui:498 data/ui/compressor.ui:519 +#: data/ui/compressor.ui:1091 data/ui/expander.ui:417 data/ui/expander.ui:438 +#: data/ui/expander.ui:1009 data/ui/gate.ui:631 data/ui/gate.ui:652 +#: data/ui/gate.ui:1223 data/ui/multiband_compressor_band.ui:474 +#: data/ui/multiband_gate_band.ui:533 +msgid "Sidechain" +msgstr "侧链" + +#: data/ui/compressor.ui:530 data/ui/compressor.ui:536 data/ui/expander.ui:449 +#: data/ui/expander.ui:455 data/ui/gate.ui:663 data/ui/gate.ui:669 +#: data/ui/multiband_compressor.ui:121 data/ui/multiband_compressor.ui:128 +#: data/ui/multiband_gate.ui:121 data/ui/multiband_gate.ui:128 +#, fuzzy +msgid "Stereo Split Mode" +msgstr "立体声模式" + +#: data/ui/compressor.ui:543 data/ui/expander.ui:462 data/ui/gate.ui:676 +#: data/ui/multiband_compressor_band.ui:463 data/ui/multiband_gate_band.ui:522 +msgid "Source" +msgstr "源" + +#: data/ui/compressor.ui:555 data/ui/expander.ui:474 data/ui/gate.ui:688 +#: data/ui/multiband_compressor_band.ui:486 data/ui/multiband_gate_band.ui:545 +msgid "Middle" +msgstr "中央" + +#: data/ui/compressor.ui:556 data/ui/expander.ui:475 data/ui/gate.ui:689 +#: data/ui/multiband_compressor_band.ui:487 data/ui/multiband_gate_band.ui:546 +msgid "Side" +msgstr "侧边" + +#: data/ui/compressor.ui:557 data/ui/delay.ui:38 data/ui/equalizer.ui:219 +#: data/ui/expander.ui:476 data/ui/gate.ui:690 data/ui/level_meter.ui:43 +#: data/ui/multiband_compressor_band.ui:488 data/ui/multiband_gate_band.ui:547 +#: data/ui/pipe_manager_box.ui:504 data/ui/stereo_tools.ui:165 +msgid "Left" +msgstr "左" + +#: data/ui/compressor.ui:558 data/ui/delay.ui:128 data/ui/equalizer.ui:246 +#: data/ui/expander.ui:477 data/ui/gate.ui:691 data/ui/level_meter.ui:53 +#: data/ui/multiband_compressor_band.ui:489 data/ui/multiband_gate_band.ui:548 +#: data/ui/pipe_manager_box.ui:515 data/ui/stereo_tools.ui:220 +msgid "Right" +msgstr "右" + +#: data/ui/compressor.ui:559 data/ui/compressor.ui:582 data/ui/expander.ui:478 +#: data/ui/expander.ui:501 data/ui/gate.ui:692 data/ui/gate.ui:715 +#: data/ui/multiband_compressor_band.ui:490 +#: data/ui/multiband_compressor_band.ui:525 data/ui/multiband_gate_band.ui:549 +#: data/ui/multiband_gate_band.ui:584 +msgid "Min" +msgstr "输入端最低值" + +#: data/ui/compressor.ui:560 data/ui/compressor.ui:583 data/ui/expander.ui:479 +#: data/ui/expander.ui:502 data/ui/gate.ui:693 data/ui/gate.ui:716 +#: data/ui/multiband_compressor_band.ui:491 +#: data/ui/multiband_compressor_band.ui:526 data/ui/multiband_gate_band.ui:550 +#: data/ui/multiband_gate_band.ui:585 +msgid "Max" +msgstr "输入端最高值" + +#: data/ui/compressor.ui:569 data/ui/expander.ui:488 data/ui/gate.ui:702 +#: data/ui/multiband_compressor.ui:77 data/ui/multiband_compressor_band.ui:500 +#: data/ui/multiband_gate.ui:77 data/ui/multiband_gate_band.ui:559 +msgid "Sidechain Source" +msgstr "侧链声源" + +#: data/ui/compressor.ui:578 data/ui/expander.ui:497 data/ui/gate.ui:711 +#: data/ui/multiband_compressor_band.ui:521 data/ui/multiband_gate_band.ui:580 +#, fuzzy +msgid "Left/Right" +msgstr "延迟 L/R" + +#: data/ui/compressor.ui:579 data/ui/expander.ui:498 data/ui/gate.ui:712 +#: data/ui/multiband_compressor_band.ui:522 data/ui/multiband_gate_band.ui:581 +#, fuzzy +msgid "Right/Left" +msgstr "右" + +#: data/ui/compressor.ui:580 data/ui/expander.ui:499 data/ui/gate.ui:713 +#: data/ui/multiband_compressor_band.ui:523 data/ui/multiband_gate_band.ui:582 +#, fuzzy +msgid "Mid/Side" +msgstr "侧边" + +#: data/ui/compressor.ui:581 data/ui/expander.ui:500 data/ui/gate.ui:714 +#: data/ui/multiband_compressor_band.ui:524 data/ui/multiband_gate_band.ui:583 +#, fuzzy +msgid "Side/Mid" +msgstr "侧边" + +#: data/ui/compressor.ui:592 data/ui/expander.ui:511 data/ui/gate.ui:725 +#: data/ui/multiband_compressor_band.ui:535 data/ui/multiband_gate_band.ui:594 +#, fuzzy +msgid "Stereo Split Source" +msgstr "立体声模式" + +#: data/ui/compressor.ui:618 data/ui/deesser.ui:50 data/ui/expander.ui:537 +#: data/ui/gate.ui:751 data/ui/multiband_compressor_band.ui:559 +#: data/ui/multiband_gate_band.ui:618 +msgid "Peak" +msgstr "峰值" + +#: data/ui/compressor.ui:619 data/ui/deesser.ui:49 data/ui/expander.ui:538 +#: data/ui/gate.ui:752 data/ui/multiband_compressor_band.ui:560 +#: data/ui/multiband_gate_band.ui:619 +msgid "RMS" +msgstr "均方根值" + +#: data/ui/compressor.ui:620 data/ui/expander.ui:539 data/ui/gate.ui:753 +#: data/ui/multiband_compressor_band.ui:561 data/ui/multiband_gate_band.ui:620 +msgid "Low-Pass Filter" +msgstr "低通滤波器" + +#: data/ui/compressor.ui:621 data/ui/expander.ui:540 data/ui/gate.ui:754 +#: data/ui/multiband_compressor_band.ui:562 data/ui/multiband_gate_band.ui:621 +msgid "Simple Moving Average" +msgstr "简单移动平均法" + +#: data/ui/compressor.ui:630 data/ui/expander.ui:549 data/ui/gate.ui:763 +#: data/ui/multiband_compressor_band.ui:571 data/ui/multiband_gate_band.ui:630 +msgid "Sidechain Mode" +msgstr "侧链模式" + +#: data/ui/compressor.ui:644 data/ui/expander.ui:563 data/ui/gate.ui:777 +#, fuzzy +msgid "Listen Sidechain" +msgstr "外部侧链" + +#: data/ui/compressor.ui:673 data/ui/equalizer_band.ui:96 +#: data/ui/expander.ui:592 data/ui/filter.ui:37 data/ui/gate.ui:806 +msgid "Type" +msgstr "类型" + +#: data/ui/compressor.ui:699 +msgid "Feed-forward" +msgstr "前馈式" + +#: data/ui/compressor.ui:700 +msgid "Feed-back" +msgstr "反馈式" + +#: data/ui/compressor.ui:701 data/ui/expander.ui:619 data/ui/gate.ui:833 +msgid "External" +msgstr "外部" + +#: data/ui/compressor.ui:710 data/ui/expander.ui:628 data/ui/gate.ui:842 +msgid "Sidechain Type" +msgstr "侧链类型" + +#: data/ui/compressor.ui:738 data/ui/expander.ui:656 data/ui/gate.ui:870 +#: src/plugins_box.cpp:689 +msgid "Input Device" +msgstr "输入设备" + +#: data/ui/compressor.ui:745 data/ui/expander.ui:663 data/ui/gate.ui:877 +msgid "PreAmplification" +msgstr "前置放大" + +#: data/ui/compressor.ui:782 data/ui/expander.ui:700 data/ui/gate.ui:914 +#: data/ui/multiband_compressor_band.ui:710 data/ui/multiband_gate_band.ui:768 +msgid "Reactivity" +msgstr "响应" + +#: data/ui/compressor.ui:819 data/ui/expander.ui:737 data/ui/gate.ui:951 +#: data/ui/limiter.ui:242 data/ui/multiband_compressor_band.ui:744 +#: data/ui/multiband_gate_band.ui:801 +msgid "Lookahead" +msgstr "前视时间" + +#: data/ui/compressor.ui:862 data/ui/expander.ui:780 data/ui/gate.ui:994 +msgid "Sidechain Filters" +msgstr "侧链过滤器" + +#: data/ui/compressor.ui:872 data/ui/expander.ui:790 data/ui/filter.ui:45 +#: data/ui/gate.ui:1004 +msgid "High-Pass" +msgstr "高通滤波器" + +#: data/ui/compressor.ui:898 data/ui/equalizer_band.ui:192 +#: data/ui/expander.ui:816 data/ui/filter.ui:147 data/ui/gate.ui:1030 +#: data/ui/pipe_manager_box.ui:561 +msgid "Frequency" +msgstr "频率" + +#: data/ui/compressor.ui:913 data/ui/compressor.ui:973 data/ui/expander.ui:831 +#: data/ui/expander.ui:891 data/ui/gate.ui:1045 data/ui/gate.ui:1105 +msgid "Off" +msgstr "关闭" + +#: data/ui/compressor.ui:914 data/ui/compressor.ui:974 data/ui/expander.ui:832 +#: data/ui/expander.ui:892 data/ui/gate.ui:1046 data/ui/gate.ui:1106 +msgid "12 dB/oct" +msgstr "每八度 12 dB" + +#: data/ui/compressor.ui:915 data/ui/compressor.ui:975 data/ui/expander.ui:833 +#: data/ui/expander.ui:893 data/ui/gate.ui:1047 data/ui/gate.ui:1107 +msgid "24 dB/oct" +msgstr "每八度 24 dB" + +#: data/ui/compressor.ui:916 data/ui/compressor.ui:976 data/ui/expander.ui:834 +#: data/ui/expander.ui:894 data/ui/gate.ui:1048 data/ui/gate.ui:1108 +msgid "36 dB/oct" +msgstr "每八度 36 dB" + +#: data/ui/compressor.ui:925 data/ui/expander.ui:843 data/ui/gate.ui:1057 +msgid "High-Pass Filter Mode" +msgstr "高通滤波模式" + +#: data/ui/compressor.ui:951 data/ui/compressor.ui:1011 data/ui/expander.ui:869 +#: data/ui/expander.ui:929 data/ui/gate.ui:1083 data/ui/gate.ui:1143 +msgid "High-Pass Filter Frequency" +msgstr "高通滤波频率" + +#: data/ui/compressor.ui:958 data/ui/expander.ui:876 data/ui/filter.ui:44 +#: data/ui/gate.ui:1090 +msgid "Low-Pass" +msgstr "低通" + +#: data/ui/compressor.ui:985 data/ui/expander.ui:903 data/ui/gate.ui:1117 +msgid "Low-Pass Filter Mode" +msgstr "低通滤波模式" + +#: data/ui/compressor.ui:1037 data/ui/equalizer_band.ui:224 +#: data/ui/expander.ui:955 data/ui/filter.ui:199 +msgid "Gain" +msgstr "增益" + +#: data/ui/compressor.ui:1064 data/ui/expander.ui:982 data/ui/gate.ui:1196 +msgid "Envelope" +msgstr "波封" + +#: data/ui/compressor.ui:1118 data/ui/expander.ui:1036 data/ui/gate.ui:147 +#: data/ui/gate.ui:1250 data/ui/multiband_gate_band.ui:221 +msgid "Curve" +msgstr "压缩曲线" + +#: data/ui/convolver.ui:40 +msgid "L" +msgstr "左" + +#: data/ui/convolver.ui:43 data/ui/pipe_manager_box.ui:507 +msgid "Left Channel" +msgstr "左声道" + +#: data/ui/convolver.ui:53 +msgid "R" +msgstr "右" + +#: data/ui/convolver.ui:56 data/ui/pipe_manager_box.ui:518 +msgid "Right Channel" +msgstr "右声道" + +#: data/ui/convolver.ui:71 +msgid "Impulses" +msgstr "Impulse 文件" + +#: data/ui/convolver.ui:79 data/ui/convolver_menu_combine.ui:113 +#: data/ui/convolver_menu_combine.ui:116 +msgid "Combine" +msgstr "混合" + +#: data/ui/convolver.ui:86 +msgid "Stereo Width" +msgstr "立体声宽度" + +#: data/ui/convolver.ui:114 src/plugin_base.cpp:199 +msgid "Spectrum" +msgstr "频谱" + +#: data/ui/convolver.ui:122 +msgid "Log Scale" +msgstr "对数坐标" + +#: data/ui/convolver.ui:132 src/tags_plugin_name.cpp:31 +msgid "Autogain" +msgstr "自动增益" + +#: data/ui/convolver.ui:148 +msgid "Rate" +msgstr "速率" + +#: data/ui/convolver.ui:169 +msgid "Samples" +msgstr "样本" + +#: data/ui/convolver.ui:190 +msgid "Duration" +msgstr "持续时间" + +#: data/ui/convolver_menu_combine.ui:15 +msgid "Combine Impulse Responses" +msgstr "混合脉冲响应" + +#: data/ui/convolver_menu_combine.ui:48 +#, fuzzy +msgid "First Kernel" +msgstr "首Kernel" + +#: data/ui/convolver_menu_combine.ui:82 +#, fuzzy +msgid "Second Kernel" +msgstr "次Kernel" + +#: data/ui/convolver_menu_combine.ui:91 +msgid "Output File Name" +msgstr "输出文件名" + +#: data/ui/convolver_menu_combine.ui:95 +msgid "Combined Kernel Name" +msgstr "混合Kernel名称" + +#: data/ui/convolver_menu_impulses.ui:16 +msgid "Import Impulse" +msgstr "导入 Impulse 文件" + +#: data/ui/convolver_menu_impulses.ui:25 data/ui/plugins_menu.ui:17 +#: data/ui/presets_menu.ui:66 +msgid "Search" +msgstr "搜索" + +#: data/ui/convolver_menu_impulses.ui:27 +msgid "Search Impulse File" +msgstr "搜索脉冲文件" + +#: data/ui/convolver_menu_impulses.ui:47 +msgid "Impulse Files List" +msgstr "脉冲文件列表" + +#: data/ui/crossfeed.ui:39 +msgid "Default" +msgstr "默认" + +#: data/ui/crossfeed.ui:56 +msgid "Cutoff" +msgstr "截止" + +#: data/ui/crossfeed.ui:79 +msgid "Feed" +msgstr "反馈" + +#: data/ui/crystalizer_band.ui:11 +msgid "Bypass" +msgstr "旁路" + +#: data/ui/crystalizer_band.ui:17 data/ui/equalizer_band.ui:174 +#: data/ui/multiband_compressor_band.ui:140 data/ui/multiband_gate_band.ui:109 +#: data/ui/stereo_tools.ui:175 data/ui/stereo_tools.ui:200 +msgid "Mute" +msgstr "静音" + +#: data/ui/deesser.ui:40 +msgid "Detection" +msgstr "侦测" + +#: data/ui/deesser.ui:77 +msgid "Wide" +msgstr "宽频段" + +#: data/ui/deesser.ui:78 +msgid "Split" +msgstr "分割" + +#: data/ui/deesser.ui:96 +msgid "F1 Split" +msgstr "F1 分离" + +#: data/ui/deesser.ui:116 +msgid "Frequency 1 Split" +msgstr "频率 1 分割" + +#: data/ui/deesser.ui:129 +msgid "F2 Peak" +msgstr "F2 峰值" + +#: data/ui/deesser.ui:149 +msgid "Frequency 2 Peak" +msgstr "频率 2 峰值" + +#: data/ui/deesser.ui:167 +msgid "F1 Gain" +msgstr "F1 增益" + +#: data/ui/deesser.ui:195 +msgid "Frequency 1 Gain" +msgstr "频率 1 增益" + +#: data/ui/deesser.ui:202 +msgid "F2 Level" +msgstr "F2 级别" + +#: data/ui/deesser.ui:230 +msgid "Frequency 2 Level" +msgstr "频率 2 水平" + +#: data/ui/deesser.ui:237 +msgid "F2 Peak Q" +msgstr "F2极限Q值" + +#: data/ui/deesser.ui:265 +msgid "Frequency 2 Peak Q" +msgstr "频率 2 Peak Q" + +#: data/ui/deesser.ui:272 +msgid "Laxity" +msgstr "松弛度" + +#: data/ui/deesser.ui:586 +msgid "Detected" +msgstr "已侦测到" + +#: data/ui/deesser.ui:616 data/ui/gate.ui:433 data/ui/gate.ui:1169 +#: data/ui/maximizer.ui:271 data/ui/multiband_gate_band.ui:413 +msgid "Reduction" +msgstr "衰减" + +#: data/ui/delay.ui:41 data/ui/delay.ui:131 src/tags_plugin_name.cpp:40 +msgid "Delay" +msgstr "延迟" + +#: data/ui/delay.ui:110 data/ui/delay.ui:200 data/ui/stereo_tools.ui:184 +#: data/ui/stereo_tools.ui:209 +msgid "Invert Phase" +msgstr "反转相位" + +#: data/ui/deepfilternet.ui:31 +#, fuzzy +msgid "Attenuation Limit" +msgstr "衰减" + +#: data/ui/deepfilternet.ui:60 +msgid "Minimum Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:87 +msgid "Maximum ERB Processing threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:114 +msgid "Maximum DF Processing Threshold" +msgstr "" + +#: data/ui/deepfilternet.ui:141 +msgid "Minimum Processing Buffer" +msgstr "" + +#: data/ui/deepfilternet.ui:167 +#, fuzzy +msgid "Post Filter Beta" +msgstr "过滤器长度" + +#: data/ui/echo_canceller.ui:27 +msgid "Filter Length" +msgstr "过滤器长度" + +#: data/ui/echo_canceller.ui:50 +msgid "Residual Echo Suppression" +msgstr "残余回声抑制" + +#: data/ui/echo_canceller.ui:72 +msgid "Near End Echo Suppression" +msgstr "近端回声抑制" + +#: data/ui/effects_box.ui:114 +msgid "Excluded Apps" +msgstr "排除的应用" + +#: data/ui/equalizer.ui:29 +msgid "Bands" +msgstr "频段" + +#: data/ui/equalizer.ui:94 data/ui/filter.ui:251 data/ui/stereo_tools.ui:52 +#: data/ui/stereo_tools.ui:397 +msgid "Balance" +msgstr "平衡" + +#: data/ui/equalizer.ui:127 +msgid "Pitch Left" +msgstr "左音高" + +#: data/ui/equalizer.ui:160 +msgid "Pitch Right" +msgstr "右音高" + +#: data/ui/equalizer.ui:292 +msgid "Split Channels" +msgstr "分离声道" + +#: data/ui/equalizer.ui:298 +msgid "Flat Response" +msgstr "平滑响应" + +#: data/ui/equalizer.ui:306 +msgid "Calculate Frequencies" +msgstr "频率响应" + +#: data/ui/equalizer.ui:314 +msgid "Sort Bands" +msgstr "将频段排序" + +#: data/ui/equalizer.ui:329 src/presets_menu.cpp:89 +msgid "Import Preset" +msgstr "导入预设" + +#: data/ui/equalizer_band.ui:143 data/ui/filter.ui:119 +msgid "Slope" +msgstr "斜率" + +#: data/ui/equalizer_band.ui:161 data/ui/multiband_compressor_band.ui:150 +#: data/ui/multiband_gate_band.ui:119 +msgid "Solo" +msgstr "独奏" + +#: data/ui/equalizer_band.ui:260 data/ui/filter.ui:225 data/ui/pitch.ui:28 +msgid "Quality" +msgstr "品质" + +#: data/ui/equalizer_band.ui:291 data/ui/filter.ui:173 +msgid "Width" +msgstr "宽度" + +#: data/ui/exciter.ui:211 +msgid "Ceil" +msgstr "上限" + +#: data/ui/exciter.ui:240 +msgid "Ceil Value" +msgstr "上限值" + +#: data/ui/expander.ui:51 src/tags_plugin_name.cpp:44 +msgid "Expander" +msgstr "扩展器" + +#: data/ui/expander.ui:86 +#, fuzzy +msgid "Expander Mode" +msgstr "频段模式" + +#: data/ui/expander.ui:618 data/ui/gate.ui:832 +msgid "Internal" +msgstr "内部" + +#: data/ui/factory_clients_listview.ui:72 +msgid "API" +msgstr "API" + +#: data/ui/factory_clients_listview.ui:100 +msgid "Access" +msgstr "访问" + +#: data/ui/factory_modules_listview.ui:72 +msgid "Description" +msgstr "描述" + +#: data/ui/factory_rnnoise_listview.ui:24 +msgid "Remove this model file" +msgstr "删除这个模型文件" + +#: data/ui/filter.ui:46 +#, fuzzy +msgid "Low-Shelf" +msgstr "低架" + +#: data/ui/filter.ui:47 +#, fuzzy +msgid "High-Shelf" +msgstr "高架" + +#: data/ui/filter.ui:48 +msgid "Bell" +msgstr "钟形" + +#: data/ui/filter.ui:49 +#, fuzzy +msgid "Band-Pass" +msgstr "频段旁路" + +#: data/ui/filter.ui:50 +msgid "Notch" +msgstr "带阻" + +#: data/ui/filter.ui:51 +msgid "Resonance" +msgstr "共鸣" + +#: data/ui/filter.ui:52 +#, fuzzy +msgid "Ladder-Pass" +msgstr "低通" + +#: data/ui/filter.ui:53 +#, fuzzy +msgid "Ladder-Rejection" +msgstr "频段衰减" + +#: data/ui/filter.ui:54 +#, fuzzy +msgid "All-Pass" +msgstr "全通" + +#: data/ui/filter.ui:95 +#, fuzzy +msgid "Equalizer Mode" +msgstr "均衡器" + +#: data/ui/gate.ui:51 src/tags_plugin_name.cpp:46 +msgid "Gate" +msgstr "门限" + +#: data/ui/gate.ui:169 data/ui/gate.ui:262 data/ui/multiband_gate_band.ui:243 +#: data/ui/multiband_gate_band.ui:336 +msgid "Zone" +msgstr "过渡区间" + +#: data/ui/gate.ui:241 data/ui/multiband_gate_band.ui:315 +msgid "Hysteresis" +msgstr "迟滞" + +#: data/ui/gate.ui:336 +msgid "Mix" +msgstr "干湿声混合" + +#: data/ui/gate.ui:520 +msgid "Attack Zone Start" +msgstr "建立区间开头" + +#: data/ui/gate.ui:574 +msgid "Release Zone Start" +msgstr "释放区间开头" + +#: data/ui/level_meter.ui:39 +msgid "True Peak" +msgstr "实际峰值" + +#: data/ui/limiter.ui:68 +msgid "Oversampling" +msgstr "超采样" + +#: data/ui/limiter.ui:80 +msgid "Dither" +msgstr "抖动" + +#: data/ui/limiter.ui:94 +msgid "Herm Thin" +msgstr "窄式埃尔米特插值" + +#: data/ui/limiter.ui:95 +msgid "Herm Wide" +msgstr "宽式埃尔米特插值" + +#: data/ui/limiter.ui:96 +msgid "Herm Tail" +msgstr "尾式埃尔米特插值" + +#: data/ui/limiter.ui:97 +msgid "Herm Duck" +msgstr "蹲式埃尔米特插值" + +#: data/ui/limiter.ui:98 +msgid "Exp Thin" +msgstr "窄式指数插值" + +#: data/ui/limiter.ui:99 +msgid "Exp Wide" +msgstr "宽式指数插值" + +#: data/ui/limiter.ui:100 +msgid "Exp Tail" +msgstr "尾式指数插值" + +#: data/ui/limiter.ui:101 +msgid "Exp Duck" +msgstr "蹲式指数插值" + +#: data/ui/limiter.ui:102 +msgid "Line Thin" +msgstr "窄式线性插值" + +#: data/ui/limiter.ui:103 +msgid "Line Wide" +msgstr "宽式线性插值" + +#: data/ui/limiter.ui:104 +msgid "Line Tail" +msgstr "尾式线性插值" + +#: data/ui/limiter.ui:105 +msgid "Line Duck" +msgstr "蹲式线性插值" + +#: data/ui/limiter.ui:125 data/ui/multiband_compressor.ui:56 +#: data/ui/multiband_gate.ui:56 +msgid "None" +msgstr "无" + +#: data/ui/limiter.ui:126 +msgid "Half x2(2L)" +msgstr "部分 2倍 (2L)" + +#: data/ui/limiter.ui:127 +msgid "Half x2(3L)" +msgstr "部分 2倍 (3L)" + +#: data/ui/limiter.ui:128 +msgid "Half x3(2L)" +msgstr "部分 3倍 (2L)" + +#: data/ui/limiter.ui:129 +msgid "Half x3(3L)" +msgstr "部分 3倍 (3L)" + +#: data/ui/limiter.ui:130 +msgid "Half x4(2L)" +msgstr "部分 4倍 (2L)" + +#: data/ui/limiter.ui:131 +msgid "Half x4(3L)" +msgstr "部分 4倍 (3L)" + +#: data/ui/limiter.ui:132 +msgid "Half x6(2L)" +msgstr "部分 6倍 (2L)" + +#: data/ui/limiter.ui:133 +msgid "Half x6(3L)" +msgstr "部分 6倍 (3L)" + +#: data/ui/limiter.ui:134 +msgid "Half x8(2L)" +msgstr "部分 8倍 (2L)" + +#: data/ui/limiter.ui:135 +msgid "Half x8(3L)" +msgstr "部分 8倍 (3L)" + +#: data/ui/limiter.ui:136 +msgid "Full x2(2L)" +msgstr "全部 2倍 (2L)" + +#: data/ui/limiter.ui:137 +msgid "Full x2(3L)" +msgstr "全部 2倍 (3L)" + +#: data/ui/limiter.ui:138 +msgid "Full x3(2L)" +msgstr "全部 3倍 (2L)" + +#: data/ui/limiter.ui:139 +msgid "Full x3(3L)" +msgstr "全部 3倍 (3L)" + +#: data/ui/limiter.ui:140 +msgid "Full x4(2L)" +msgstr "全部 4倍 (2L)" + +#: data/ui/limiter.ui:141 +msgid "Full x4(3L)" +msgstr "全部 4倍 (3L)" + +#: data/ui/limiter.ui:142 +msgid "Full x6(2L)" +msgstr "全部 6倍 (2L)" + +#: data/ui/limiter.ui:143 +msgid "Full x6(3L)" +msgstr "全部 6倍 (3L)" + +#: data/ui/limiter.ui:144 +msgid "Full x8(2L)" +msgstr "全部 8倍 (2L)" + +#: data/ui/limiter.ui:145 +msgid "Full x8(3L)" +msgstr "全部 8倍 (3L)" + +#: data/ui/limiter.ui:201 +msgid "SC PreAmp" +msgstr "侧链前置放大" + +#: data/ui/limiter.ui:230 data/ui/multiband_compressor_band.ui:703 +#: data/ui/multiband_gate_band.ui:761 +msgid "Sidechain PreAmplification" +msgstr "侧链前置放大" + +#: data/ui/limiter.ui:405 +msgid "Boost" +msgstr "增强" + +#: data/ui/limiter.ui:420 +msgid "Stereo Link" +msgstr "立体声连锁" + +#: data/ui/limiter.ui:465 data/ui/multiband_compressor_band.ui:120 +#: data/ui/multiband_gate_band.ui:89 +msgid "External Sidechain" +msgstr "外部侧链" + +#: data/ui/limiter.ui:478 data/ui/multiband_compressor.ui:97 +#: data/ui/multiband_gate.ui:97 +msgid "External Sidechain Source" +msgstr "外部侧链声源" + +#: data/ui/limiter.ui:497 +msgid "Auto Leveling" +msgstr "自动调平" + +#: data/ui/limiter.ui:537 +msgid "Auto Leveling Attack" +msgstr "自动调平建立" + +#: data/ui/limiter.ui:573 +msgid "Auto Leveling Release" +msgstr "自动调平释放" + +#: data/ui/limiter.ui:608 +msgid "Auto Leveling Knee" +msgstr "自动调平拐点" + +#: data/ui/limiter.ui:633 +msgid "Gain Left" +msgstr "左增益" + +#: data/ui/limiter.ui:660 +msgid "Gain Right" +msgstr "右增益" + +#: data/ui/limiter.ui:687 +msgid "Sidechain Left" +msgstr "左边侧链" + +#: data/ui/limiter.ui:714 +msgid "Sidechain Right" +msgstr "右边侧链" + +#: data/ui/loudness.ui:37 +msgid "Standard" +msgstr "标准" + +#: data/ui/loudness.ui:44 +msgid "Flat" +msgstr "平滑" + +#: data/ui/loudness.ui:58 +msgid "FFT Size" +msgstr "FFT 大小" + +#: data/ui/loudness.ui:82 +msgid "Output Volume" +msgstr "输出音量" + +#: data/ui/loudness.ui:104 +msgid "Clipping" +msgstr "削波" + +#: data/ui/maximizer.ui:71 +msgid "Ceiling" +msgstr "上限" + +#: data/ui/multiband_compressor.ui:43 data/ui/multiband_gate.ui:42 +msgid "Sidechain Boost" +msgstr "侧链增强" + +#: data/ui/multiband_compressor.ui:57 data/ui/multiband_gate.ui:57 +msgid "Pink BT" +msgstr "粉噪 双线性变换" + +#: data/ui/multiband_compressor.ui:58 data/ui/multiband_gate.ui:58 +msgid "Pink MT" +msgstr "粉噪 匹配变换" + +#: data/ui/multiband_compressor.ui:59 data/ui/multiband_gate.ui:59 +msgid "Brown BT" +msgstr "棕噪 双线性变换" + +#: data/ui/multiband_compressor.ui:60 data/ui/multiband_gate.ui:60 +msgid "Brown MT" +msgstr "棕噪 匹配变换" + +#: data/ui/multiband_compressor.ui:114 data/ui/multiband_gate.ui:114 +msgid "Show Native User Interface" +msgstr "" + +#: data/ui/multiband_compressor.ui:143 data/ui/multiband_gate.ui:143 +msgid "Operating Mode" +msgstr "运作模式" + +#: data/ui/multiband_compressor.ui:156 data/ui/multiband_gate.ui:156 +msgid "Classic" +msgstr "经典" + +#: data/ui/multiband_compressor.ui:157 data/ui/multiband_gate.ui:157 +msgid "Modern" +msgstr "现代" + +#: data/ui/multiband_compressor.ui:158 data/ui/multiband_gate.ui:158 +#, fuzzy +msgid "Linear Phase" +msgstr "反转相位" + +#: data/ui/multiband_compressor.ui:268 data/ui/multiband_gate.ui:268 +msgid "Bands List" +msgstr "频段列表" + +#: data/ui/multiband_compressor.ui:277 data/ui/multiband_gate.ui:277 +msgid "Band 1" +msgstr "频段 1" + +#: data/ui/multiband_compressor.ui:294 data/ui/multiband_gate.ui:294 +msgid "Band 2" +msgstr "频段 2" + +#: data/ui/multiband_compressor.ui:320 data/ui/multiband_gate.ui:320 +msgid "Band 3" +msgstr "频段 3" + +#: data/ui/multiband_compressor.ui:346 data/ui/multiband_gate.ui:346 +msgid "Band 4" +msgstr "频段 4" + +#: data/ui/multiband_compressor.ui:372 data/ui/multiband_gate.ui:372 +msgid "Band 5" +msgstr "频段 5" + +#: data/ui/multiband_compressor.ui:398 data/ui/multiband_gate.ui:398 +msgid "Band 6" +msgstr "频段 6" + +#: data/ui/multiband_compressor.ui:424 data/ui/multiband_gate.ui:424 +msgid "Band 7" +msgstr "频段 7" + +#: data/ui/multiband_compressor.ui:450 data/ui/multiband_gate.ui:450 +msgid "Band 8" +msgstr "频段 8" + +#: data/ui/multiband_compressor_band.ui:18 data/ui/multiband_gate_band.ui:18 +msgid "Band Start" +msgstr "频段起始" + +#: data/ui/multiband_compressor_band.ui:57 data/ui/multiband_gate_band.ui:57 +msgid "Band End" +msgstr "频段末尾" + +#: data/ui/multiband_compressor_band.ui:112 +msgid "Band Compression Mode" +msgstr "频段压缩模式" + +#: data/ui/multiband_compressor_band.ui:130 data/ui/multiband_gate_band.ui:99 +msgid "Band Bypass" +msgstr "频段旁路" + +#: data/ui/multiband_compressor_band.ui:435 data/ui/multiband_gate_band.ui:494 +msgid "Band Sidechain Options" +msgstr "频段侧链选项" + +#: data/ui/multiband_compressor_band.ui:508 data/ui/multiband_gate_band.ui:567 +#, fuzzy +msgid "Stereo Split" +msgstr "立体声模式" + +#: data/ui/multiband_compressor_band.ui:578 data/ui/multiband_gate_band.ui:637 +#: src/tags_plugin_name.cpp:45 +msgid "Filter" +msgstr "过滤器" + +#: data/ui/multiband_compressor_band.ui:590 data/ui/multiband_gate_band.ui:649 +#, fuzzy +msgid "Low-Cut" +msgstr "低切滤音" + +#: data/ui/multiband_compressor_band.ui:618 data/ui/multiband_gate_band.ui:677 +msgid "Low-Cut Filter Frequency" +msgstr "低切滤音器频率" + +#: data/ui/multiband_compressor_band.ui:628 data/ui/multiband_gate_band.ui:687 +#, fuzzy +msgid "High-Cut" +msgstr "高切滤音" + +#: data/ui/multiband_compressor_band.ui:657 data/ui/multiband_gate_band.ui:716 +msgid "High-Cut Filter Frequency" +msgstr "高切滤音器频率" + +#: data/ui/multiband_compressor_band.ui:676 data/ui/multiband_gate_band.ui:735 +msgid "PreAmp" +msgstr "前置放大器" + +#: data/ui/multiband_compressor_band.ui:882 +msgid "Band Gain" +msgstr "频段增益" + +#: data/ui/multiband_compressor_band.ui:907 data/ui/multiband_gate_band.ui:875 +msgid "Band Envelope" +msgstr "频段包络" + +#: data/ui/multiband_compressor_band.ui:932 data/ui/multiband_gate_band.ui:900 +msgid "Band Curve" +msgstr "频段曲线" + +#: data/ui/multiband_gate_band.ui:850 +msgid "Band Reduction" +msgstr "频段衰减" + +#: data/ui/pipe_manager_box.ui:27 +msgid "General" +msgstr "通用" + +#: data/ui/pipe_manager_box.ui:34 +msgid "Device Management" +msgstr "设备管理" + +#: data/ui/pipe_manager_box.ui:35 +msgid "" +"It's recommended to NOT set Easy Effects Sink/Source as Default Device in " +"external applications (e.g. Gnome Settings and Plasma System Settings)." +msgstr "" +"不建议把 EasyEffects Sink/Source 设置为外部应用程序(例如 Gnome 设置或 " +"Plasma 系统设置)的默认设备。" + +#: data/ui/pipe_manager_box.ui:38 data/ui/pipe_manager_box.ui:44 +msgid "Use Default Input" +msgstr "使用默认输入" + +#: data/ui/pipe_manager_box.ui:65 +msgid "Custom Input Device" +msgstr "自定义输入设备" + +#: data/ui/pipe_manager_box.ui:74 data/ui/pipe_manager_box.ui:80 +msgid "Use Default Output" +msgstr "使用默认输出" + +#: data/ui/pipe_manager_box.ui:101 +msgid "Custom Output Device" +msgstr "自定义输出设备" + +#: data/ui/pipe_manager_box.ui:112 +msgid "Server Information" +msgstr "服务器信息" + +#: data/ui/pipe_manager_box.ui:116 +msgid "Header Version" +msgstr "头文件版本" + +#: data/ui/pipe_manager_box.ui:127 +msgid "Library Version" +msgstr "库文件版本" + +#: data/ui/pipe_manager_box.ui:138 +msgid "Sampling Rate" +msgstr "采样率" + +#: data/ui/pipe_manager_box.ui:149 +msgid "Minimum Quantum" +msgstr "最小音频帧 (Quantum)" + +#: data/ui/pipe_manager_box.ui:160 +msgid "Maximum Quantum" +msgstr "最大 Quantum" + +#: data/ui/pipe_manager_box.ui:171 +msgid "Default Quantum" +msgstr "默认音频帧 (Quantum)" + +#: data/ui/pipe_manager_box.ui:191 +msgid "Presets Autoloading" +msgstr "自动加载预设" + +#: data/ui/pipe_manager_box.ui:232 +msgid "Output Devices" +msgstr "输出设备" + +#: data/ui/pipe_manager_box.ui:249 src/application.cpp:263 +msgid "Output Presets" +msgstr "输出预设" + +#: data/ui/pipe_manager_box.ui:256 data/ui/pipe_manager_box.ui:348 +msgid "Create Association" +msgstr "创建关联" + +#: data/ui/pipe_manager_box.ui:270 +msgid "Add Autoloading Output Preset" +msgstr "新建自动加载的输出预设" + +#: data/ui/pipe_manager_box.ui:290 +msgid "Output Autoloading Presets List" +msgstr "输出自动加载预设列表" + +#: data/ui/pipe_manager_box.ui:329 +msgid "Input Devices" +msgstr "输入设备" + +#: data/ui/pipe_manager_box.ui:341 src/application.cpp:271 +msgid "Input Presets" +msgstr "输入预设" + +#: data/ui/pipe_manager_box.ui:362 +msgid "Add Autoloading Input Preset" +msgstr "新建自动加载的输入预设" + +#: data/ui/pipe_manager_box.ui:381 +msgid "Input Autoloading Presets List" +msgstr "输入自动加载预设列表" + +#: data/ui/pipe_manager_box.ui:411 +msgid "Modules" +msgstr "模块" + +#: data/ui/pipe_manager_box.ui:429 +msgid "Modules List" +msgstr "模块列表" + +#: data/ui/pipe_manager_box.ui:443 +msgid "Clients" +msgstr "客户端" + +#: data/ui/pipe_manager_box.ui:461 +msgid "Clients List" +msgstr "客户端列表" + +#: data/ui/pipe_manager_box.ui:475 +msgid "Test Signal" +msgstr "测试信号" + +#: data/ui/pipe_manager_box.ui:480 data/ui/preferences_spectrum.ui:9 +#: data/ui/speex.ui:29 +msgid "State" +msgstr "状态" + +#: data/ui/pipe_manager_box.ui:483 data/ui/preferences_spectrum.ui:12 +msgid "Enabled" +msgstr "已启用" + +#: data/ui/pipe_manager_box.ui:498 +msgid "Properties" +msgstr "属性" + +#: data/ui/pipe_manager_box.ui:501 +msgid "Channels" +msgstr "声道" + +#: data/ui/pipe_manager_box.ui:526 +msgid "Both" +msgstr "双声道" + +#: data/ui/pipe_manager_box.ui:530 +msgid "Both Channels" +msgstr "双声道" + +#: data/ui/pipe_manager_box.ui:539 +msgid "Waveform" +msgstr "波形" + +#: data/ui/pipe_manager_box.ui:543 +msgid "Sine Wave" +msgstr "正弦波" + +#: data/ui/pipe_manager_box.ui:552 +msgid "White Noise" +msgstr "白噪声" + +#: data/ui/pitch.ui:32 +msgid "Quick Seek" +msgstr "" + +#: data/ui/pitch.ui:45 +msgid "Anti-aliasing" +msgstr "抗混叠" + +#: data/ui/pitch.ui:58 +msgid "Sequence Length" +msgstr "序列长度" + +#: data/ui/pitch.ui:81 +#, fuzzy +msgid "Seek Window" +msgstr "关闭窗口" + +#: data/ui/pitch.ui:104 +msgid "Overlap Length" +msgstr "重叠长度" + +#: data/ui/pitch.ui:133 src/tags_plugin_name.cpp:53 +msgid "Pitch" +msgstr "音高" + +#: data/ui/pitch.ui:137 +msgid "Semitones" +msgstr "半音" + +#: data/ui/pitch.ui:160 +msgid "Tempo Difference" +msgstr "拍子差" + +#: data/ui/pitch.ui:183 +msgid "Rate Difference" +msgstr "速率差" + +#: data/ui/plugin_row.ui:39 +msgid "Remove this effect" +msgstr "删除此音效" + +#: data/ui/plugin_row.ui:51 +msgid "Enable/disable this effect" +msgstr "启用/禁用此音效" + +#: data/ui/plugin_row.ui:63 +msgid "Change the position of this effect" +msgstr "改变此音效的位置" + +#: data/ui/plugins_box.ui:19 +msgid "Add Effect" +msgstr "添加音效" + +#: data/ui/plugins_box.ui:68 +msgid "Used Plugins List" +msgstr "使用的插件的列表" + +#: data/ui/plugins_box.ui:129 +msgid "No Effects" +msgstr "无音效" + +#: data/ui/plugins_box.ui:130 +msgid "Audio Stream Not Modified" +msgstr "音频流未作修改" + +#: data/ui/plugins_menu.ui:19 +msgid "Search Plugin" +msgstr "搜索插件" + +#: data/ui/plugins_menu.ui:74 +msgid "Plugins List" +msgstr "插件列表" + +#: data/ui/preferences_general.ui:5 +msgid "_General" +msgstr "常规(_G)" + +#: data/ui/preferences_general.ui:10 +msgid "Service" +msgstr "服务" + +#: data/ui/preferences_general.ui:13 +msgid "Launch Service at System Startup" +msgstr "系统启动时运行服务" + +#: data/ui/preferences_general.ui:25 +msgid "Shutdown on Window Closing" +msgstr "窗口关闭时退出" + +#: data/ui/preferences_general.ui:39 +msgid "Audio" +msgstr "音频" + +#: data/ui/preferences_general.ui:42 +msgid "Process All Output Streams" +msgstr "处理所有输出流" + +#: data/ui/preferences_general.ui:54 +msgid "Process All Input Streams" +msgstr "处理所有输入流" + +#: data/ui/preferences_general.ui:66 +msgid "Ignore Streams from Monitor of Devices" +msgstr "忽略来自设备 Monitor 的音频流" + +#: data/ui/preferences_general.ui:78 +msgid "Use Cubic Volume" +msgstr "使用非线性(立方)音量调节" + +#: data/ui/preferences_general.ui:90 +msgid "Inactivity Timeout" +msgstr "空闲超时" + +#: data/ui/preferences_general.ui:113 +msgid "Update Interval (Level Meters and Spectrum)" +msgstr "更新间隔(电平表、频谱)" + +#: data/ui/preferences_general.ui:136 +msgid "Update Frequency (LV2 Plugins)" +msgstr "更新频率(LV2插件)" + +#: data/ui/preferences_general.ui:161 data/ui/preferences_spectrum.ui:26 +msgid "Style" +msgstr "界面风格" + +#: data/ui/preferences_general.ui:164 +msgid "Use Dark Theme" +msgstr "使用暗色主题" + +#: data/ui/preferences_general.ui:176 +msgid "Hide Menus on Outside Clicks" +msgstr "点击外部时隐藏菜单" + +#: data/ui/preferences_general.ui:190 +msgid "Experimental Features" +msgstr "实验性功能" + +#: data/ui/preferences_general.ui:193 +msgid "Native Plugin Window" +msgstr "原生插件窗口" + +#: data/ui/preferences_general.ui:194 +msgid "Allows The Native Plugin Window to be Shown/Hidden" +msgstr "允许显示或隐藏原生插件窗口" + +#: data/ui/preferences_spectrum.ui:5 +msgid "_Spectrum" +msgstr "频谱(_S)" + +#: data/ui/preferences_spectrum.ui:29 +msgid "Shape" +msgstr "形状" + +#: data/ui/preferences_spectrum.ui:37 +msgid "Bars" +msgstr "柱状" + +#: data/ui/preferences_spectrum.ui:38 +msgid "Lines" +msgstr "线型" + +#: data/ui/preferences_spectrum.ui:39 +msgid "Dots" +msgstr "点阵" + +#: data/ui/preferences_spectrum.ui:50 +msgid "Points" +msgstr "数量" + +#: data/ui/preferences_spectrum.ui:72 +msgid "Height" +msgstr "高度" + +#: data/ui/preferences_spectrum.ui:95 +msgid "Line Width" +msgstr "线宽" + +#: data/ui/preferences_spectrum.ui:118 +msgid "Fill" +msgstr "填充频谱" + +#: data/ui/preferences_spectrum.ui:130 +msgid "Show Bars Border" +msgstr "显示条柱边框" + +#: data/ui/preferences_spectrum.ui:142 +msgid "Rounded Corners" +msgstr "圆角" + +#: data/ui/preferences_spectrum.ui:154 +msgid "Dynamic Scale" +msgstr "" + +#: data/ui/preferences_spectrum.ui:168 +msgid "Color" +msgstr "颜色" + +#: data/ui/preferences_spectrum.ui:171 +msgid "Lines and Bars" +msgstr "线形与条柱" + +#: data/ui/preferences_spectrum.ui:189 +msgid "Axis Labels" +msgstr "坐标轴标签" + +#: data/ui/preferences_spectrum.ui:209 +msgid "Frequency Range" +msgstr "频率范围" + +#: data/ui/preferences_spectrum.ui:212 +msgid "Minimum" +msgstr "最低" + +#: data/ui/preferences_spectrum.ui:235 +msgid "Maximum" +msgstr "最高" + +#: data/ui/preset_row.ui:37 src/convolver_menu_impulses.cpp:203 +msgid "Load" +msgstr "加载" + +#: data/ui/preset_row.ui:38 +msgid "Discard the current settings and load this preset" +msgstr "丢弃当前设置并加载此预设" + +#: data/ui/preset_row.ui:47 +msgid "Save current settings to this preset file" +msgstr "将当前设置保存到这个预设文件" + +#: data/ui/preset_row.ui:57 +msgid "Remove this preset file" +msgstr "删除这个预设文件" + +#: data/ui/presets_menu.ui:30 +#, fuzzy +msgid "New Preset Name" +msgstr "新输入预设名" + +#: data/ui/presets_menu.ui:38 +msgid "Create a new preset" +msgstr "创建新预设" + +#: data/ui/presets_menu.ui:52 +msgid "Import a preset" +msgstr "导入预设" + +#: data/ui/presets_menu.ui:68 +#, fuzzy +msgid "Search Preset" +msgstr "搜索输入预设" + +#: data/ui/presets_menu.ui:129 +#, fuzzy +msgid "Presets List" +msgstr "输入预设列表" + +#: data/ui/reverb.ui:41 +msgid "High Frequency Damping" +msgstr "高频阻尼" + +#: data/ui/reverb.ui:73 +msgid "Room Size" +msgstr "房间大小" + +#: data/ui/reverb.ui:83 +msgid "Small" +msgstr "小" + +#: data/ui/reverb.ui:84 +msgid "Medium" +msgstr "中" + +#: data/ui/reverb.ui:85 +msgid "Large" +msgstr "大" + +#: data/ui/reverb.ui:86 +msgid "Tunnel" +msgstr "通道" + +#: data/ui/reverb.ui:87 +msgid "Large/smooth" +msgstr "大/平整" + +#: data/ui/reverb.ui:88 +msgid "Experimental" +msgstr "实验性" + +#: data/ui/reverb.ui:107 +msgid "Diffusion" +msgstr "扩散" + +#: data/ui/reverb.ui:144 +msgid "Pre Delay" +msgstr "前反射延迟" + +#: data/ui/reverb.ui:177 +msgid "Decay Time" +msgstr "衰减时间" + +#: data/ui/reverb.ui:281 +msgid "Bass Cut" +msgstr "低切" + +#: data/ui/reverb.ui:316 +msgid "Treble Cut" +msgstr "高切" + +#: data/ui/reverb.ui:576 +msgid "Ambience" +msgstr "氛围" + +#: data/ui/reverb.ui:583 +msgid "Empty Walls" +msgstr "空旷" + +#: data/ui/reverb.ui:596 +msgid "Room" +msgstr "房间" + +#: data/ui/reverb.ui:603 +msgid "Large Empty Hall" +msgstr "空荡的大厅" + +#: data/ui/reverb.ui:616 +msgid "Disco" +msgstr "舞厅" + +#: data/ui/reverb.ui:623 +msgid "Large Occupied Hall" +msgstr "拥挤的大厅" + +#: data/ui/rnnoise.ui:31 +msgid "Import Model" +msgstr "导入模型" + +#: data/ui/rnnoise.ui:48 data/ui/speex.ui:59 +msgid "Voice Detection" +msgstr "语音侦测" + +#: data/ui/rnnoise.ui:153 +msgid "Models" +msgstr "模型" + +#. If this changes, it has to be updated in src/rnnoise_ui.cpp as default_model_name +#: data/ui/rnnoise.ui:178 src/rnnoise_ui.cpp:100 src/rnnoise_ui.cpp:269 +#: src/rnnoise_ui.cpp:303 +msgid "Standard Model" +msgstr "标准模型" + +#: data/ui/rnnoise.ui:205 +msgid "RNNoise Models List" +msgstr "RNNoise 模型列表" + +#: data/ui/rnnoise.ui:229 +msgid "Model Not Loaded" +msgstr "模型尚未载入" + +#: data/ui/rnnoise.ui:235 +msgid "Active Model" +msgstr "激活模型" + +#: data/ui/rnnoise.ui:243 +msgid "Standard RNNoise Model" +msgstr "标准 RNNoise 模型" + +#: data/ui/shortcuts.ui:11 +msgid "Overview" +msgstr "概览" + +#: data/ui/shortcuts.ui:16 +msgid "Show help" +msgstr "显示帮助" + +#: data/ui/shortcuts.ui:23 +msgid "Fullscreen/Restore from fullscreen" +msgstr "全屏/从全屏还原" + +#: data/ui/shortcuts.ui:30 +msgid "Close the Window" +msgstr "关闭窗口" + +#: data/ui/shortcuts.ui:37 +msgid "Quit Easy Effects" +msgstr "退出 Easy Effects" + +#: data/ui/speex.ui:33 +msgid "Denoise" +msgstr "抑制噪音" + +#: data/ui/speex.ui:46 +msgid "Automatic Gain Control" +msgstr "自动增益控制" + +#: data/ui/speex.ui:72 +msgid "Dereverberation" +msgstr "去混响" + +#: data/ui/speex.ui:91 +msgid "Voice Activity Probability" +msgstr "语音状态进入概率" + +#: data/ui/speex.ui:95 +msgid "Start" +msgstr "开始概率" + +#: data/ui/speex.ui:118 +msgid "Continue" +msgstr "持续概率" + +#: data/ui/speex.ui:143 +msgid "Noise Suppression" +msgstr "抑制强度" + +#: data/ui/speex.ui:147 +msgid "Level" +msgstr "级别" + +#: data/ui/stereo_tools.ui:79 +msgid "Input Balance" +msgstr "输出平衡" + +#: data/ui/stereo_tools.ui:88 +msgid "Softclip" +msgstr "软削波" + +#: data/ui/stereo_tools.ui:116 +msgid "Softclip Level" +msgstr "软削波等级" + +#: data/ui/stereo_tools.ui:128 +msgid "Stereo Matrix" +msgstr "立体声阵距" + +#: data/ui/stereo_tools.ui:140 +msgid "LR > LR (Stereo Default)" +msgstr "LR > LR (默认立体声)" + +#: data/ui/stereo_tools.ui:141 +msgid "LR > MS (Stereo to Mid-Side)" +msgstr "LR > MS (立体声至中-侧)" + +#: data/ui/stereo_tools.ui:142 +msgid "MS > LR (Mid-Side to Stereo)" +msgstr "MS > LR (中-侧至立体声)" + +#: data/ui/stereo_tools.ui:143 +msgid "LR > LL (Mono Left Channel)" +msgstr "LR > LL (单声道左)" + +#: data/ui/stereo_tools.ui:144 +msgid "LR > RR (Mono Right Channel)" +msgstr "LR > RR (单声道右)" + +#: data/ui/stereo_tools.ui:145 +msgid "LR > L+R (Mono Sum L+R)" +msgstr "LR > L+R (单声道左右合并)" + +#: data/ui/stereo_tools.ui:146 +msgid "LR > RL (Stereo Flip Channels)" +msgstr "LR > RL (立体声翻转)" + +#: data/ui/stereo_tools.ui:151 +msgid "Stereo Mode" +msgstr "立体声模式" + +#: data/ui/stereo_tools.ui:236 +msgid "Side Level" +msgstr "侧边级别" + +#: data/ui/stereo_tools.ui:272 +msgid "Side Balance" +msgstr "侧边平衡" + +#: data/ui/stereo_tools.ui:308 +msgid "Middle Level" +msgstr "中置级别" + +#: data/ui/stereo_tools.ui:344 +msgid "Middle Panorama" +msgstr "中置全景" + +#: data/ui/stereo_tools.ui:424 +msgid "Output Balance" +msgstr "输出平衡" + +#: data/ui/stereo_tools.ui:433 +msgid "Delay L/R" +msgstr "延迟 L/R" + +#: data/ui/stereo_tools.ui:460 +msgid "Delay Left Right" +msgstr "延迟 L/R" + +#: data/ui/stereo_tools.ui:469 +msgid "Stereo Base" +msgstr "立体声基线" + +#: data/ui/stereo_tools.ui:505 +msgid "Stereo Phase" +msgstr "立体声相位" + +#: src/app_info.cpp:65 +msgid "Running" +msgstr "正在运行" + +#: src/app_info.cpp:67 +msgid "Suspended" +msgstr "已暂停" + +#: src/app_info.cpp:69 +msgid "Idle" +msgstr "空闲" + +#: src/app_info.cpp:71 +msgid "Creating" +msgstr "创建中" + +#: src/app_info.cpp:73 +msgid "Error" +msgstr "错误" + +#: src/app_info.cpp:75 +msgid "Unknown" +msgstr "未知" + +#: src/app_info.cpp:234 +msgid "channels" +msgstr "声道" + +#: src/application.cpp:460 +msgid "Weblate https://hosted.weblate.org/projects/easyeffects/" +msgstr "Weblate https://hosted.weblate.org/projects/easyeffects/" + +#: src/application.cpp:550 +msgid "Quit Easy Effects. Useful when running in service mode." +msgstr "退出 Easy Effects。 在服务模式下运行时有用。" + +#: src/application.cpp:553 +msgid "Load a preset. Example: easyeffects -l music" +msgstr "加载预设。 示例:easyeffects -l music" + +#: src/application.cpp:556 +msgid "Reset Easy Effects." +msgstr "重置 Easy Effects。" + +#: src/application.cpp:559 +msgid "Hide the Window." +msgstr "隐藏隐藏窗口。" + +#: src/application.cpp:562 +msgid "Global bypass. 1 to enable, 2 to disable and 3 to get status" +msgstr "全局旁路。 1 启用,2 禁用,3 获取状态" + +#: src/application.cpp:565 +msgid "Show available presets." +msgstr "显示可用预设。" + +#: src/application_ui.cpp:321 +msgid "_Output" +msgstr "输出(_O)" + +#: src/application_ui.cpp:322 +msgid "_Input" +msgstr "输入(_I)" + +#: src/application_ui.cpp:323 +msgid "_PipeWire" +msgstr "PipeWire(_P)" + +#: src/convolver_menu_impulses.cpp:103 +msgid "The File Is Not Regular" +msgstr "文件不是普通文件" + +#: src/convolver_menu_impulses.cpp:108 +msgid "The Impulse File May Be Corrupted or Unsupported" +msgstr "Impulse文件已损坏或不支持" + +#: src/convolver_menu_impulses.cpp:113 +msgid "Only Stereo Impulse Files Are Supported" +msgstr "仅支持双声道Impulse文件" + +#: src/convolver_menu_impulses.cpp:123 +msgid "Impulse File Not Imported" +msgstr "脉冲文件未导入" + +#: src/convolver_menu_impulses.cpp:131 +msgid "Import Impulse File" +msgstr "导入 Impulse 文件" + +#: src/convolver_menu_impulses.cpp:132 src/equalizer_ui.cpp:380 +#: src/equalizer_ui.cpp:578 src/presets_menu.cpp:90 src/rnnoise_ui.cpp:139 +msgid "Open" +msgstr "打开" + +#: src/convolver_menu_impulses.cpp:144 +msgid "Impulse Response" +msgstr "脉冲响应" + +#: src/convolver_menu_impulses.cpp:265 +msgid "Load Impulse" +msgstr "加载脉冲" + +#: src/convolver_menu_impulses.cpp:268 +msgid "Remove Impulse" +msgstr "删除脉冲" + +#: src/convolver_ui.cpp:330 +msgid "No Impulse File Loaded" +msgstr "未加载脉冲文件" + +#: src/convolver_ui.cpp:356 +msgid "Failed To Load The Impulse File" +msgstr "加载脉冲文件失败" + +#: src/effects_box.cpp:271 src/plugins_box.cpp:690 +msgid "Recorders" +msgstr "录音程序" + +#: src/effects_box.cpp:294 src/plugins_box.cpp:710 +msgid "Players" +msgstr "播放器" + +#: src/effects_box.cpp:317 +msgid "Effects" +msgstr "音效" + +#: src/equalizer_ui.cpp:379 +msgid "Import APO Preset File" +msgstr "加载 APO 预设文件" + +#: src/equalizer_ui.cpp:387 +msgid "APO Presets" +msgstr "APO 预设" + +#: src/equalizer_ui.cpp:412 +msgid "" +"APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its " +"Content." +msgstr "APO 预设未成功加载。可能是文件格式不受支持。请检查文件内容。" + +#: src/equalizer_ui.cpp:577 +msgid "Import GraphicEQ Preset File" +msgstr "导入 GraphicEQ 预设文件" + +#: src/equalizer_ui.cpp:585 +msgid "GraphicEQ Presets" +msgstr "GraphicEQ 预设" + +#: src/equalizer_ui.cpp:610 +msgid "" +"GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check " +"Its Content." +msgstr "GraphicEQ 预设未成功加载。可能是文件格式不受支持。请检查文件内容。" + +#: src/pipe_manager_box.cpp:329 +msgid "Remove Autoloading Preset" +msgstr "删除自动加载预设" + +#: src/plugin_base.cpp:197 +msgid "Output Level Meter" +msgstr "输出电平表" + +#: src/plugins_box.cpp:642 +msgid "Remove" +msgstr "删除" + +#: src/plugins_box.cpp:711 +msgid "Output Device" +msgstr "输出设备" + +#: src/plugins_menu.cpp:187 +msgid "Add" +msgstr "添加" + +#: src/presets_menu.cpp:215 +msgid "Save?" +msgstr "是否储存?" + +#: src/presets_menu.cpp:234 +msgid "Delete?" +msgstr "是否删除?" + +#: src/rnnoise_ui.cpp:95 +msgid "" +"Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The " +"Standard Model." +msgstr "所选模型没加载成功。可能是文件格式不支持。退回到了标准模型。" + +#: src/rnnoise_ui.cpp:138 +msgid "Import Model File" +msgstr "导入模型文件" + +#: src/rnnoise_ui.cpp:151 +msgid "RNNoise Models" +msgstr "RNNoise 模型" + +#: src/tags_plugin_name.cpp:32 +msgid "Bass Enhancer" +msgstr "低音增强" + +#: src/tags_plugin_name.cpp:33 +msgid "Bass Loudness" +msgstr "低音响度" + +#: src/tags_plugin_name.cpp:35 +msgid "Convolver" +msgstr "卷积混响器" + +#: src/tags_plugin_name.cpp:36 +msgid "Crossfeed" +msgstr "交叉反馈" + +#: src/tags_plugin_name.cpp:37 +#, fuzzy +msgid "Crystalizer" +msgstr "结晶器" + +#: src/tags_plugin_name.cpp:38 +msgid "Deep Noise Remover" +msgstr "" + +#: src/tags_plugin_name.cpp:39 +msgid "Deesser" +msgstr "齿音消除" + +#: src/tags_plugin_name.cpp:41 +msgid "Echo Canceller" +msgstr "回音消除" + +#: src/tags_plugin_name.cpp:42 +msgid "Equalizer" +msgstr "均衡器" + +#: src/tags_plugin_name.cpp:43 +msgid "Exciter" +msgstr "激励器" + +#: src/tags_plugin_name.cpp:47 +msgid "Level Meter" +msgstr "电平表" + +#: src/tags_plugin_name.cpp:48 +msgid "Limiter" +msgstr "限幅器" + +#: src/tags_plugin_name.cpp:50 +msgid "Maximizer" +msgstr "放大器" + +#: src/tags_plugin_name.cpp:51 +msgid "Multiband Compressor" +msgstr "多频段压缩器" + +#: src/tags_plugin_name.cpp:52 +msgid "Multiband Gate" +msgstr "多频段门限" + +#: src/tags_plugin_name.cpp:54 +msgid "Reverberation" +msgstr "混响" + +#: src/tags_plugin_name.cpp:55 +msgid "Noise Reduction" +msgstr "降噪" + +#: src/tags_plugin_name.cpp:56 +msgid "Speech Processor" +msgstr "语音处理器" + +#: src/tags_plugin_name.cpp:57 +msgid "Stereo Tools" +msgstr "立体声工具" + +#. For translators: {} is replaced by the effect name. +#: src/ui_helpers.cpp:69 +#, c++-format +msgid "{} Not Available" +msgstr "{} 不可用" + +#: src/ui_helpers.cpp:73 +#, c++-format +msgid "" +"The software required for the {} effect, \"{}\", is not installed. Consider " +"using the Easy Effects Flatpak package or installing the software yourself." +msgstr "" +"没有找到使用 {} 效果所需的 {} 软件。请使用Flatpak版Easy Effects,或自行安装缺" +"失的软件包。" + +#: src/ui_helpers.cpp:79 +#, c++-format +msgid "" +"The {} effect was disabled when Easy Effects was compiled. This is perhaps " +"since the software required for this effect, \"{}\", was not available. " +"Consider using the Easy Effects Flatpak package or building your own Easy " +"Effects package." +msgstr "" +"{} 效果在编译Easy Effects的时候被禁用了。这可能是这个效果所需的软件\"{}\"在编" +"译时并不存在。请下载Flatpak版Easy Effects,或者重新编译Easy Effects。" + +#: src/ui_helpers.cpp:121 src/ui_helpers.cpp:141 +msgid "-inf" +msgstr "-inf" + +#. For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". +#: src/ui_helpers.cpp:226 +#, c++-format +msgid "Using {}" +msgstr "正在使用 {}" + +#~ msgid "Low-Cut Filter" +#~ msgstr "低切滤音" + +#~ msgid "High-Cut Filter" +#~ msgstr "高切滤音" + +#~ msgid "Uniform" +#~ msgstr "均值" + +#~ msgid "New Output Preset Name" +#~ msgstr "新输出预设名" + +#~ msgid "Search Output Preset" +#~ msgstr "搜索输出预设" + +#~ msgid "Output Presets List" +#~ msgstr "输出预设列表" + +#~ msgid "infinity" +#~ msgstr "无限" + +#~ msgid "IIR" +#~ msgstr "无限脉冲响应 (IIR)" + +#~ msgid "FIR" +#~ msgstr "有限脉冲响应 (FIR)" + +#~ msgid "FFT" +#~ msgstr "快速傅里叶变换 (FFT)" + +#~ msgid "SPM" +#~ msgstr "自相位调制 (SPM)" + +#, fuzzy +#~ msgid "Wet Ratio" +#~ msgstr "比率" + +#, fuzzy +#~ msgid "VAD Threshold" +#~ msgstr "阈值" + +#~ msgid "Low-pass" +#~ msgstr "低通" + +#, fuzzy +#~ msgid "High-pass" +#~ msgstr "高通滤波器" + +#~ msgid "Gating" +#~ msgstr "门控" + +#~ msgid "12dB/oct Lowpass" +#~ msgstr "12dB/oct 低通" + +#~ msgid "24dB/oct Lowpass" +#~ msgstr "24dB/oct 低通" + +#~ msgid "36dB/oct Lowpass" +#~ msgstr "36dB/oct 低通" + +#~ msgid "12dB/oct Highpass" +#~ msgstr "12dB/oct 高通" + +#~ msgid "24dB/oct Highpass" +#~ msgstr "24dB/oct 高通" + +#~ msgid "36dB/oct Highpass" +#~ msgstr "36dB/oct 高通" + +#~ msgid "6dB/oct Bandpass" +#~ msgstr "6dB/oct 带通" + +#~ msgid "12dB/oct Bandpass" +#~ msgstr "12dB/oct 带通" + +#~ msgid "18dB/oct Bandpass" +#~ msgstr "18dB/oct 带通" + +#~ msgid "6dB/oct Bandreject" +#~ msgstr "6dB/oct 带阻" + +#~ msgid "12dB/oct Bandreject" +#~ msgstr "12dB/oct 带阻" + +#~ msgid "18dB/oct Bandreject" +#~ msgstr "18dB/oct 带阻" + +#~ msgid "Inertia" +#~ msgstr "惯性" + +#~ msgid "Band Type" +#~ msgstr "频段类型" + +#~ msgid "Band Mode" +#~ msgstr "频段模式" + +#~ msgid "Band Slope" +#~ msgstr "频段斜率" + +#~ msgid "Loudness List" +#~ msgstr "响度列表" + +#~ msgid "High Speed" +#~ msgstr "高速" + +#~ msgid "High Quality" +#~ msgstr "高品质" + +#~ msgid "High Consistency" +#~ msgstr "高一贯性" + +#~ msgid "Formant" +#~ msgstr "格式" + +#~ msgid "Shifted" +#~ msgstr "偏移" + +#~ msgid "Preserved" +#~ msgstr "保留" + +#~ msgid "Transients" +#~ msgstr "瞬态" + +#~ msgid "Crisp" +#~ msgstr "清脆" + +#~ msgid "Mixed" +#~ msgstr "混合 (Mixed)" + +#~ msgid "Smooth" +#~ msgstr "平滑" + +#~ msgid "Detector" +#~ msgstr "侦测器" + +#~ msgid "Compound" +#~ msgstr "混合侦测" + +#~ msgid "Percussive" +#~ msgstr "打击乐" + +#~ msgid "Soft" +#~ msgstr "柔声" + +#~ msgid "Phase" +#~ msgstr "相位" + +#~ msgid "Laminar" +#~ msgstr "层流式" + +#~ msgid "Independent" +#~ msgstr "独立式" + +#~ msgid "Cents" +#~ msgstr "音分" + +#~ msgid "Octaves" +#~ msgstr "八度" + +#~ msgid "_Manual" +#~ msgstr "使用手册(_M)" + +#~ msgid "Open the Easy Effects Manual" +#~ msgstr "打开 Easy Effects 手册" + +#~ msgid "{} Is Not Installed On The System" +#~ msgstr "{} 未在系统中安装" + +#~ msgid "High Pass" +#~ msgstr "高通" + +#~ msgid "Low Pass" +#~ msgstr "低通" + +#~ msgid "Cancel" +#~ msgstr "取消" + +#~ msgid " PreAmplification" +#~ msgstr " 前置放大" + +#~ msgid "Close (Press ESC)" +#~ msgstr "关闭(请按 ESC)" + +#~ msgid "Frame Size" +#~ msgstr "音帧长度" + +#~ msgid "" +#~ "Enable/disable the\n" +#~ " global bypass" +#~ msgstr "启用/禁用全局旁通" + +#~ msgid " Low-Pass" +#~ msgstr " 低通" + +#~ msgid " Uniform" +#~ msgstr " 均值" + +#~ msgid "Left Delay" +#~ msgstr "左延迟" + +#~ msgid "Right Delay" +#~ msgstr "右延迟" + +#~ msgid "Left Dry Level" +#~ msgstr "左干声级别" + +#~ msgid "Right Dry Level" +#~ msgstr "右干声级别" + +#~ msgid "Left Wet Level" +#~ msgstr "左湿声级别" + +#~ msgid "Right Wet Level" +#~ msgstr "右湿声级别" + +#~ msgid "Fast Fourier Transform Size" +#~ msgstr "快速傅里叶变换大小" + +#~ msgid "Clipping Range" +#~ msgstr "削波范围" + +#~ msgid "Suppression" +#~ msgstr "抑制" + +#~ msgid "Audio effects for PipeWire applications" +#~ msgstr "为使用 PipeWire 的程序提供音效" + +#~ msgid "Noise Reduction (Fast)" +#~ msgstr "降噪(快速)" + +#~ msgid "Load APO Preset" +#~ msgstr "加载 APO 预设" + +#~ msgid "EasyEffects" +#~ msgstr "EasyEffects" + +#~ msgid "Output Presets: " +#~ msgstr "输出预设: " + +#~ msgid "Input Presets: " +#~ msgstr "输入预设: " + +#~ msgid "Split Mode" +#~ msgstr "分割模式" + +#~ msgid "Split 1/2" +#~ msgstr "分割 1/2" + +#~ msgid "Split Frequency 1" +#~ msgstr "分割频率 1" + +#~ msgid "Split 2/3" +#~ msgstr "分割 2/3" + +#~ msgid "Split Frequency 2" +#~ msgstr "分割频率 2" + +#~ msgid "Split 3/4" +#~ msgstr "分割 3/4" + +#~ msgid "Split Frequency 3" +#~ msgstr "分割频率 3" + +#~ msgid "Sub Band" +#~ msgstr "子频" + +#~ msgid "Band 1 Bypass" +#~ msgstr "频段 1 旁路" + +#~ msgid "Band 1 Detection" +#~ msgstr "频段 1 侦测" + +#~ msgid "Band 1 Attack" +#~ msgstr "频段 1 起音" + +#~ msgid "Band 1 Release" +#~ msgstr "频段 1 消音" + +#~ msgid "Band 1 Threshold" +#~ msgstr "频段 1 阈值" + +#, fuzzy +#~ msgid "Band 1 Knee" +#~ msgstr "频段 1 拐点" + +#~ msgid "Band 1 Makeup" +#~ msgstr "频段 1 补偿" + +#~ msgid "Max Reduction" +#~ msgstr "最大衰减" + +#~ msgid "Low Band" +#~ msgstr "低频" + +#~ msgid "Band 2 Bypass" +#~ msgstr "频段 2 旁路" + +#~ msgid "Band 2 Detection" +#~ msgstr "频段 2 侦测" + +#~ msgid "Band 2 Attack" +#~ msgstr "频段 2 起音" + +#~ msgid "Band 2 Release" +#~ msgstr "频段 2 消音" + +#~ msgid "Band 2 Threshold" +#~ msgstr "频段 2 阈值" + +#, fuzzy +#~ msgid "Band 2 Knee" +#~ msgstr "频段 2 拐点" + +#~ msgid "Band 2 Makeup" +#~ msgstr "频段 2 补偿" + +#~ msgid "Band 2 Max Reduction" +#~ msgstr "频段 2 最大衰减" + +#~ msgid "Mid Band" +#~ msgstr "中频" + +#~ msgid "Band 3 Bypass" +#~ msgstr "频段 3 旁路" + +#~ msgid "Band 3 Detection" +#~ msgstr "频段 3 侦测" + +#~ msgid "Band 3 Attack" +#~ msgstr "频段 3 起音" + +#~ msgid "Band 3 Release" +#~ msgstr "频段 3 消音" + +#~ msgid "Band 3 Threshold" +#~ msgstr "频段 3 阈值" + +#, fuzzy +#~ msgid "Band 3 Knee" +#~ msgstr "频段 3 拐点" + +#~ msgid "Band 3 Makeup" +#~ msgstr "频段 3 补偿" + +#~ msgid "Band 3 Max Reduction" +#~ msgstr "频段 3 最大衰减" + +#~ msgid "High Band" +#~ msgstr "高频" + +#~ msgid "Band 4 Bypass" +#~ msgstr "频段 4 旁路" + +#~ msgid "Band 4 Detection" +#~ msgstr "频段 4 侦测" + +#~ msgid "Band 4 Attack" +#~ msgstr "频段 4 起音" + +#~ msgid "Band 4 Release" +#~ msgstr "频段 4 消音" + +#~ msgid "Band 4 Threshold" +#~ msgstr "频段 4 阈值" + +#, fuzzy +#~ msgid "Band 4 Knee" +#~ msgstr "频段 4 拐点" + +#~ msgid "Band 4 Makeup" +#~ msgstr "频段 4 补偿" + +#~ msgid "Band 4 Max Reduction" +#~ msgstr "频段 4 最大衰减" + +#~ msgid "Wet Amount" +#~ msgstr "湿声程度" + +#~ msgid "Dry Amount" +#~ msgstr "干声程度" + +#~ msgid "Wellington Wallace" +#~ msgstr "Wellington Wallace" + +#~ msgid "" +#~ "EasyEffects is an advanced audio manipulation tool. It includes an " +#~ "equalizer, limiter, compressor and a reverberation tool, just to mention " +#~ "a few. To complement this there is also a built in spectrum analyzer." +#~ msgstr "" +#~ "EasyEffects 是一款多功能音频调整工具程序。它的功能不仅包括均衡器、限幅器、" +#~ "压缩器和混响工具,还有更多其他工具可共选择。为了使用方便,它还内建有频谱分" +#~ "析仪。" + +#~ msgid "" +#~ "EasyEffects is the successor to PulseEffects. EasyEffects only supports " +#~ "PipeWire's audio server. PulseAudio users should instead use PulseEffects." +#~ msgstr "" +#~ "EasyEffects 是 PulseEffects 的后继版本,但它仅支持 PipeWire 的音频服务器。" +#~ "PulseAudio 用户应继续使用 PulseEffects。" + +#~ msgid "" +#~ "Because EasyEffects uses the default PipeWire sound server it will work " +#~ "with most, if not all, applications you use. All supported applications " +#~ "are presented in the main window, where each can be enabled individually." +#~ msgstr "" +#~ "由于 EasyEffects 默认使用 PipeWire 音频服务器,这意味着它能与大多数 (但并" +#~ "非全部) 应用程序配合使用。EasyEffects 的主窗口会显示所有它支持的应用程序," +#~ "而且可以单独管理每款应用程序的音效启用状态。" + +#~ msgid "" +#~ "Besides manipulating sound output, EasyEffects is able to apply effects " +#~ "to an input device, such as a microphone. This is, for example, useful in " +#~ "audio recording, but it also works well during voice conversations." +#~ msgstr "" +#~ "除了处理音频输出外,EasyEffects 还可以将效果应用于输入设备,例如麦克风等," +#~ "以便在录音和语音通话时发挥作用。" + +#~ msgid "" +#~ "When EasyEffects is launched it will conveniently remember the " +#~ "configuration used in the last session. It is also possible to save all " +#~ "the current settings as profiles." +#~ msgstr "" +#~ "启动 EasyEffects 时,载入上一个会话中使用的配置。 也可以将所有当前设置另存" +#~ "为配置文件。" + +#~ msgid "The main page showing two audio output apps" +#~ msgstr "正在显示两个音频输出应用程序的主页面" + +#~ msgid "The bass enhancer page showing audio controls" +#~ msgstr "低音增强页面显示的音效控件" + +#~ msgid "The convolver page showing audio controls" +#~ msgstr "卷积混响器显示的音频控件" + +#~ msgid "This release adds the following features:" +#~ msgstr "此版本增加了以下功能:" + +#~ msgid "" +#~ "The rnnoise library is now optional. This should help package maintainers " +#~ "to build" +#~ msgstr "现在 rnnoise 库是可选的。这项改动可以帮助软件包维护者构建" + +#~ msgid "a Debian package. See the issue #1000 for more information." +#~ msgstr "Debian 软件包。请参考 issue #1000 以了解更多信息。" + +#~ msgid "The interface of the pitch plugin was improved" +#~ msgstr "改进了音调插件界面" + +#~ msgid "Our application icon is now compatible with desktops that uses QT" +#~ msgstr "我们的应用图标现已兼容基于QT的桌面环境" + +#~ msgid "and #1427" +#~ msgstr "和 #1427" + +#~ msgid "Many translation updates" +#~ msgstr "许多翻译更新" + +#~ msgid "" +#~ "There is a new setting allowing the user to select an inactivity timeout " +#~ "for the pipeline. When no client is playing" +#~ msgstr "有一个新设置允许用户为管道选择不活动超时。当没有客户端正在播放时" + +#~ msgid "we do not waste CPU power processing silence." +#~ msgstr "我们不会浪费 CPU 功率处理静音。" + +#~ msgid "This release adds the following feature:" +#~ msgstr "此版软件新增了以下功能:" + +#~ msgid "Updated translations" +#~ msgstr "翻译更新" + +#~ msgid "Average" +#~ msgstr "平均值" + +#~ msgid "Failed" +#~ msgstr "失败" + +#~ msgid "Use Default" +#~ msgstr "使用默认" + +#~ msgid "Remove this plugin" +#~ msgstr "删除这个插件" + +#~ msgid "Import Presets" +#~ msgstr "加载预设" + +#~ msgid "Start Service at Login" +#~ msgstr "登录时启动服务" + +#~ msgid "Process All Outputs" +#~ msgstr "处理所有输出" + +#~ msgid "Process All Inputs" +#~ msgstr "处理所有输入" + +#~ msgid "Activate" +#~ msgstr "激活" + +#~ msgid "Add to Blocklist" +#~ msgstr "加入黑名单" + +#~ msgid "Blocklist" +#~ msgstr "黑名单" + +#~ msgid "Add Plugin" +#~ msgstr "增加插件" + +#~ msgid "Speakers" +#~ msgstr "扬声器" + +#~ msgid "Microphone" +#~ msgstr "麦克风" + +#~ msgid "enabled" +#~ msgstr "已启用" + +#~ msgid "disabled" +#~ msgstr "已禁用" + +#~ msgid "Plugins" +#~ msgstr "插件" + +#~ msgid "Format" +#~ msgstr "格式" + +#~ msgid "Latency" +#~ msgstr "延迟" + +#~ msgid "idle" +#~ msgstr "空闲" + +#~ msgid "Faster" +#~ msgstr "快速" + +#~ msgid "Preserve Formant" +#~ msgstr "共振保护" + +#~ msgid "Cmoy" +#~ msgstr "Cmoy" + +#~ msgid "Jmeier" +#~ msgstr "Jmeier" + +#~ msgid "Set the volume and turn on/off effects" +#~ msgstr "设置音量和 打开/关闭音效" + +#~ msgid "Includes an equalizer with built-in presets" +#~ msgstr "包含预设的均衡器" + +#~ msgid "Input Limiter" +#~ msgstr "输入限幅器" + +#~ msgid "Calibration" +#~ msgstr "校准" + +#~ msgid "Settings" +#~ msgstr "设置" + +#~ msgid "Id" +#~ msgstr "Id" + +#~ msgid "Player Name" +#~ msgstr "播放器名称" + +#~ msgid "Maximum Gain Reduction" +#~ msgstr "最大增益衰减" + +#~ msgid "Run in Background" +#~ msgstr "后台运行" + +#~ msgid "Limit" +#~ msgstr "限制" + +#~ msgid "ASC" +#~ msgstr "ASC" + +#~ msgid "ISO226-2003" +#~ msgstr "ISO226-2003" + +#~ msgid "Fletcher-Munson" +#~ msgstr "Fletcher-Munson" + +#~ msgid "Robinson-Dadson" +#~ msgstr "Robinson-Dadson" + +#~ msgid "Signal" +#~ msgstr "测试信号" + +#, fuzzy +#~ msgid "Wet" +#~ msgstr "程度" + +#~ msgid "Dry" +#~ msgstr "干声" + +#~ msgid "Show Spectrum" +#~ msgstr "显示频谱" + +#~ msgid "Border" +#~ msgstr "显示边界" + +#~ msgid "Spectrum Type" +#~ msgstr "频谱类型" + +#~ msgid "Spectrum Color" +#~ msgstr "光谱颜色" + +#~ msgid "S/C Level" +#~ msgstr "S/C 级别" + +#~ msgid "Phase Correlation" +#~ msgstr "相位相关" + +#~ msgid "Automatic Smoothing Control" +#~ msgstr "自动平滑控制" diff --git a/src/app_info.cpp b/src/app_info.cpp new file mode 100644 index 0000000..3b984e5 --- /dev/null +++ b/src/app_info.cpp @@ -0,0 +1,376 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "app_info.hpp" + +namespace ui::app_info { + +using namespace std::string_literals; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + app::Application* application; + + NodeInfo info; + + gulong handler_id_enable, handler_id_volume, handler_id_mute, handler_id_blocklist; + + std::unordered_map* enabled_app_list; +}; + +struct _AppInfo { + GtkBox parent_instance; + + GtkImage* app_icon; + + GtkLabel *app_name, *media_name, *format, *rate, *channels, *latency, *state; + + GtkToggleButton* mute; + + GtkSpinButton* volume; + + GtkCheckButton *blocklist, *enable; + + GtkIconTheme* icon_theme; + + GSettings *settings, *app_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(AppInfo, app_info, GTK_TYPE_BOX) + +auto node_state_to_char_pointer(const pw_node_state& state) -> const char* { + switch (state) { + case PW_NODE_STATE_RUNNING: + return _("Running"); + case PW_NODE_STATE_SUSPENDED: + return _("Suspended"); + case PW_NODE_STATE_IDLE: + return _("Idle"); + case PW_NODE_STATE_CREATING: + return _("Creating"); + case PW_NODE_STATE_ERROR: + return _("Error"); + default: + return _("Unknown"); + } +} + +auto app_is_blocklisted(AppInfo* self, const std::string& name) -> bool { + const auto list = util::gchar_array_to_vector(g_settings_get_strv(self->settings, "blocklist")); + + return std::ranges::find(list, name) != list.end(); +} + +auto get_app_icon_name(const NodeInfo& node_info) -> std::string { + // map to handle cases where PipeWire does not set icon name string or app name equal to icon name. + + constexpr auto icon_map = std::to_array>( + {{"chromium-browser", "chromium"}, {"firefox", "firefox"}, {"nightly","firefox-nightly"}, {"obs", "com.obsproject.Studio"}}); + + std::string icon_name; + + if (!node_info.app_icon_name.empty()) { + icon_name = node_info.app_icon_name; + } else if (!node_info.media_icon_name.empty()) { + icon_name = node_info.media_icon_name; + } else if (!node_info.name.empty()) { + const std::string prefix = "alsa_playback."; + if (node_info.name.substr(0, prefix.size()) == prefix) { + icon_name = node_info.name.substr(prefix.size()); + } else { + icon_name = node_info.name; + } + + // get lowercase name so if it changes in the future, we have a chance to pick the same index + + std::transform(icon_name.begin(), icon_name.end(), icon_name.begin(), + [](unsigned char c) { return std::tolower(c); }); + } + + for (const auto& [key, value] : icon_map) { + if (key == icon_name) { + return value; + } + } + + return icon_name; +} + +auto icon_available(AppInfo* self, const std::string& icon_name) -> bool { + if (gtk_icon_theme_has_icon(self->icon_theme, icon_name.c_str()) != 0) { + return true; + } + + // The icon object can't lookup icons in pixmaps directories, so we check their existence there also. + + constexpr auto pixmaps_dirs = std::to_array({"/usr/share/pixmaps", "/usr/local/share/pixmaps"}); + + for (const auto& dir : pixmaps_dirs) { + try { + for (std::filesystem::directory_iterator it{dir}; it != std::filesystem::directory_iterator{}; ++it) { + if (std::filesystem::is_regular_file(it->status())) { + if (it->path().stem().string() == icon_name) { + util::debug(icon_name + " icon name not included in the icon theme, but found in " + dir); + + return true; + } + } + } + } catch (...) { + util::debug("cannot lookup application icon " + icon_name + " in " + dir); + } + } + + return false; +} + +void connect_stream(AppInfo* self, const uint& id, const std::string& media_class) { + if (media_class == tags::pipewire::media_class::output_stream) { + self->data->application->pm->connect_stream_output(id); + } else if (media_class == tags::pipewire::media_class::input_stream) { + self->data->application->pm->connect_stream_input(id); + } +} + +void disconnect_stream(AppInfo* self, const uint& id, const std::string& media_class) { + if (media_class == tags::pipewire::media_class::output_stream || + media_class == tags::pipewire::media_class::input_stream) { + self->data->application->pm->disconnect_stream(id); + } +} + +void on_enable(GtkCheckButton* btn, AppInfo* self) { + auto is_enabled = gtk_check_button_get_active(btn) != 0; + + auto is_blocklisted = app_is_blocklisted(self, self->data->info.name); + + if (!is_blocklisted) { + (is_enabled) ? connect_stream(self, self->data->info.id, self->data->info.media_class) + : disconnect_stream(self, self->data->info.id, self->data->info.media_class); + + self->data->enabled_app_list->insert_or_assign(self->data->info.id, is_enabled); + } +} + +void on_volume_changed(GtkSpinButton* sbtn, AppInfo* self) { + auto vol = static_cast(gtk_spin_button_get_value(sbtn)) / 100.0F; + + if (g_settings_get_boolean(self->app_settings, "use-cubic-volumes") != 0) { + vol = vol * vol * vol; + } + + if (self->data->info.proxy != nullptr) { + PipeManager::set_node_volume(self->data->info.proxy, self->data->info.n_volume_channels, vol); + } +} + +void on_mute(GtkToggleButton* btn, AppInfo* self) { + const auto state = gtk_toggle_button_get_active(btn); + + if (state != 0) { + gtk_button_set_icon_name(GTK_BUTTON(btn), "audio-volume-muted-symbolic"); + } else { + gtk_button_set_icon_name(GTK_BUTTON(btn), "audio-volume-high-symbolic"); + } + + if (self->data->info.proxy != nullptr) { + PipeManager::set_node_mute(self->data->info.proxy, state != 0); + } +} + +void on_blocklist(GtkCheckButton* btn, AppInfo* self) { + const auto is_blocklisted = gtk_check_button_get_active(btn); + + std::string app_tag = self->data->info.application_id; + + if (app_tag.empty()) { + app_tag = self->data->info.name; + } + + if (is_blocklisted != 0) { + self->data->enabled_app_list->insert_or_assign(self->data->info.id, gtk_check_button_get_active(self->enable)); + + util::add_new_blocklist_entry(self->settings, app_tag); + } else { + util::remove_blocklist_entry(self->settings, app_tag); + } +} + +void update(AppInfo* self, const NodeInfo node_info) { + if (node_info.state == PW_NODE_STATE_CREATING) { + // PW_NODE_STATE_CREATING is useless and does not give any meaningful info, therefore skip it + return; + } + + self->data->info = node_info; + + gtk_label_set_text(self->app_name, node_info.name.c_str()); + gtk_label_set_text(self->media_name, node_info.media_name.c_str()); + gtk_label_set_text(self->format, node_info.format.c_str()); + gtk_label_set_text( + self->rate, + fmt::format(ui::get_user_locale(), "{0:.1Lf} kHz", static_cast(node_info.rate) / 1000.0F).c_str()); + gtk_label_set_text(self->channels, fmt::format("{0:d} {1}", node_info.n_volume_channels, _("channels")).c_str()); + gtk_label_set_text(self->latency, fmt::format("{0:.0f} ms", 1000.0F * node_info.latency).c_str()); + gtk_label_set_text(self->state, node_state_to_char_pointer(node_info.state)); + + // updating the enable toggle button + + g_signal_handler_block(self->enable, self->data->handler_id_enable); + + const auto is_enabled = self->data->application->pm->stream_is_connected(node_info.id, node_info.media_class); + const auto is_blocklisted = app_is_blocklisted(self, node_info.name); + + gtk_widget_set_sensitive(GTK_WIDGET(self->enable), static_cast(is_enabled || !is_blocklisted)); + gtk_check_button_set_active(self->enable, static_cast(is_enabled)); + + g_signal_handler_unblock(self->enable, self->data->handler_id_enable); + + // updating the volume + + g_signal_handler_block(self->volume, self->data->handler_id_volume); + + if (g_settings_get_boolean(self->app_settings, "use-cubic-volumes") != 0) { + gtk_spin_button_set_value(self->volume, 100.0 * std::cbrt(static_cast(node_info.volume))); + } else { + gtk_spin_button_set_value(self->volume, 100.0 * static_cast(node_info.volume)); + } + + g_signal_handler_unblock(self->volume, self->data->handler_id_volume); + + // updating the mute button state + + g_signal_handler_block(self->mute, self->data->handler_id_mute); + + if (node_info.mute) { + gtk_button_set_icon_name(GTK_BUTTON(self->mute), "audio-volume-muted-symbolic"); + } else { + gtk_button_set_icon_name(GTK_BUTTON(self->mute), "audio-volume-high-symbolic"); + } + + gtk_toggle_button_set_active(self->mute, static_cast(node_info.mute)); + + g_signal_handler_unblock(self->mute, self->data->handler_id_mute); + + // set the icon name + + if (const auto default_app_icon = "ee-applications-multimedia-symbolic"s; self->icon_theme == nullptr) { + gtk_image_set_from_icon_name(self->app_icon, default_app_icon.c_str()); + } else if (const auto icon_name = get_app_icon_name(node_info); icon_name.empty()) { + gtk_image_set_from_icon_name(self->app_icon, default_app_icon.c_str()); + } else if (!icon_available(self, icon_name)) { + gtk_image_set_from_icon_name(self->app_icon, default_app_icon.c_str()); + } else { + gtk_image_set_from_icon_name(self->app_icon, icon_name.c_str()); + } + + // updating the blocklist button state + + g_signal_handler_block(self->blocklist, self->data->handler_id_blocklist); + + gtk_check_button_set_active(self->blocklist, static_cast(is_blocklisted)); + + g_signal_handler_unblock(self->blocklist, self->data->handler_id_blocklist); + + // save app "enabled state" only the first time when it is not present in the enabled_app_list map + + if (self->data->enabled_app_list->find(node_info.id) == self->data->enabled_app_list->end()) { + self->data->enabled_app_list->insert({node_info.id, is_enabled}); + } +} + +void setup(AppInfo* self, + app::Application* application, + GSettings* settings, + GtkIconTheme* icon_theme, + std::unordered_map& enabled_app_list) { + self->data->application = application; + self->settings = settings; + self->icon_theme = icon_theme; + self->data->enabled_app_list = &enabled_app_list; +} + +void dispose(GObject* object) { + auto* self = EE_APP_INFO(object); + + g_object_unref(self->app_settings); + + util::debug(self->data->info.name + " disposed"); + + G_OBJECT_CLASS(app_info_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_APP_INFO(object); + + util::debug(self->data->info.name + " finalized"); + + delete self->data; + + G_OBJECT_CLASS(app_info_parent_class)->finalize(object); +} + +void app_info_class_init(AppInfoClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::app_info_ui); + + gtk_widget_class_bind_template_child(widget_class, AppInfo, enable); + gtk_widget_class_bind_template_child(widget_class, AppInfo, app_icon); + gtk_widget_class_bind_template_child(widget_class, AppInfo, app_name); + gtk_widget_class_bind_template_child(widget_class, AppInfo, media_name); + gtk_widget_class_bind_template_child(widget_class, AppInfo, format); + gtk_widget_class_bind_template_child(widget_class, AppInfo, rate); + gtk_widget_class_bind_template_child(widget_class, AppInfo, channels); + gtk_widget_class_bind_template_child(widget_class, AppInfo, latency); + gtk_widget_class_bind_template_child(widget_class, AppInfo, state); + gtk_widget_class_bind_template_child(widget_class, AppInfo, volume); + gtk_widget_class_bind_template_child(widget_class, AppInfo, mute); + gtk_widget_class_bind_template_child(widget_class, AppInfo, blocklist); +} + +void app_info_init(AppInfo* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->app_settings = g_settings_new(tags::app::id); + + prepare_spinbuttons<"%">(self->volume); + + self->data->handler_id_enable = g_signal_connect(self->enable, "toggled", G_CALLBACK(on_enable), self); + self->data->handler_id_volume = g_signal_connect(self->volume, "value-changed", G_CALLBACK(on_volume_changed), self); + self->data->handler_id_mute = g_signal_connect(self->mute, "toggled", G_CALLBACK(on_mute), self); + self->data->handler_id_blocklist = g_signal_connect(self->blocklist, "toggled", G_CALLBACK(on_blocklist), self); +} + +auto create() -> AppInfo* { + return static_cast(g_object_new(EE_TYPE_APP_INFO, nullptr)); +} + +} // namespace ui::app_info diff --git a/src/application.cpp b/src/application.cpp new file mode 100644 index 0000000..6186f13 --- /dev/null +++ b/src/application.cpp @@ -0,0 +1,570 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "application.hpp" +#include "application_ui.hpp" +#include "config.h" + +namespace app { + +using namespace std::string_literals; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(Application, application, ADW_TYPE_APPLICATION) + +void hide_all_windows(GApplication* app) { + auto* list = gtk_application_get_windows(GTK_APPLICATION(app)); + + while (list != nullptr) { + auto* window = list->data; + auto* next = list->next; + + gtk_window_destroy(GTK_WINDOW(window)); + + list = next; + } +} + +void update_bypass_state(Application* self) { + const auto state = g_settings_get_boolean(self->settings, "bypass"); + + self->soe->set_bypass(state != 0); + self->sie->set_bypass(state != 0); + + util::info(((state) != 0 ? "enabling" : "disabling") + " global bypass"s); +} + +void on_startup(GApplication* gapp) { + G_APPLICATION_CLASS(application_parent_class)->startup(gapp); + + auto* self = EE_APP(gapp); + + self->data = new Data(); + + self->sie_settings = g_settings_new(tags::schema::id_input); + self->soe_settings = g_settings_new(tags::schema::id_output); + + self->pm = new PipeManager(); + self->soe = new StreamOutputEffects(self->pm); + self->sie = new StreamInputEffects(self->pm); + + if (self->settings == nullptr) { + self->settings = g_settings_new(tags::app::id); + } + + if (self->presets_manager == nullptr) { + self->presets_manager = new PresetsManager(); + } + + PipeManager::exclude_monitor_stream = g_settings_get_boolean(self->settings, "exclude-monitor-streams") != 0; + + self->data->connections.push_back(self->pm->new_default_sink_name.connect([=](const std::string name) { + util::debug("new default output device: " + name); + + if (g_settings_get_boolean(self->soe_settings, "use-default-output-device") != 0) { + g_settings_set_string(self->soe_settings, "output-device", name.c_str()); + } + })); + + self->data->connections.push_back(self->pm->new_default_source_name.connect([=](const std::string name) { + util::debug("new default input device: " + name); + + if (g_settings_get_boolean(self->sie_settings, "use-default-input-device") != 0) { + g_settings_set_string(self->sie_settings, "input-device", name.c_str()); + } + })); + + self->data->connections.push_back(self->pm->device_input_route_changed.connect([=](const DeviceInfo device) { + if (device.input_route_available == SPA_PARAM_AVAILABILITY_no) { + return; + } + + util::debug("device "s + device.name + " has changed its input route to: "s + device.input_route_name); + + NodeInfo target_node; + + for (const auto& [serial, node] : self->pm->node_map) { + if (node.media_class == tags::pipewire::media_class::source) { + if (util::str_contains(node.name, device.bus_path) || util::str_contains(node.name, device.bus_id)) { + target_node = node; + + break; + } + } + } + + if (target_node.id != SPA_ID_INVALID) { + auto name = util::gsettings_get_string(self->sie_settings, "input-device"); + + if (target_node.name == name) { + self->presets_manager->autoload(PresetType::input, target_node.name, device.input_route_name); + } else { + util::debug("input autoloading: the target node name does not match the input device name"); + } + } else { + util::debug("input autoloading: could not find the target node"); + } + })); + + self->data->connections.push_back(self->pm->device_output_route_changed.connect([=](const DeviceInfo device) { + if (device.output_route_available == SPA_PARAM_AVAILABILITY_no) { + return; + } + + util::debug("device "s + device.name + " has changed its output route to: "s + device.output_route_name); + + NodeInfo target_node; + + for (const auto& [serial, node] : self->pm->node_map) { + if (node.media_class == tags::pipewire::media_class::sink) { + if (util::str_contains(node.name, device.bus_path) || util::str_contains(node.name, device.bus_id)) { + target_node = node; + + break; + } + } + } + + if (target_node.serial != SPA_ID_INVALID) { + auto name = util::gsettings_get_string(self->soe_settings, "output-device"); + + if (target_node.name == name) { + self->presets_manager->autoload(PresetType::output, target_node.name, device.output_route_name); + } else { + util::debug("output autoloading: the target node name does not match the output device name"); + } + } else { + util::debug("output autoloading: could not find the target node"); + } + })); + + self->data->gconnections_soe.push_back(g_signal_connect( + self->soe_settings, "changed::output-device", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto name = util::gsettings_get_string(settings, key); + + if (name.empty()) { + return; + } + + for (const auto& device : self->pm->list_devices) { + if (util::str_contains(name, device.bus_path) || util::str_contains(name, device.bus_id)) { + self->presets_manager->autoload(PresetType::output, name, device.output_route_name); + + return; + } + } + }), + self)); + + self->data->gconnections_sie.push_back(g_signal_connect( + self->sie_settings, "changed::input-device", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto name = util::gsettings_get_string(settings, key); + + if (name.empty()) { + return; + } + + for (const auto& device : self->pm->list_devices) { + if (util::str_contains(name, device.bus_path) || util::str_contains(name, device.bus_id)) { + self->presets_manager->autoload(PresetType::input, name, device.input_route_name); + + return; + } + } + }), + self)); + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::bypass", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + update_bypass_state(self); + }), + self)); + + self->data->gconnections.push_back( + g_signal_connect(self->settings, "changed::exclude-monitor-streams", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + PipeManager::exclude_monitor_stream = g_settings_get_boolean(settings, key) != 0; + }), + self)); + + update_bypass_state(self); + + if ((g_application_get_flags(gapp) & G_APPLICATION_IS_SERVICE) != 0) { + g_application_hold(gapp); + } + + // Debug check PipeWire minimum version + const auto comparison_result = util::compare_versions(self->pm->version, tags::app::minimum_pw_version); + + switch (comparison_result) { + case 1: + case 0: + // Supported version. Nothing to show... + break; + + case -1: + util::warning("PipeWire version " + self->pm->version + " is lower than " + tags::app::minimum_pw_version + + " minimum supported."); + break; + + default: + util::debug("Cannot check the current PipeWire version against the minimum supported."); + break; + } +} + +void application_class_init(ApplicationClass* klass) { + auto* application_class = G_APPLICATION_CLASS(klass); + + application_class->handle_local_options = [](GApplication* gapp, GVariantDict* options) { + if (options == nullptr) { + return -1; + } + + auto* self = EE_APP(gapp); + + if (self->settings == nullptr) { + self->settings = g_settings_new(tags::app::id); + } + + if (self->presets_manager == nullptr) { + self->presets_manager = new PresetsManager(); + } + + if (g_variant_dict_contains(options, "presets") != 0) { + std::string list; + + for (const auto& name : self->presets_manager->get_names(PresetType::output)) { + list += name + ","; + } + + std::cout << _("Output Presets") + ": "s + list << std::endl; + + list = ""; + + for (const auto& name : self->presets_manager->get_names(PresetType::input)) { + list += name + ","; + } + + std::cout << _("Input Presets") + ": "s + list << std::endl; + + return EXIT_SUCCESS; + } + + if (g_variant_dict_contains(options, "bypass") != 0) { + if (int bypass_arg = 2; g_variant_dict_lookup(options, "bypass", "i", &bypass_arg)) { + if (bypass_arg == 3) { + std::cout << g_settings_get_boolean(self->settings, "bypass") << std::endl; + + return EXIT_SUCCESS; + } + } + } + + return -1; + }; + + application_class->startup = on_startup; + + application_class->command_line = [](GApplication* gapp, GApplicationCommandLine* cmdline) { + auto* self = EE_APP(gapp); + auto* options = g_application_command_line_get_options_dict(cmdline); + + if (g_variant_dict_contains(options, "quit") != 0) { + hide_all_windows(gapp); + + g_application_quit(G_APPLICATION(gapp)); + + return EXIT_SUCCESS; + } + + if (g_variant_dict_contains(options, "load-preset") != 0) { + const char* name = nullptr; + + if (g_variant_dict_lookup(options, "load-preset", "&s", &name) != 0) { + if (self->presets_manager->preset_file_exists(PresetType::input, name)) { + if (self->presets_manager->load_preset_file(PresetType::input, name)) { + g_settings_set_string(self->settings, "last-used-input-preset", name); + } else { + g_settings_reset(self->settings, "last-used-input-preset"); + } + + return EXIT_SUCCESS; + } + + if (self->presets_manager->preset_file_exists(PresetType::output, name)) { + if (self->presets_manager->load_preset_file(PresetType::output, name)) { + g_settings_set_string(self->settings, "last-used-output-preset", name); + } else { + g_settings_reset(self->settings, "last-used-output-preset"); + } + + return EXIT_SUCCESS; + } + } + } + + if (g_variant_dict_contains(options, "reset") != 0) { + util::reset_all_keys_except(self->settings); + + self->soe->reset_settings(); + self->sie->reset_settings(); + + util::info("All settings were reset"); + + return EXIT_SUCCESS; + } + + if (g_variant_dict_contains(options, "hide-window") != 0) { + hide_all_windows(gapp); + + util::info("Hiding the window..."); + + return EXIT_SUCCESS; + } + + if (g_variant_dict_contains(options, "bypass") != 0) { + if (int bypass_arg = 2; g_variant_dict_lookup(options, "bypass", "i", &bypass_arg)) { + if (bypass_arg == 1) { + g_settings_set_boolean(self->settings, "bypass", 1); + } else if (bypass_arg == 2) { + g_settings_set_boolean(self->settings, "bypass", 0); + } + + return EXIT_SUCCESS; + } + } + + g_application_activate(gapp); + + return G_APPLICATION_CLASS(application_parent_class)->command_line(gapp, cmdline); + }; + + application_class->activate = [](GApplication* gapp) { + if (gtk_application_get_active_window(GTK_APPLICATION(gapp)) == nullptr) { + G_APPLICATION_CLASS(application_parent_class)->activate(gapp); + + auto* window = ui::application_window::create(gapp); + + gtk_window_present(GTK_WINDOW(window)); + } + }; + + application_class->shutdown = [](GApplication* gapp) { + G_APPLICATION_CLASS(application_parent_class)->shutdown(gapp); + + auto* self = EE_APP(gapp); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + for (auto& handler_id : self->data->gconnections_sie) { + g_signal_handler_disconnect(self->sie_settings, handler_id); + } + + for (auto& handler_id : self->data->gconnections_soe) { + g_signal_handler_disconnect(self->soe_settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections_sie.clear(); + self->data->gconnections_soe.clear(); + + g_object_unref(self->settings); + g_object_unref(self->sie_settings); + g_object_unref(self->soe_settings); + + PipeManager::exiting = true; + + delete self->data; + delete self->presets_manager; + delete self->sie; + delete self->soe; + delete self->pm; + + self->data = nullptr; + self->presets_manager = nullptr; + self->sie = nullptr; + self->soe = nullptr; + self->pm = nullptr; + + util::debug("Shutting down..."); + }; +} + +void application_init(Application* self) { + std::array entries{}; + + entries[0] = {"quit", + [](GSimpleAction* action, GVariant* parameter, gpointer app) { + util::debug("The user pressed Q or executed a similar action. Our process will exit."); + + g_application_quit(G_APPLICATION(app)); + }, + nullptr, nullptr, nullptr}; + + entries[1] = {"help", + [](GSimpleAction* action, GVariant* parameter, gpointer gapp) { + auto* parent = gtk_application_get_active_window(GTK_APPLICATION(gapp)); + + auto* launcher = gtk_uri_launcher_new("help:easyeffects"); + + gtk_uri_launcher_launch(launcher, parent, nullptr, nullptr, nullptr); + + g_object_unref(launcher); + }, + nullptr, nullptr, nullptr}; + + entries[2] = { + "about", + [](GSimpleAction* action, GVariant* parameter, gpointer gapp) { + std::array developers = {"Wellington Wallace ", + "Giusy Digital ", "Vincent Chernin", nullptr}; + + std::array documenters = {"Wellington Wallace ", + "Giusy Digital ", nullptr}; + + adw_show_about_window( + gtk_application_get_active_window(GTK_APPLICATION(gapp)), "application-name", APP_NAME, "version", VERSION, + "developer-name", "Wellington Wallace", "developers", developers.data(), "application-icon", + IS_DEVEL_BUILD ? std::string(tags::app::id).append(".Devel").c_str() : tags::app::id, "copyright", + "Copyright © 2017–2022 Easy Effects Contributors", "license-type", GTK_LICENSE_GPL_3_0, "website", + "https://github.com/wwmm/easyeffects", "debug-info", std::string("Commit: ").append(COMMIT_DESC).c_str(), + "translator-credits", _("Weblate https://hosted.weblate.org/projects/easyeffects/"), "documenters", + documenters.data(), "issue-url", "https://github.com/wwmm/easyeffects/issues", nullptr); + }, + nullptr, nullptr, nullptr}; + + entries[3] = {"fullscreen", + [](GSimpleAction* action, GVariant* parameter, gpointer gapp) { + auto* self = EE_APP(gapp); + + auto state = g_settings_get_boolean(self->settings, "window-fullscreen") != 0; + + if (state) { + gtk_window_unfullscreen(GTK_WINDOW(gtk_application_get_active_window(GTK_APPLICATION(gapp)))); + + g_settings_set_boolean(self->settings, "window-fullscreen", 0); + } else { + gtk_window_fullscreen(GTK_WINDOW(gtk_application_get_active_window(GTK_APPLICATION(gapp)))); + + g_settings_set_boolean(self->settings, "window-fullscreen", 1); + } + }, + nullptr, nullptr, nullptr}; + + entries[4] = {"preferences", + [](GSimpleAction* action, GVariant* parameter, gpointer gapp) { + auto* preferences = ui::preferences::window::create(); + + gtk_window_set_transient_for(GTK_WINDOW(preferences), + GTK_WINDOW(gtk_application_get_active_window(GTK_APPLICATION(gapp)))); + + gtk_window_present(GTK_WINDOW(preferences)); + }, + nullptr, nullptr, nullptr}; + + entries[5] = {"reset", + [](GSimpleAction* action, GVariant* parameter, gpointer gapp) { + auto* self = EE_APP(gapp); + + util::reset_all_keys_except(self->settings); + + self->soe->reset_settings(); + self->sie->reset_settings(); + }, + nullptr, nullptr, nullptr}; + + entries[6] = {"shortcuts", + [](GSimpleAction* action, GVariant* parameter, gpointer gapp) { + auto* builder = gtk_builder_new_from_resource(tags::resources::shortcuts_ui); + + auto* window = GTK_SHORTCUTS_WINDOW(gtk_builder_get_object(builder, "window")); + + gtk_window_set_transient_for(GTK_WINDOW(window), + GTK_WINDOW(gtk_application_get_active_window(GTK_APPLICATION(gapp)))); + + gtk_window_present(GTK_WINDOW(window)); + + g_object_unref(builder); + }, + nullptr, nullptr, nullptr}; + + entries[7] = {"hide_windows", + [](GSimpleAction* action, GVariant* parameter, gpointer app) { + util::debug("The user pressed W or executed a similar action. Hiding our window."); + + hide_all_windows(G_APPLICATION(app)); + }, + nullptr, nullptr, nullptr}; + + g_action_map_add_action_entries(G_ACTION_MAP(self), entries.data(), entries.size(), self); + + std::array quit_accels = {"Q", nullptr}; + std::array hide_windows_accels = {"W", nullptr}; + + std::array help_accels = {"F1", nullptr}; + std::array fullscreen_accels = {"F11", nullptr}; + + gtk_application_set_accels_for_action(GTK_APPLICATION(self), "app.quit", quit_accels.data()); + gtk_application_set_accels_for_action(GTK_APPLICATION(self), "app.hide_windows", hide_windows_accels.data()); + gtk_application_set_accels_for_action(GTK_APPLICATION(self), "app.help", help_accels.data()); + gtk_application_set_accels_for_action(GTK_APPLICATION(self), "app.fullscreen", fullscreen_accels.data()); +} + +auto application_new() -> GApplication* { + g_set_application_name("Easy Effects"); + + auto* app = g_object_new(EE_TYPE_APPLICATION, "application-id", + IS_DEVEL_BUILD ? std::string(tags::app::id).append(".Devel").c_str() : tags::app::id, + "flags", G_APPLICATION_HANDLES_COMMAND_LINE, nullptr); + + g_application_add_main_option(G_APPLICATION(app), "quit", 'q', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, + _("Quit Easy Effects. Useful when running in service mode."), nullptr); + + g_application_add_main_option(G_APPLICATION(app), "load-preset", 'l', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, + _("Load a preset. Example: easyeffects -l music"), nullptr); + + g_application_add_main_option(G_APPLICATION(app), "reset", 'r', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, + _("Reset Easy Effects."), nullptr); + + g_application_add_main_option(G_APPLICATION(app), "hide-window", 'w', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, + _("Hide the Window."), nullptr); + + g_application_add_main_option(G_APPLICATION(app), "bypass", 'b', G_OPTION_FLAG_NONE, G_OPTION_ARG_INT, + _("Global bypass. 1 to enable, 2 to disable and 3 to get status"), nullptr); + + g_application_add_main_option(G_APPLICATION(app), "presets", 'p', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, + _("Show available presets."), nullptr); + + return G_APPLICATION(app); +} + +} // namespace app diff --git a/src/application_ui.cpp b/src/application_ui.cpp new file mode 100644 index 0000000..7823346 --- /dev/null +++ b/src/application_ui.cpp @@ -0,0 +1,349 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "application_ui.hpp" +#include "config.h" + +namespace ui::application_window { + +using namespace std::string_literals; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + int width = 0, height = 0; + + bool maximized = false, fullscreen = false; + + GApplication* gapp = nullptr; + + GtkIconTheme* icon_theme = nullptr; + + std::vector connections; +}; + +struct _ApplicationWindow { + AdwWindow parent_instance; + + AdwViewStack* stack; + + GtkMenuButton* presets_menu_button; + + GtkToggleButton* bypass_button; + + ui::presets_menu::PresetsMenu *input_presets_menu, *output_presets_menu; + ui::effects_box::EffectsBox* soe_ui; + ui::effects_box::EffectsBox* sie_ui; + ui::pipe_manager_box::PipeManagerBox* pm_box; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ApplicationWindow, application_window, ADW_TYPE_APPLICATION_WINDOW) + +void init_theme_color(ApplicationWindow* self) { + if (g_settings_get_boolean(self->settings, "use-dark-theme") == 0) { + adw_style_manager_set_color_scheme(adw_style_manager_get_default(), ADW_COLOR_SCHEME_PREFER_LIGHT); + } else { + adw_style_manager_set_color_scheme(adw_style_manager_get_default(), ADW_COLOR_SCHEME_PREFER_DARK); + } +} + +auto setup_icon_theme() -> GtkIconTheme* { + auto* icon_theme = gtk_icon_theme_get_for_display(gdk_display_get_default()); + + if (icon_theme == nullptr) { + util::warning("can't retrieve the icon theme in use on the system. App icons won't be shown."); + + return nullptr; + } + + auto* name = gtk_icon_theme_get_theme_name(icon_theme); + + if (name == nullptr) { + util::debug("Icon Theme detected, but the name is empty"); + } else { + util::debug("Icon Theme "s + name + " detected"); + + g_free(name); + } + + gtk_icon_theme_add_resource_path(icon_theme, tags::resources::icons); + + return icon_theme; +} + +void apply_css_style() { + auto* provider = gtk_css_provider_new(); + + gtk_css_provider_load_from_resource(provider, tags::resources::css); + + gtk_style_context_add_provider_for_display(gdk_display_get_default(), GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); +} + +void stack_visible_child_changed(ApplicationWindow* self, GParamSpec* pspec, GtkWidget* stack) { + if (!GTK_MENU_BUTTON(self->presets_menu_button)) { + return; + } + + if (!GTK_WIDGET(self->output_presets_menu) || !GTK_WIDGET(self->input_presets_menu)) { + return; + } + + if (self->data->gapp == nullptr) { + return; + } + + const auto* name = adw_view_stack_get_visible_child_name(ADW_VIEW_STACK(stack)); + + if (g_strcmp0(name, "stream_output") == 0) { + gtk_menu_button_set_popover(self->presets_menu_button, GTK_WIDGET(self->output_presets_menu)); + } else if (g_strcmp0(name, "stream_input") == 0) { + gtk_menu_button_set_popover(self->presets_menu_button, GTK_WIDGET(self->input_presets_menu)); + } else if (g_strcmp0(name, "page_pipewire") == 0) { + gtk_menu_button_set_popover(self->presets_menu_button, nullptr); + } +} + +void constructed(GObject* object) { + auto* self = EE_APP_WINDOW(object); + + self->data->maximized = g_settings_get_boolean(self->settings, "window-maximized") != 0; + self->data->fullscreen = g_settings_get_boolean(self->settings, "window-fullscreen") != 0; + self->data->width = g_settings_get_int(self->settings, "window-width"); + self->data->height = g_settings_get_int(self->settings, "window-height"); + + gtk_window_set_default_size(GTK_WINDOW(self), self->data->width, self->data->height); + + gtk_window_set_default_icon_name(IS_DEVEL_BUILD ? std::string(tags::app::id).append(".Devel").c_str() + : tags::app::id); + + if (self->data->maximized) { + gtk_window_maximize(GTK_WINDOW(self)); + } + + if (self->data->fullscreen) { + gtk_window_fullscreen(GTK_WINDOW(self)); + } + + G_OBJECT_CLASS(application_window_parent_class)->constructed(object); +} + +void size_allocate(GtkWidget* widget, int width, int height, int baseline) { + auto* self = EE_APP_WINDOW(widget); + + GTK_WIDGET_CLASS(application_window_parent_class)->size_allocate(widget, width, height, baseline); + + if (!self->data->maximized && !self->data->fullscreen) { + gtk_window_get_default_size(GTK_WINDOW(self), &self->data->width, &self->data->height); + } +} + +void surface_state_changed(GtkWidget* widget) { + auto* self = EE_APP_WINDOW(widget); + + GdkToplevelState new_state = GDK_TOPLEVEL_STATE_MAXIMIZED; + + new_state = gdk_toplevel_get_state(GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(widget)))); + + self->data->maximized = (new_state & GDK_TOPLEVEL_STATE_MAXIMIZED) != 0; + self->data->fullscreen = (new_state & GDK_TOPLEVEL_STATE_FULLSCREEN) != 0; +} + +void realize(GtkWidget* widget) { + GTK_WIDGET_CLASS(application_window_parent_class)->realize(widget); + + g_signal_connect_swapped(gtk_native_get_surface(GTK_NATIVE(widget)), "notify::state", + G_CALLBACK(surface_state_changed), widget); + + auto* self = EE_APP_WINDOW(widget); + + /* + Getting the gapp pointer here because it is not defined when "init" is called + */ + + self->data->gapp = G_APPLICATION(gtk_window_get_application(GTK_WINDOW(widget))); + + ui::presets_menu::setup(self->output_presets_menu, app::EE_APP(self->data->gapp), PresetType::output); + ui::presets_menu::setup(self->input_presets_menu, app::EE_APP(self->data->gapp), PresetType::input); + + ui::effects_box::setup(self->soe_ui, app::EE_APP(self->data->gapp), PipelineType::output, self->data->icon_theme); + ui::effects_box::setup(self->sie_ui, app::EE_APP(self->data->gapp), PipelineType::input, self->data->icon_theme); + ui::pipe_manager_box::setup(self->pm_box, app::EE_APP(self->data->gapp)); + + self->data->connections.push_back( + app::EE_APP(self->data->gapp) + ->presets_manager->preset_load_error.connect([=](const std::string& title, const std::string& descr) { + ui::show_simple_message_dialog(widget, title, descr); + })); +} + +void unrealize(GtkWidget* widget) { + auto* self = EE_APP_WINDOW(widget); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + self->data->connections.clear(); + + g_signal_handlers_disconnect_by_func(gtk_native_get_surface(GTK_NATIVE((widget))), + reinterpret_cast(surface_state_changed), widget); + + GTK_WIDGET_CLASS(application_window_parent_class)->unrealize(widget); +} + +void dispose(GObject* object) { + auto* self = EE_APP_WINDOW(object); + + g_settings_set_int(self->settings, "window-width", self->data->width); + g_settings_set_int(self->settings, "window-height", self->data->height); + g_settings_set_boolean(self->settings, "window-maximized", static_cast(self->data->maximized)); + g_settings_set_boolean(self->settings, "window-fullscreen", static_cast(self->data->fullscreen)); + + if (g_settings_get_boolean(self->settings, "shutdown-on-window-close") != 0 && + (g_application_get_flags(self->data->gapp) & G_APPLICATION_IS_SERVICE) != 0) { + g_application_release(self->data->gapp); + } + + g_object_unref(self->settings); + + // removing the extra reference + + g_object_unref(self->output_presets_menu); + g_object_unref(self->input_presets_menu); + + ui::unref_global_app_settings(); + + util::debug("disposed"); + + G_OBJECT_CLASS(application_window_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_APP_WINDOW(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(application_window_parent_class)->finalize(object); +} + +void application_window_class_init(ApplicationWindowClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->constructed = constructed; + object_class->dispose = dispose; + object_class->finalize = finalize; + + widget_class->size_allocate = size_allocate; + widget_class->realize = realize; + widget_class->unrealize = unrealize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::application_window_ui); + + gtk_widget_class_bind_template_child(widget_class, ApplicationWindow, stack); + gtk_widget_class_bind_template_child(widget_class, ApplicationWindow, presets_menu_button); + gtk_widget_class_bind_template_child(widget_class, ApplicationWindow, bypass_button); + + gtk_widget_class_bind_template_callback(widget_class, stack_visible_child_changed); +} + +void application_window_init(ApplicationWindow* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->data->width = -1; + self->data->height = -1; + self->data->maximized = false; + self->data->fullscreen = false; + + self->settings = g_settings_new(tags::app::id); + + init_theme_color(self); + + apply_css_style(); + + if (IS_DEVEL_BUILD) { + gtk_widget_add_css_class(GTK_WIDGET(self), "devel"); + } + + self->data->icon_theme = setup_icon_theme(); + + /* + We save the user locale here because we have to wait for the changes GTK is going to make to the global locale. + It seems that the init method of the main window widget is a good place for this. + */ + + ui::save_user_locale(); + + ui::init_global_app_settings(); + + self->output_presets_menu = ui::presets_menu::create(); + self->input_presets_menu = ui::presets_menu::create(); + + /* + Adding an extra reference so that the menu sin ´t destroyed when alternating between the input and output effects + section + */ + + g_object_ref(self->output_presets_menu); + g_object_ref(self->input_presets_menu); + + self->soe_ui = ui::effects_box::create(); + self->sie_ui = ui::effects_box::create(); + self->pm_box = ui::pipe_manager_box::create(); + + auto* soe_ui_page = adw_view_stack_add_titled(self->stack, GTK_WIDGET(self->soe_ui), "stream_output", _("_Output")); + auto* sie_ui_page = adw_view_stack_add_titled(self->stack, GTK_WIDGET(self->sie_ui), "stream_input", _("_Input")); + auto* pm_box_page = adw_view_stack_add_titled(self->stack, GTK_WIDGET(self->pm_box), "page_pipewire", _("_PipeWire")); + + adw_view_stack_page_set_use_underline(soe_ui_page, true); + adw_view_stack_page_set_use_underline(sie_ui_page, true); + adw_view_stack_page_set_use_underline(pm_box_page, true); + + adw_view_stack_page_set_icon_name(soe_ui_page, "audio-speakers-symbolic"); + adw_view_stack_page_set_icon_name(sie_ui_page, "audio-input-microphone-symbolic"); + adw_view_stack_page_set_icon_name(pm_box_page, "network-server-symbolic"); + + gtk_menu_button_set_popover(self->presets_menu_button, GTK_WIDGET(self->output_presets_menu)); + + g_settings_bind(self->settings, "bypass", self->bypass_button, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "autohide-popovers", self->output_presets_menu, "autohide", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "autohide-popovers", self->input_presets_menu, "autohide", G_SETTINGS_BIND_DEFAULT); + + g_signal_connect(self->settings, "changed::use-dark-theme", + G_CALLBACK(+[](GSettings* settings, char* key, ApplicationWindow* self) { init_theme_color(self); }), + self); +} + +auto create(GApplication* gapp) -> ApplicationWindow* { + return static_cast(g_object_new(EE_TYPE_APPLICATION_WINDOW, "application", gapp, nullptr)); +} + +} // namespace ui::application_window diff --git a/src/apps_box.cpp b/src/apps_box.cpp new file mode 100644 index 0000000..fc65e03 --- /dev/null +++ b/src/apps_box.cpp @@ -0,0 +1,437 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "apps_box.hpp" + +namespace ui::apps_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + app::Application* application; + + std::unordered_map enabled_app_list; + + std::vector connections; + + std::vector gconnections; +}; + +struct _AppsBox { + GtkBox parent_instance; + + GtkOverlay* overlay; + + AdwStatusPage* overlay_empty_list; + + GtkListView* listview; + + GtkIconTheme* icon_theme; + + GListStore *apps_model, *all_apps_model; + + GSettings *settings, *app_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(AppsBox, apps_box, GTK_TYPE_BOX) + +auto app_is_blocklisted(AppsBox* self, const std::string& name) -> bool { + const auto list = util::gchar_array_to_vector(g_settings_get_strv(self->settings, "blocklist")); + + return std::ranges::find(list, name) != list.end(); +} + +void update_empty_list_overlay(AppsBox* self) { + gtk_widget_set_visible(GTK_WIDGET(self->overlay_empty_list), + (g_list_model_get_n_items(G_LIST_MODEL(self->apps_model)) == 0) ? 1 : 0); +} + +void on_app_added(AppsBox* self, const NodeInfo& node_info) { + // do not add the same stream twice + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->all_apps_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->all_apps_model), n)); + + if (holder->info->serial == node_info.serial) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(node_info); + + g_list_store_append(self->all_apps_model, holder); + + if (g_settings_get_boolean(self->settings, "show-blocklisted-apps") != 0 || + !app_is_blocklisted(self, node_info.name)) { + g_list_store_append(self->apps_model, holder); + } + + /* + As g_list_store_append calls increases the object reference count we remove the one added by g_object_new in the + object creation. The reference added by g_list_store_append will be removed by an additional call to + g_object_unref after g_list_store_remove is called + */ + + g_object_unref(holder); + + update_empty_list_overlay(self); +} + +void on_app_removed(AppsBox* self, const uint64_t serial) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->all_apps_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->all_apps_model), n)); + + if (holder->info->serial == serial) { + holder->info_updated.clear(); // Disconnecting all the slots before removing the holder from the model + + g_list_store_remove(self->all_apps_model, n); + + g_object_unref(holder); + + break; + } + + g_object_unref(holder); + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->apps_model)); n++) { + auto* holder = static_cast(g_list_model_get_item(G_LIST_MODEL(self->apps_model), n)); + + if (holder->info->serial == serial) { + holder->info_updated.clear(); // Disconnecting all the slots before removing the holder from the model + + g_list_store_remove(self->apps_model, n); + + g_object_unref(holder); + + break; + } + + g_object_unref(holder); + } + + update_empty_list_overlay(self); +} + +void on_app_changed(AppsBox* self, const NodeInfo node_info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->apps_model)); n++) { + auto* holder = static_cast(g_list_model_get_item(G_LIST_MODEL(self->apps_model), n)); + + if (holder->info->serial == node_info.serial) { + holder->info_updated.emit(node_info); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } +} + +void connect_stream(AppsBox* self, const uint& id, const std::string& media_class) { + if (media_class == tags::pipewire::media_class::output_stream) { + self->data->application->pm->connect_stream_output(id); + } else if (media_class == tags::pipewire::media_class::input_stream) { + self->data->application->pm->connect_stream_input(id); + } +} + +void disconnect_stream(AppsBox* self, const uint& id, const std::string& media_class) { + if (media_class == tags::pipewire::media_class::output_stream || + media_class == tags::pipewire::media_class::input_stream) { + self->data->application->pm->disconnect_stream(id); + } +} + +void setup_listview(AppsBox* self) { + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect(factory, "setup", + G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, AppsBox* self) { + auto app_info = ui::app_info::create(); + + ui::app_info::setup(app_info, self->data->application, self->settings, self->icon_theme, + self->data->enabled_app_list); + + gtk_list_item_set_activatable(item, 0); + gtk_list_item_set_child(item, GTK_WIDGET(app_info)); + + g_object_set_data(G_OBJECT(item), "app-info", app_info); + }), + self); + + g_signal_connect( + factory, "bind", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, AppsBox* self) { + auto* app_info = static_cast(g_object_get_data(G_OBJECT(item), "app-info")); + + auto child_item = gtk_list_item_get_item(item); + + auto* holder = static_cast(child_item); + + // Update the app info ui for the very first time Needed for interface initialization in service mode + + if (const auto node_it = self->data->application->pm->node_map.find(holder->info->serial); + node_it != self->data->application->pm->node_map.end()) { + ui::app_info::update(app_info, node_it->second); + } + + // A call to holder->info_updated.clear() will be made in the unbind signal + + holder->info_updated.connect([=](const NodeInfo node_info) { ui::app_info::update(app_info, node_info); }); + }), + self); + + g_signal_connect(factory, "unbind", + G_CALLBACK(+[](GtkSignalListItemFactory* self, GtkListItem* item, gpointer user_data) { + auto* holder = static_cast(gtk_list_item_get_item(item)); + + holder->info_updated.clear(); + }), + self); + + gtk_list_view_set_factory(self->listview, factory); + + g_object_unref(factory); + + // setting the model + + auto* selection = gtk_no_selection_new(G_LIST_MODEL(self->apps_model)); + + gtk_list_view_set_model(self->listview, GTK_SELECTION_MODEL(selection)); + + g_object_unref(selection); +} + +void setup(AppsBox* self, app::Application* application, PipelineType pipeline_type, GtkIconTheme* icon_theme) { + self->data->application = application; + self->icon_theme = icon_theme; + + switch (pipeline_type) { + case PipelineType::input: { + auto* pm = application->sie->pm; + + self->settings = g_settings_new(tags::schema::id_input); + + for (const auto& [serial, node] : pm->node_map) { + if (node.media_class == tags::pipewire::media_class::input_stream) { + on_app_added(self, node); + } + } + + self->data->connections.push_back( + application->sie->pm->stream_input_added.connect([=](const NodeInfo info) { on_app_added(self, info); })); + + self->data->connections.push_back(application->sie->pm->stream_input_removed.connect( + [=](const uint64_t serial) { on_app_removed(self, serial); })); + + self->data->connections.push_back(application->sie->pm->stream_input_changed.connect( + [=](const NodeInfo node_info) { on_app_changed(self, node_info); })); + + break; + } + case PipelineType::output: { + auto* pm = application->soe->pm; + + self->settings = g_settings_new(tags::schema::id_output); + + for (const auto& [serial, node] : pm->node_map) { + if (node.media_class == tags::pipewire::media_class::output_stream) { + on_app_added(self, node); + } + } + + self->data->connections.push_back( + pm->stream_output_added.connect([=](const NodeInfo info) { on_app_added(self, info); })); + + self->data->connections.push_back(application->soe->pm->stream_output_removed.connect( + [=](const uint64_t serial) { on_app_removed(self, serial); })); + + self->data->connections.push_back(application->soe->pm->stream_output_changed.connect( + [=](const NodeInfo node_info) { on_app_changed(self, node_info); })); + + break; + } + } + + // updating the list when changes are made to the blocklist + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::blocklist", G_CALLBACK(+[](GSettings* settings, char* key, AppsBox* self) { + const auto show_blocklisted_apps = g_settings_get_boolean(self->settings, "show-blocklisted-apps") != 0; + + g_list_store_remove_all(self->apps_model); + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->all_apps_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->all_apps_model), n)); + + const auto app_is_enabled = + self->data->application->pm->stream_is_connected(holder->info->id, holder->info->media_class); + + if (app_is_blocklisted(self, holder->info->name)) { + if (app_is_enabled) { + disconnect_stream(self, holder->info->id, holder->info->media_class); + } + + if (show_blocklisted_apps) { + g_list_store_append(self->apps_model, holder); + } + } else { + if (!app_is_enabled) { + // Try to restore the previous enabled state, if needed + + try { + if (self->data->enabled_app_list.at(holder->info->id)) { + connect_stream(self, holder->info->id, holder->info->media_class); + } + } catch (...) { + connect_stream(self, holder->info->id, holder->info->media_class); + + util::warning("can't retrieve enabled state of node " + holder->info->name); + + self->data->enabled_app_list.insert({holder->info->id, true}); + } + } + + g_list_store_append(self->apps_model, holder); + } + + g_object_unref(holder); + } + + update_empty_list_overlay(self); + }), + self)); + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::show-blocklisted-apps", G_CALLBACK(+[](GSettings* settings, char* key, AppsBox* self) { + const auto show_blocklisted_apps = g_settings_get_boolean(self->settings, "show-blocklisted-apps") != 0; + + g_list_store_remove_all(self->apps_model); + + if (show_blocklisted_apps) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->all_apps_model)); n++) { + auto item = g_list_model_get_item(G_LIST_MODEL(self->all_apps_model), n); + + g_object_unref(item); + + g_list_store_append(self->apps_model, item); + } + } else { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->all_apps_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->all_apps_model), n)); + + g_object_unref(holder); + + if (!app_is_blocklisted(self, holder->info->name)) { + auto item = g_list_model_get_item(G_LIST_MODEL(self->all_apps_model), n); + + g_object_unref(item); + + g_list_store_append(self->apps_model, item); + } + } + } + + update_empty_list_overlay(self); + }), + self)); +} + +void dispose(GObject* object) { + auto* self = EE_APPS_BOX(object); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->all_apps_model); // do not do this to self->apps_model. It is owned by the listview + g_object_unref(self->settings); + g_object_unref(self->app_settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(apps_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_APPS_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(apps_box_parent_class)->finalize(object); +} + +void apps_box_class_init(AppsBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::apps_box_ui); + + gtk_widget_class_bind_template_child(widget_class, AppsBox, overlay); + gtk_widget_class_bind_template_child(widget_class, AppsBox, overlay_empty_list); + gtk_widget_class_bind_template_child(widget_class, AppsBox, listview); +} + +void apps_box_init(AppsBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->app_settings = g_settings_new(tags::app::id); + + self->apps_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + self->all_apps_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + + gtk_overlay_set_clip_overlay(self->overlay, GTK_WIDGET(self->overlay_empty_list), 1); + + setup_listview(self); +} + +auto create() -> AppsBox* { + return static_cast(g_object_new(EE_TYPE_APPS_BOX, nullptr)); +} + +} // namespace ui::apps_box diff --git a/src/autogain.cpp b/src/autogain.cpp new file mode 100644 index 0000000..912319c --- /dev/null +++ b/src/autogain.cpp @@ -0,0 +1,382 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "autogain.hpp" + +AutoGain::AutoGain(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::autogain, tags::plugin_package::ebur128, schema, schema_path, pipe_manager), + target(g_settings_get_double(settings, "target")), + silence_threshold(g_settings_get_double(settings, "silence-threshold")) { + reference = parse_reference_key(util::gsettings_get_string(settings, "reference")); + + gconnections.push_back(g_signal_connect(settings, "changed::target", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->target = g_settings_get_double(settings, key); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::silence-threshold", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->silence_threshold = g_settings_get_double(settings, key); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::maximum-history", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + std::scoped_lock lock(self->data_mutex); + + self->set_maximum_history(g_settings_get_int(settings, key)); + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::reset-history", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->mythreads.emplace_back([self]() { // Using emplace_back here makes sense + self->data_mutex.lock(); + + self->ebur128_ready = false; + + self->data_mutex.unlock(); + + auto status = self->init_ebur128(); + + self->data_mutex.lock(); + + self->ebur128_ready = status; + + self->data_mutex.unlock(); + }); + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::reference", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->reference = parse_reference_key(util::gsettings_get_string(settings, key)); + }), + this)); + + setup_input_output_gain(); +} + +AutoGain::~AutoGain() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + for (auto& t : mythreads) { + t.join(); + } + + mythreads.clear(); + + std::scoped_lock lock(data_mutex); + + if (ebur_state != nullptr) { + ebur128_destroy(&ebur_state); + } + + util::debug(log_tag + name + " destroyed"); +} + +auto AutoGain::init_ebur128() -> bool { + if (n_samples == 0 || rate == 0) { + return false; + } + + internal_output_gain = 1.0; + + if (ebur_state != nullptr) { + ebur128_destroy(&ebur_state); + + ebur_state = nullptr; + } + + ebur_state = ebur128_init(2U, rate, EBUR128_MODE_S | EBUR128_MODE_I | EBUR128_MODE_LRA | EBUR128_MODE_SAMPLE_PEAK); + + ebur128_set_channel(ebur_state, 0U, EBUR128_LEFT); + ebur128_set_channel(ebur_state, 1U, EBUR128_RIGHT); + + set_maximum_history(g_settings_get_int(settings, "maximum-history")); + + return ebur_state != nullptr; +} + +auto AutoGain::parse_reference_key(const std::string& key) -> Reference { + if (key == "Momentary") { + return Reference::momentary; + } + + if (key == "Shortterm") { + return Reference::shortterm; + } + + if (key == "Integrated") { + return Reference::integrated; + } + + if (key == "Geometric Mean (MS)") { + return Reference::geometric_mean_ms; + } + + if (key == "Geometric Mean (MI)") { + return Reference::geometric_mean_mi; + } + + if (key == "Geometric Mean (SI)") { + return Reference::geometric_mean_si; + } + + return Reference::geometric_mean_msi; +} + +void AutoGain::set_maximum_history(const int& seconds) { + if (ebur_state == nullptr) { + return; + } + + // The value given to ebur128_set_max_history must be in milliseconds + + ebur128_set_max_history(ebur_state, static_cast(seconds) * 1000UL); +} + +void AutoGain::setup() { + if (2U * static_cast(n_samples) != data.size()) { + data.resize(static_cast(n_samples) * 2U); + } + + if (rate != old_rate) { + data_mutex.lock(); + + ebur128_ready = false; + + data_mutex.unlock(); + + mythreads.emplace_back([this]() { // Using emplace_back here makes sense + if (ebur128_ready) { + return; + } + + auto status = true; + + old_rate = rate; + + status = init_ebur128(); + + data_mutex.lock(); + + ebur128_ready = status; + + data_mutex.unlock(); + }); + } +} + +void AutoGain::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (bypass || !ebur128_ready) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + for (size_t n = 0U; n < n_samples; n++) { + data[2U * n] = left_in[n]; + data[2U * n + 1U] = right_in[n]; + } + + ebur128_add_frames_float(ebur_state, data.data(), n_samples); + + auto failed = false; + + if (EBUR128_SUCCESS != ebur128_loudness_momentary(ebur_state, &momentary)) { + failed = true; + } + + if (EBUR128_SUCCESS != ebur128_loudness_shortterm(ebur_state, &shortterm)) { + failed = true; + } + + if (EBUR128_SUCCESS != ebur128_loudness_global(ebur_state, &global)) { + failed = true; + } + + if (std::isinf(momentary) || std::isnan(momentary)) { + /* + Assuming zero so that the output gain is negative. This should avoid undesirably high amplification in case + a bad resutla comes from libebur128 + */ + + momentary = 0.0; + } + + if (shortterm > 10.0 || std::isinf(shortterm) || std::isnan(shortterm)) { + /* + Sometimes when a stream is started right after Easy Effects has been initialized a very large shorterm value is + calculated. Probably because of some weird high intensity transient. So it is better to ignore unresonable large + values. When they happen we just set the shorterm value to the momentary loudness. + */ + + shortterm = momentary; + } + + if (global > 10.0 || std::isinf(global) || std::isnan(global)) { + /* + Sometimes when a stream is started right after Easy Effects has been initialized a very large integrated value is + calculated. Probably because of some weird high intensity transient. So it is better to ignore unresonable large + values. When they happen we just set the global value to the momentary loudness. + */ + + global = momentary; + } + + if (EBUR128_SUCCESS != ebur128_relative_threshold(ebur_state, &relative)) { + failed = true; + } + + if (EBUR128_SUCCESS != ebur128_loudness_range(ebur_state, &range)) { + failed = true; + } + + if (momentary > silence_threshold && !failed) { + double peak_L = 0.0; + double peak_R = 0.0; + + if (EBUR128_SUCCESS != ebur128_prev_sample_peak(ebur_state, 0U, &peak_L)) { + failed = true; + } + + if (EBUR128_SUCCESS != ebur128_prev_sample_peak(ebur_state, 1U, &peak_R)) { + failed = true; + } + + if (!failed) { + switch (reference) { + case Reference::momentary: { + loudness = momentary; + + break; + } + case Reference::shortterm: { + loudness = shortterm; + + break; + } + case Reference::integrated: { + loudness = global; + + break; + } + case Reference::geometric_mean_msi: { + loudness = std::cbrt(momentary * shortterm * global); + + break; + } + case Reference::geometric_mean_ms: { + loudness = std::sqrt(std::fabs(momentary * shortterm)); + + if (momentary < 0 && shortterm < 0) { + loudness *= -1; + } + + break; + } + case Reference::geometric_mean_mi: { + loudness = std::sqrt(std::fabs(momentary * global)); + + if (momentary < 0 && global < 0) { + loudness *= -1; + } + + break; + } + case Reference::geometric_mean_si: { + loudness = std::sqrt(std::fabs(shortterm * global)); + + if (shortterm < 0 && global < 0) { + loudness *= -1; + } + + break; + } + } + + const double diff = target - loudness; + + // 10^(diff/20). The way below should be faster than using pow + const double gain = std::exp((diff / 20.0) * std::log(10.0)); + + const double peak = (peak_L > peak_R) ? peak_L : peak_R; + + const auto db_peak = util::linear_to_db(peak); + + if (db_peak > util::minimum_db_level) { + if (gain * peak < 1.0) { + internal_output_gain = gain; + } + } + } + } + + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + if (internal_output_gain != 1.0F) { + apply_gain(left_out, right_out, static_cast(internal_output_gain)); + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + results.emit(loudness, internal_output_gain, momentary, shortterm, global, relative, range); + + notify(); + } + } +} + +auto AutoGain::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/autogain_preset.cpp b/src/autogain_preset.cpp new file mode 100644 index 0000000..0851477 --- /dev/null +++ b/src/autogain_preset.cpp @@ -0,0 +1,61 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "autogain_preset.hpp" + +AutoGainPreset::AutoGainPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::autogain::id, + tags::schema::autogain::input_path, + tags::schema::autogain::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::autogain).append("#").append(util::to_string(index)); +} + +void AutoGainPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["target"] = g_settings_get_double(settings, "target"); + + json[section][instance_name]["silence-threshold"] = g_settings_get_double(settings, "silence-threshold"); + + json[section][instance_name]["maximum-history"] = g_settings_get_int(settings, "maximum-history"); + + json[section][instance_name]["reference"] = util::gsettings_get_string(settings, "reference"); +} + +void AutoGainPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "target", "target"); + + update_key(json.at(section).at(instance_name), settings, "silence-threshold", "silence-threshold"); + + update_key(json.at(section).at(instance_name), settings, "maximum-history", "maximum-history"); + + update_key(json.at(section).at(instance_name), settings, "reference", "reference"); +} diff --git a/src/autogain_ui.cpp b/src/autogain_ui.cpp new file mode 100644 index 0000000..e293941 --- /dev/null +++ b/src/autogain_ui.cpp @@ -0,0 +1,261 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "autogain_ui.hpp" + +namespace ui::autogain_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr autogain; + + std::vector connections; + + std::vector gconnections; +}; + +struct _AutogainBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkSpinButton *target, *silence_threshold, *maximum_history; + + GtkLevelBar *m_level, *s_level, *i_level, *r_level, *g_level, *l_level, *lra_level; + + GtkLabel *m_label, *s_label, *i_label, *r_label, *g_label, *l_label, *lra_label; + + GtkButton* reset_history; + + AdwComboRow* reference; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(AutogainBox, autogain_box, GTK_TYPE_BOX) + +void on_reset(AutogainBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_reset_history(AutogainBox* self, GtkButton* btn) { + // it is ugly but will ensure that third party tools are able to reset this plugin history + + g_settings_set_boolean(self->settings, "reset-history", + static_cast(g_settings_get_boolean(self->settings, "reset-history") == 0)); +} + +void setup(AutogainBox* self, std::shared_ptr autogain, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->autogain = autogain; + + self->settings = g_settings_new_with_path(tags::schema::autogain::id, schema_path.c_str()); + + autogain->set_post_messages(true); + + self->data->connections.push_back(autogain->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(autogain->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(autogain->results.connect( + [=](const double loudness, const double gain, const double momentary, const double shortterm, + const double integrated, const double relative, const double range) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LEVEL_BAR(self->l_level) || !GTK_IS_LABEL(self->l_label) || !GTK_IS_LEVEL_BAR(self->g_level) || + !GTK_IS_LABEL(self->g_label) || !GTK_IS_LEVEL_BAR(self->m_level) || !GTK_IS_LABEL(self->m_label) || + !GTK_IS_LEVEL_BAR(self->s_level) || !GTK_IS_LABEL(self->s_label) || !GTK_IS_LEVEL_BAR(self->i_level) || + !GTK_IS_LABEL(self->i_label) || !GTK_IS_LEVEL_BAR(self->r_level) || !GTK_IS_LABEL(self->r_label) || + !GTK_IS_LEVEL_BAR(self->lra_level) || !GTK_IS_LABEL(self->lra_label)) { + return; + } + + gtk_level_bar_set_value(self->l_level, util::db_to_linear(loudness)); + gtk_label_set_text(self->l_label, fmt::format("{0:.0f} LUFS", loudness).c_str()); + + gtk_level_bar_set_value(self->g_level, gain); + gtk_label_set_text(self->g_label, + fmt::format(ui::get_user_locale(), "{0:.2Lf} dB", util::linear_to_db(gain)).c_str()); + + gtk_level_bar_set_value(self->m_level, util::db_to_linear(momentary)); + gtk_label_set_text(self->m_label, fmt::format("{0:.0f} LUFS", momentary).c_str()); + + gtk_level_bar_set_value(self->s_level, util::db_to_linear(shortterm)); + gtk_label_set_text(self->s_label, fmt::format("{0:.0f} LUFS", shortterm).c_str()); + + gtk_level_bar_set_value(self->i_level, util::db_to_linear(integrated)); + gtk_label_set_text(self->i_label, fmt::format("{0:.0f} LUFS", integrated).c_str()); + + gtk_level_bar_set_value(self->r_level, util::db_to_linear(relative)); + gtk_label_set_text(self->r_label, fmt::format("{0:.0f} LUFS", relative).c_str()); + + gtk_level_bar_set_value(self->lra_level, util::db_to_linear(range)); + gtk_label_set_text(self->lra_label, fmt::format("{0:.0f} LU", range).c_str()); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->autogain->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + gsettings_bind_widgets<"target", "silence-threshold", "maximum-history">( + self->settings, self->target, self->silence_threshold, self->maximum_history); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "reference", self->reference); +} + +void dispose(GObject* object) { + auto* self = EE_AUTOGAIN_BOX(object); + + self->data->autogain->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(autogain_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_AUTOGAIN_BOX(object); + + delete self->data; + + util::debug("finalize"); + + G_OBJECT_CLASS(autogain_box_parent_class)->finalize(object); +} + +void autogain_box_class_init(AutogainBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::autogain_ui); + + gtk_widget_class_bind_template_child(widget_class, AutogainBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, AutogainBox, target); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, silence_threshold); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, maximum_history); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, reference); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, reset_history); + + gtk_widget_class_bind_template_child(widget_class, AutogainBox, m_level); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, s_level); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, i_level); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, r_level); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, g_level); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, l_level); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, lra_level); + + gtk_widget_class_bind_template_child(widget_class, AutogainBox, m_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, s_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, i_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, r_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, g_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, l_label); + gtk_widget_class_bind_template_child(widget_class, AutogainBox, lra_label); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + + gtk_widget_class_bind_template_callback(widget_class, on_reset_history); +} + +void autogain_box_init(AutogainBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"dB">(self->target, self->silence_threshold); + prepare_spinbuttons<"s">(self->maximum_history); +} + +auto create() -> AutogainBox* { + return static_cast(g_object_new(EE_TYPE_AUTOGAIN_BOX, nullptr)); +} + +} // namespace ui::autogain_box diff --git a/src/bass_enhancer.cpp b/src/bass_enhancer.cpp new file mode 100644 index 0000000..efe0936 --- /dev/null +++ b/src/bass_enhancer.cpp @@ -0,0 +1,115 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "bass_enhancer.hpp" + +BassEnhancer::BassEnhancer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::bass_enhancer, tags::plugin_package::calf, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://calf.sourceforge.net/plugins/BassEnhancer"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://calf.sourceforge.net/plugins/BassEnhancer is not installed"); + } + + lv2_wrapper->bind_key_double_db<"amount", "amount">(settings); + + lv2_wrapper->bind_key_double<"drive", "harmonics">(settings); + + lv2_wrapper->bind_key_double<"freq", "scope">(settings); + + lv2_wrapper->bind_key_double<"floor", "floor">(settings); + + lv2_wrapper->bind_key_double<"blend", "blend">(settings); + + lv2_wrapper->bind_key_bool<"floor_active", "floor-active">(settings); + + lv2_wrapper->bind_key_bool<"listen", "listen">(settings); + + setup_input_output_gain(); +} + +BassEnhancer::~BassEnhancer() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void BassEnhancer::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void BassEnhancer::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + // harmonics needed as double for levelbar widget ui, so we convert it here + + harmonics_port_value = static_cast(lv2_wrapper->get_control_port_value("meter_drive")); + + if (!post_messages) { + return; + } + + harmonics.emit(harmonics_port_value); + + notify(); + } + } +} + +auto BassEnhancer::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/bass_enhancer_preset.cpp b/src/bass_enhancer_preset.cpp new file mode 100644 index 0000000..c3a2f4c --- /dev/null +++ b/src/bass_enhancer_preset.cpp @@ -0,0 +1,69 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "bass_enhancer_preset.hpp" + +BassEnhancerPreset::BassEnhancerPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::bass_enhancer::id, + tags::schema::bass_enhancer::input_path, + tags::schema::bass_enhancer::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::bass_enhancer).append("#").append(util::to_string(index)); +} + +void BassEnhancerPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["amount"] = g_settings_get_double(settings, "amount"); + + json[section][instance_name]["harmonics"] = g_settings_get_double(settings, "harmonics"); + + json[section][instance_name]["scope"] = g_settings_get_double(settings, "scope"); + + json[section][instance_name]["floor"] = g_settings_get_double(settings, "floor"); + + json[section][instance_name]["blend"] = g_settings_get_double(settings, "blend"); + + json[section][instance_name]["floor-active"] = g_settings_get_boolean(settings, "floor-active") != 0; +} + +void BassEnhancerPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "amount", "amount"); + + update_key(json.at(section).at(instance_name), settings, "harmonics", "harmonics"); + + update_key(json.at(section).at(instance_name), settings, "scope", "scope"); + + update_key(json.at(section).at(instance_name), settings, "floor", "floor"); + + update_key(json.at(section).at(instance_name), settings, "blend", "blend"); + + update_key(json.at(section).at(instance_name), settings, "floor-active", "floor-active"); +} diff --git a/src/bass_enhancer_ui.cpp b/src/bass_enhancer_ui.cpp new file mode 100644 index 0000000..d902548 --- /dev/null +++ b/src/bass_enhancer_ui.cpp @@ -0,0 +1,217 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "bass_enhancer_ui.hpp" + +namespace ui::bass_enhancer_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr bass_enhancer; + + std::vector connections; + + std::vector gconnections; +}; + +struct _BassEnhancerBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkLevelBar* harmonics_levelbar; + + GtkLabel* harmonics_levelbar_label; + + GtkSpinButton *floor, *amount, *harmonics, *scope; + + GtkScale* blend; + + GtkToggleButton *floor_active, *listen; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(BassEnhancerBox, bass_enhancer_box, GTK_TYPE_BOX) + +void on_reset(BassEnhancerBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(BassEnhancerBox* self, std::shared_ptr bass_enhancer, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->bass_enhancer = bass_enhancer; + + self->settings = g_settings_new_with_path(tags::schema::bass_enhancer::id, schema_path.c_str()); + + bass_enhancer->set_post_messages(true); + + self->data->connections.push_back(bass_enhancer->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(bass_enhancer->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(bass_enhancer->harmonics.connect([=](const double value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LEVEL_BAR(self->harmonics_levelbar) || !GTK_IS_LABEL(self->harmonics_levelbar_label)) { + return; + } + + gtk_level_bar_set_value(self->harmonics_levelbar, value); + gtk_label_set_text(self->harmonics_levelbar_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->bass_enhancer->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + gsettings_bind_widgets<"amount", "harmonics", "scope", "floor", "blend", "listen", "floor-active">( + self->settings, self->amount, self->harmonics, self->scope, self->floor, self->blend, self->listen, + self->floor_active); +} + +void dispose(GObject* object) { + auto* self = EE_BASS_ENHANCER_BOX(object); + + self->data->bass_enhancer->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(bass_enhancer_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_BASS_ENHANCER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(bass_enhancer_box_parent_class)->finalize(object); +} + +void bass_enhancer_box_class_init(BassEnhancerBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::bass_enhancer_ui); + + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, harmonics_levelbar_label); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, harmonics_levelbar); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, floor); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, amount); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, harmonics); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, scope); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, blend); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, floor_active); + gtk_widget_class_bind_template_child(widget_class, BassEnhancerBox, listen); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void bass_enhancer_box_init(BassEnhancerBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"dB">(self->amount); + prepare_spinbuttons<"Hz">(self->scope, self->floor); + prepare_spinbuttons<"">(self->harmonics); + + prepare_scales<"">(self->blend); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> BassEnhancerBox* { + return static_cast(g_object_new(EE_TYPE_BASS_ENHANCER_BOX, nullptr)); +} + +} // namespace ui::bass_enhancer_box diff --git a/src/bass_loudness.cpp b/src/bass_loudness.cpp new file mode 100644 index 0000000..19dd772 --- /dev/null +++ b/src/bass_loudness.cpp @@ -0,0 +1,97 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "bass_loudness.hpp" + +BassLoudness::BassLoudness(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::bass_loudness, tags::plugin_package::mda, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://drobilla.net/plugins/mda/Loudness"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://drobilla.net/plugins/mda/Loudness is not installed"); + } + + lv2_wrapper->bind_key_double_db<"loudness", "loudness">(settings); + + lv2_wrapper->bind_key_double_db<"output", "output">(settings); + + lv2_wrapper->bind_key_double_db<"link", "link">(settings); + + setup_input_output_gain(); +} + +BassLoudness::~BassLoudness() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void BassLoudness::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void BassLoudness::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto BassLoudness::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/bass_loudness_preset.cpp b/src/bass_loudness_preset.cpp new file mode 100644 index 0000000..e802f43 --- /dev/null +++ b/src/bass_loudness_preset.cpp @@ -0,0 +1,57 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "bass_loudness_preset.hpp" + +BassLoudnessPreset::BassLoudnessPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::bass_loudness::id, + tags::schema::bass_loudness::input_path, + tags::schema::bass_loudness::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::bass_loudness).append("#").append(util::to_string(index)); +} + +void BassLoudnessPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["loudness"] = g_settings_get_double(settings, "loudness"); + + json[section][instance_name]["output"] = g_settings_get_double(settings, "output"); + + json[section][instance_name]["link"] = g_settings_get_double(settings, "link"); +} + +void BassLoudnessPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "loudness", "loudness"); + + update_key(json.at(section).at(instance_name), settings, "output", "output"); + + update_key(json.at(section).at(instance_name), settings, "link", "link"); +} diff --git a/src/bass_loudness_ui.cpp b/src/bass_loudness_ui.cpp new file mode 100644 index 0000000..972c6d3 --- /dev/null +++ b/src/bass_loudness_ui.cpp @@ -0,0 +1,182 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "bass_loudness_ui.hpp" + +namespace ui::bass_loudness_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr bass_loudness; + + std::vector connections; + + std::vector gconnections; +}; + +struct _BassLoudnessBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkSpinButton *loudness, *output, *link; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(BassLoudnessBox, bass_loudness_box, GTK_TYPE_BOX) + +void on_reset(BassLoudnessBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(BassLoudnessBox* self, std::shared_ptr bass_loudness, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->bass_loudness = bass_loudness; + + self->settings = g_settings_new_with_path(tags::schema::bass_loudness::id, schema_path.c_str()); + + bass_loudness->set_post_messages(true); + + self->data->connections.push_back(bass_loudness->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(bass_loudness->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->bass_loudness->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + gsettings_bind_widgets<"loudness", "output", "link">(self->settings, self->loudness, self->output, self->link); +} + +void dispose(GObject* object) { + auto* self = EE_BASS_LOUDNESS_BOX(object); + + self->data->bass_loudness->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(bass_loudness_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_BASS_LOUDNESS_BOX(object); + + delete self->data; + + util::debug("finalize"); + + G_OBJECT_CLASS(bass_loudness_box_parent_class)->finalize(object); +} + +void bass_loudness_box_class_init(BassLoudnessBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::bass_loudness_ui); + + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, loudness); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, output); + gtk_widget_class_bind_template_child(widget_class, BassLoudnessBox, link); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void bass_loudness_box_init(BassLoudnessBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"dB">(self->loudness, self->output, self->link); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> BassLoudnessBox* { + return static_cast(g_object_new(EE_TYPE_BASS_LOUDNESS_BOX, nullptr)); +} + +} // namespace ui::bass_loudness_box diff --git a/src/blocklist_menu.cpp b/src/blocklist_menu.cpp new file mode 100644 index 0000000..6125b8f --- /dev/null +++ b/src/blocklist_menu.cpp @@ -0,0 +1,243 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "blocklist_menu.hpp" + +namespace ui::blocklist_menu { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + app::Application* application; + + std::vector connections; + + std::vector gconnections; +}; + +struct _BlocklistMenu { + GtkPopover parent_instance; + + GtkScrolledWindow* scrolled_window; + + GtkListView* listview; + + GtkText* app_name; + + GtkCheckButton* show_blocklisted_apps; + + GtkStringList* string_list; + + GSettings *settings, *app_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(BlocklistMenu, blocklist_menu, GTK_TYPE_POPOVER) + +void on_add_to_blocklist(BlocklistMenu* self, GtkButton* button) { + auto status = util::add_new_blocklist_entry(self->settings, gtk_editable_get_text(GTK_EDITABLE(self->app_name))); + + if (status) { + gtk_editable_set_text(GTK_EDITABLE(self->app_name), ""); + } +} + +void setup_listview(BlocklistMenu* self) { + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect( + factory, "setup", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, BlocklistMenu* self) { + auto* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + auto* label = gtk_label_new(nullptr); + auto* button = gtk_button_new_from_icon_name("user-trash-symbolic"); + + gtk_widget_set_halign(GTK_WIDGET(label), GTK_ALIGN_START); + gtk_widget_set_hexpand(GTK_WIDGET(label), 1); + gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END); + gtk_label_set_max_width_chars(GTK_LABEL(label), 100); + + gtk_box_append(GTK_BOX(box), GTK_WIDGET(label)); + gtk_box_append(GTK_BOX(box), GTK_WIDGET(button)); + + gtk_list_item_set_activatable(item, 0); + gtk_list_item_set_child(item, GTK_WIDGET(box)); + + g_object_set_data(G_OBJECT(item), "name", label); + g_object_set_data(G_OBJECT(item), "remove", button); + + g_signal_connect( + button, "clicked", G_CALLBACK(+[](GtkButton* btn, BlocklistMenu* self) { + if (auto* string_object = GTK_STRING_OBJECT(g_object_get_data(G_OBJECT(btn), "string-object")); + string_object != nullptr) { + auto* name = gtk_string_object_get_string(string_object); + + auto list = util::gchar_array_to_vector(g_settings_get_strv(self->settings, "blocklist")); + + list.erase( + std::remove_if(list.begin(), list.end(), [=](const auto& app_name) { return app_name == name; }), + list.end()); + + g_settings_set_strv(self->settings, "blocklist", util::make_gchar_pointer_vector(list).data()); + } + }), + self); + }), + self); + + g_signal_connect(factory, "bind", + G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, BlocklistMenu* self) { + auto* label = static_cast(g_object_get_data(G_OBJECT(item), "name")); + auto* btn_remove = static_cast(g_object_get_data(G_OBJECT(item), "remove")); + + auto* child_item = gtk_list_item_get_item(item); + auto* string_object = GTK_STRING_OBJECT(child_item); + + g_object_set_data(G_OBJECT(btn_remove), "string-object", string_object); + + auto* name = gtk_string_object_get_string(GTK_STRING_OBJECT(child_item)); + + gtk_label_set_text(label, name); + }), + self); + + gtk_list_view_set_factory(self->listview, factory); + + g_object_unref(factory); + + for (auto& name : util::gchar_array_to_vector(g_settings_get_strv(self->settings, "blocklist"))) { + gtk_string_list_append(self->string_list, name.c_str()); + } + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::blocklist", G_CALLBACK(+[](GSettings* settings, char* key, BlocklistMenu* self) { + gtk_string_list_splice(self->string_list, 0, g_list_model_get_n_items(G_LIST_MODEL(self->string_list)), + g_settings_get_strv(settings, key)); + }), + self)); +} + +void setup(BlocklistMenu* self, app::Application* application, PipelineType pipeline_type) { + self->data->application = application; + + switch (pipeline_type) { + case PipelineType::input: { + self->settings = g_settings_new(tags::schema::id_input); + + break; + } + case PipelineType::output: { + self->settings = g_settings_new(tags::schema::id_output); + + break; + } + } + + g_settings_bind(self->settings, "show-blocklisted-apps", self->show_blocklisted_apps, "active", + G_SETTINGS_BIND_DEFAULT); + + setup_listview(self); +} + +void show(GtkWidget* widget) { + auto* self = EE_BLOCKLIST_MENU(widget); + + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->data->application)); + + auto active_window_height = gtk_widget_get_height(GTK_WIDGET(active_window)); + + const int menu_height = static_cast(0.5F * static_cast(active_window_height)); + + gtk_scrolled_window_set_max_content_height(self->scrolled_window, menu_height); + + GTK_WIDGET_CLASS(blocklist_menu_parent_class)->show(widget); +} + +void dispose(GObject* object) { + auto* self = EE_BLOCKLIST_MENU(object); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + g_object_unref(self->app_settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(blocklist_menu_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_BLOCKLIST_MENU(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(blocklist_menu_parent_class)->finalize(object); +} + +void blocklist_menu_class_init(BlocklistMenuClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + widget_class->show = show; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::blocklist_menu_ui); + + gtk_widget_class_bind_template_child(widget_class, BlocklistMenu, string_list); + + gtk_widget_class_bind_template_child(widget_class, BlocklistMenu, scrolled_window); + gtk_widget_class_bind_template_child(widget_class, BlocklistMenu, listview); + gtk_widget_class_bind_template_child(widget_class, BlocklistMenu, app_name); + gtk_widget_class_bind_template_child(widget_class, BlocklistMenu, show_blocklisted_apps); + + gtk_widget_class_bind_template_callback(widget_class, on_add_to_blocklist); +} + +void blocklist_menu_init(BlocklistMenu* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->app_settings = g_settings_new(tags::app::id); + + g_settings_bind(self->app_settings, "autohide-popovers", self, "autohide", G_SETTINGS_BIND_DEFAULT); +} + +auto create() -> BlocklistMenu* { + return static_cast(g_object_new(EE_TYPE_BLOCKLIST_MENU, nullptr)); +} + +} // namespace ui::blocklist_menu diff --git a/src/chart.cpp b/src/chart.cpp new file mode 100644 index 0000000..5266b2f --- /dev/null +++ b/src/chart.cpp @@ -0,0 +1,692 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "chart.hpp" + +namespace ui::chart { + +using namespace std::string_literals; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + bool draw_bar_border, fill_bars, is_visible, rounded_corners, dynamic_y_scale = true; + + int x_axis_height, n_x_decimals, n_y_decimals; + + double mouse_y, mouse_x, margin, line_width; + + double x_min, x_max, y_min, y_max; + + double x_min_log, x_max_log; + + double global_min_y = 0.0, global_max_y = 0.0; + + ChartType chart_type; + + ChartScale chart_scale; + + GdkRGBA background_color, color, color_axis_labels, gradient_color; + + std::string x_unit, y_unit; + + std::vector y_axis, x_axis, x_axis_log, objects_x; +}; + +struct _Chart { + GtkBox parent_instance; + + GtkEventController* controller_motion; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(Chart, chart, GTK_TYPE_WIDGET) + +void set_chart_type(Chart* self, const ChartType& value) { + if (self->data == nullptr) { + return; + } + + self->data->chart_type = value; +} + +void set_chart_scale(Chart* self, const ChartScale& value) { + if (self->data == nullptr) { + return; + } + + self->data->chart_scale = value; +} + +void set_background_color(Chart* self, GdkRGBA color) { + if (self->data == nullptr) { + return; + } + + self->data->background_color = color; +} + +void set_color(Chart* self, GdkRGBA color) { + if (self->data == nullptr) { + return; + } + + self->data->color = color; +} + +void set_axis_labels_color(Chart* self, GdkRGBA color) { + if (self->data == nullptr) { + return; + } + + self->data->color_axis_labels = color; +} + +void set_line_width(Chart* self, const float& value) { + if (self->data == nullptr) { + return; + } + + self->data->line_width = value; +} + +void set_draw_bar_border(Chart* self, const bool& v) { + if (self->data == nullptr) { + return; + } + + self->data->draw_bar_border = v; +} + +void set_rounded_corners(Chart* self, const bool& v) { + if (self->data == nullptr) { + return; + } + + self->data->rounded_corners = v; +} + +void set_fill_bars(Chart* self, const bool& v) { + if (self->data == nullptr) { + return; + } + + self->data->fill_bars = v; +} + +void set_n_x_decimals(Chart* self, const int& v) { + if (self->data == nullptr) { + return; + } + + self->data->n_x_decimals = v; +} + +void set_n_y_decimals(Chart* self, const int& v) { + if (self->data == nullptr) { + return; + } + + self->data->n_y_decimals = v; +} + +void set_x_unit(Chart* self, const std::string& value) { + if (self->data == nullptr) { + return; + } + + self->data->x_unit = value; +} + +void set_y_unit(Chart* self, const std::string& value) { + if (self->data == nullptr) { + return; + } + + self->data->y_unit = value; +} + +void set_margin(Chart* self, const float& v) { + if (self->data == nullptr) { + return; + } + + self->data->margin = v; +} + +auto get_is_visible(Chart* self) -> bool { + if (self == nullptr) { + return false; + } + + if (self->data == nullptr) { + return false; + } + + return self->data->is_visible; +} + +void set_dynamic_y_scale(Chart* self, const bool& v) { + if (self->data == nullptr) { + return; + } + + self->data->dynamic_y_scale = v; + self->data->global_min_y = 0.0; + self->data->global_max_y = 0.0; +} + +void set_x_data(Chart* self, const std::vector& x) { + if (self == nullptr || x.empty()) { + return; + } + + if (self->data == nullptr) { + return; + } + + self->data->x_axis = x; + + self->data->x_min = std::ranges::min(x); + self->data->x_max = std::ranges::max(x); + + self->data->objects_x.resize(x.size()); + + self->data->x_min_log = std::log10(self->data->x_min); + self->data->x_max_log = std::log10(self->data->x_max); + + self->data->x_axis_log.resize(x.size()); + + for (size_t n = 0U; n < self->data->x_axis_log.size(); n++) { + self->data->x_axis_log[n] = std::log10(self->data->x_axis[n]); + } + + // making each x value a number between 0 and 1 + + std::ranges::for_each(self->data->x_axis, + [&](auto& v) { v = (v - self->data->x_min) / (self->data->x_max - self->data->x_min); }); + + std::ranges::for_each(self->data->x_axis_log, [&](auto& v) { + v = (v - self->data->x_min_log) / (self->data->x_max_log - self->data->x_min_log); + }); +} + +void set_y_data(Chart* self, const std::vector& y) { + if (self == nullptr || y.empty()) { + return; + } + + self->data->y_axis = y; + + auto min_y = std::ranges::min(y); + auto max_y = std::ranges::max(y); + + if (self->data->dynamic_y_scale) { + self->data->y_min = min_y; + self->data->y_max = max_y; + } else { + self->data->global_min_y = (min_y < self->data->global_min_y) ? min_y : self->data->global_min_y; + self->data->global_max_y = (max_y > self->data->global_max_y) ? max_y : self->data->global_max_y; + + self->data->y_min = self->data->global_min_y; + self->data->y_max = self->data->global_max_y; + } + + if (std::fabs(self->data->y_max - self->data->y_min) < 0.00001) { + std::ranges::fill(self->data->y_axis, 0.0); + } else { + // making each y value a number between 0 and 1 + + std::ranges::for_each(self->data->y_axis, + [&](auto& v) { v = (v - self->data->y_min) / (self->data->y_max - self->data->y_min); }); + } + + gtk_widget_queue_draw(GTK_WIDGET(self)); +} + +void on_pointer_motion(GtkEventControllerMotion* controller, double xpos, double ypos, Chart* self) { + // Static cast trying to fix codeql issue + const auto x = xpos; + const auto y = ypos; + + const auto width = static_cast(gtk_widget_get_width(GTK_WIDGET(self))); + const auto height = static_cast(gtk_widget_get_height(GTK_WIDGET(self))); + + const auto usable_height = height - self->data->margin * height - self->data->x_axis_height; + + if (y < height - self->data->x_axis_height && y > self->data->margin * height && x > self->data->margin * width && + x < width - self->data->margin * width) { + // At least for now the y axis is always linear + + self->data->mouse_y = + (usable_height - y) / usable_height * (self->data->y_max - self->data->y_min) + self->data->y_min; + + switch (self->data->chart_scale) { + case ChartScale::logarithmic: { + const double mouse_x_log = (x - self->data->margin * width) / (width - 2 * self->data->margin * width) * + (self->data->x_max_log - self->data->x_min_log) + + self->data->x_min_log; + + self->data->mouse_x = std::pow(10.0, mouse_x_log); // exp10 does not exist on FreeBSD + + break; + } + case ChartScale::linear: { + self->data->mouse_x = (x - self->data->margin * width) / (width - 2 * self->data->margin * width) * + (self->data->x_max - self->data->x_min) + + self->data->x_min; + + break; + } + } + + gtk_widget_queue_draw(GTK_WIDGET(self)); + } +} + +auto draw_unit(Chart* self, GtkSnapshot* snapshot, const int& width, const int& height, const std::string& unit) { + auto* layout = gtk_widget_create_pango_layout(GTK_WIDGET(self), unit.c_str()); + + auto* description = pango_font_description_from_string("monospace bold"); + + pango_layout_set_font_description(layout, description); + pango_font_description_free(description); + + int text_width = 0; + int text_height = 0; + + pango_layout_get_pixel_size(layout, &text_width, &text_height); + + gtk_snapshot_save(snapshot); + + auto point = GRAPHENE_POINT_INIT(static_cast(width - text_width), static_cast(height - text_height)); + + gtk_snapshot_translate(snapshot, &point); + + gtk_snapshot_append_layout(snapshot, layout, &self->data->color_axis_labels); + + gtk_snapshot_restore(snapshot); + + g_object_unref(layout); +} + +auto draw_x_labels(Chart* self, GtkSnapshot* snapshot, const int& width, const int& height) -> int { + double labels_offset = 0.1 * width; + + int n_x_labels = static_cast(std::ceil((width - 2 * self->data->margin * width) / labels_offset)) + 1; + + if (n_x_labels < 2) { + return 0; + } + + /* + Correcting the offset based on the final n_x_labels value + */ + + labels_offset = (width - 2.0 * self->data->margin * width) / static_cast(n_x_labels - 1); + + std::vector labels; + + switch (self->data->chart_scale) { + case ChartScale::logarithmic: { + labels = util::logspace(self->data->x_min, self->data->x_max, n_x_labels); + + break; + } + case ChartScale::linear: { + labels = util::linspace(self->data->x_min, self->data->x_max, n_x_labels); + + break; + } + } + + draw_unit(self, snapshot, width, height, " "s + self->data->x_unit + " "s); + + /* + There is no space left in the window to show the last label. So we skip it. + All labels are enclosed by whitespaces to not stick the first and the final + at window borders. + */ + + for (size_t n = 0U; n < labels.size() - 1U; n++) { + const auto msg = fmt::format(ui::get_user_locale(), " {0:.{1}Lf} ", labels[n], self->data->n_x_decimals); + + auto* layout = gtk_widget_create_pango_layout(GTK_WIDGET(self), msg.c_str()); + + auto* description = pango_font_description_from_string("monospace bold"); + + pango_layout_set_font_description(layout, description); + pango_font_description_free(description); + + int text_width = 0; + int text_height = 0; + + pango_layout_get_pixel_size(layout, &text_width, &text_height); + + gtk_snapshot_save(snapshot); + + auto point = GRAPHENE_POINT_INIT(static_cast(self->data->margin * width + n * labels_offset), + static_cast(height - text_height)); + + gtk_snapshot_translate(snapshot, &point); + + gtk_snapshot_append_layout(snapshot, layout, &self->data->color_axis_labels); + + gtk_snapshot_restore(snapshot); + + g_object_unref(layout); + + if (n == labels.size() - 2U) { + return text_height; + } + } + + return 0; +} + +void snapshot(GtkWidget* widget, GtkSnapshot* snapshot) { + auto* self = EE_CHART(widget); + + switch (self->data->chart_scale) { + case ChartScale::logarithmic: { + if (self->data->y_axis.size() != self->data->x_axis_log.size()) { + return; + } + + break; + } + case ChartScale::linear: { + if (self->data->y_axis.size() != self->data->x_axis.size()) { + return; + } + + break; + } + } + + auto width = gtk_widget_get_width(widget); + auto height = gtk_widget_get_height(widget); + + auto widget_rectangle = GRAPHENE_RECT_INIT(0.0F, 0.0F, static_cast(width), static_cast(height)); + + gtk_snapshot_append_color(snapshot, &self->data->background_color, &widget_rectangle); + + if (const auto n_points = self->data->y_axis.size(); n_points > 0) { + double usable_width = width - 2.0 * (self->data->line_width + self->data->margin * width); + + auto usable_height = (height - self->data->margin * height) - self->data->x_axis_height; + + switch (self->data->chart_scale) { + case ChartScale::logarithmic: { + for (size_t n = 0U; n < n_points; n++) { + self->data->objects_x[n] = + usable_width * self->data->x_axis_log[n] + self->data->line_width + self->data->margin * width; + } + + break; + } + case ChartScale::linear: { + for (size_t n = 0U; n < n_points; n++) { + self->data->objects_x[n] = + usable_width * self->data->x_axis[n] + self->data->line_width + self->data->margin * width; + } + + break; + } + } + + self->data->x_axis_height = draw_x_labels(self, snapshot, width, height); + + auto border_color = std::to_array({self->data->color, self->data->color, self->data->color, self->data->color}); + + std::array border_width = { + static_cast(self->data->line_width), static_cast(self->data->line_width), + static_cast(self->data->line_width), static_cast(self->data->line_width)}; + + float radius = (self->data->rounded_corners) ? 5.0F : 0.0F; + + switch (self->data->chart_type) { + case ChartType::bar: { + double dw = width / static_cast(n_points); + + for (uint n = 0U; n < n_points; n++) { + double bar_height = usable_height * self->data->y_axis[n]; + + double rect_x = self->data->objects_x[n]; + double rect_y = self->data->margin * height + usable_height - bar_height; + double rect_height = bar_height; + double rect_width = dw; + + if (self->data->draw_bar_border) { + rect_width -= self->data->line_width; + } + + auto bar_rectangle = GRAPHENE_RECT_INIT(static_cast(rect_x), static_cast(rect_y), + static_cast(rect_width), static_cast(rect_height)); + + GskRoundedRect outline; + + gsk_rounded_rect_init_from_rect(&outline, &bar_rectangle, radius); + + if (self->data->fill_bars) { + gtk_snapshot_push_rounded_clip(snapshot, &outline); + + gtk_snapshot_append_color(snapshot, &self->data->color, &outline.bounds); + + gtk_snapshot_pop(snapshot); + } else { + gtk_snapshot_append_border(snapshot, &outline, border_width.data(), border_color.data()); + } + } + + break; + } + case ChartType::dots: { + double dw = width / static_cast(n_points); + + usable_height -= radius; // this avoids the dots being drawn over the axis label + + for (uint n = 0U; n < n_points; n++) { + double dot_y = usable_height * self->data->y_axis[n]; + + double rect_x = self->data->objects_x[n]; + double rect_y = self->data->margin * height + radius + usable_height - dot_y; + double rect_width = dw; + + if (self->data->draw_bar_border) { + rect_width -= self->data->line_width; + } + + auto rectangle = GRAPHENE_RECT_INIT(static_cast(rect_x - radius), static_cast(rect_y - radius), + static_cast(rect_width), static_cast(rect_width)); + + GskRoundedRect outline; + + gsk_rounded_rect_init_from_rect(&outline, &rectangle, radius); + + if (self->data->fill_bars) { + gtk_snapshot_push_rounded_clip(snapshot, &outline); + + gtk_snapshot_append_color(snapshot, &self->data->color, &outline.bounds); + + gtk_snapshot_pop(snapshot); + } else { + gtk_snapshot_append_border(snapshot, &outline, border_width.data(), border_color.data()); + } + } + + break; + } + case ChartType::line: { + auto* ctx = gtk_snapshot_append_cairo(snapshot, &widget_rectangle); + + cairo_set_source_rgba(ctx, static_cast(self->data->color.red), + static_cast(self->data->color.green), static_cast(self->data->color.blue), + static_cast(self->data->color.alpha)); + + if (self->data->fill_bars) { + cairo_move_to(ctx, self->data->margin * width, self->data->margin * height + usable_height); + } else { + const auto point_height = self->data->y_axis.front() * usable_height; + + cairo_move_to(ctx, self->data->objects_x.front(), self->data->margin * height + usable_height - point_height); + } + + for (uint n = 0U; n < n_points - 1U; n++) { + const auto next_point_height = self->data->y_axis[n + 1U] * usable_height; + + cairo_line_to(ctx, self->data->objects_x[n + 1U], + self->data->margin * height + usable_height - next_point_height); + } + + if (self->data->fill_bars) { + cairo_line_to(ctx, self->data->objects_x.back(), self->data->margin * height + usable_height); + + cairo_move_to(ctx, self->data->objects_x.back(), self->data->margin * height + usable_height); + + cairo_close_path(ctx); + } + + cairo_set_line_width(ctx, self->data->line_width); + + if (self->data->fill_bars) { + cairo_fill(ctx); + } else { + cairo_stroke(ctx); + } + + cairo_destroy(ctx); + + break; + } + } + + if (gtk_event_controller_motion_contains_pointer(GTK_EVENT_CONTROLLER_MOTION(self->controller_motion)) != 0) { + // We leave a withespace at the end to not stick the string at the window border. + const auto msg = fmt::format(ui::get_user_locale(), "x = {0:.{1}Lf} {2} y = {3:.{4}Lf} {5} ", self->data->mouse_x, + self->data->n_x_decimals, self->data->x_unit, self->data->mouse_y, + self->data->n_y_decimals, self->data->y_unit); + + auto* layout = gtk_widget_create_pango_layout(GTK_WIDGET(self), msg.c_str()); + + auto* description = pango_font_description_from_string("monospace bold"); + + pango_layout_set_font_description(layout, description); + pango_font_description_free(description); + + int text_width = 0; + int text_height = 0; + + pango_layout_get_pixel_size(layout, &text_width, &text_height); + + gtk_snapshot_save(snapshot); + + auto point = GRAPHENE_POINT_INIT(width - static_cast(text_width), 0.0F); + + gtk_snapshot_translate(snapshot, &point); + + gtk_snapshot_append_layout(snapshot, layout, &self->data->color); + + gtk_snapshot_restore(snapshot); + + g_object_unref(layout); + } + } +} + +void unroot(GtkWidget* widget) { + auto* self = EE_CHART(widget); + + self->data->is_visible = false; + + GTK_WIDGET_CLASS(chart_parent_class)->unmap(widget); +} + +void finalize(GObject* object) { + auto* self = EE_CHART(object); + + delete self->data; + + self->data = nullptr; + + util::debug("finalized"); + + G_OBJECT_CLASS(chart_parent_class)->finalize(object); +} + +void chart_class_init(ChartClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->finalize = finalize; + + widget_class->snapshot = snapshot; + widget_class->unroot = unroot; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::chart_ui); +} + +void chart_init(Chart* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->data->draw_bar_border = true; + self->data->fill_bars = true; + self->data->is_visible = true; + self->data->x_axis_height = 0; + self->data->n_x_decimals = 1; + self->data->n_y_decimals = 1; + self->data->line_width = 2.0; + self->data->margin = 0.02; + + self->data->x_min = 0.0; + self->data->y_min = 0.0; + self->data->x_max = 1.0; + self->data->y_max = 1.0; + + self->data->background_color = GdkRGBA{0.0F, 0.0F, 0.0F, 1.0F}; + self->data->color = GdkRGBA{1.0F, 1.0F, 1.0F, 1.0F}; + self->data->color_axis_labels = GdkRGBA{1.0F, 1.0F, 1.0F, 1.0F}; + self->data->gradient_color = GdkRGBA{1.0F, 1.0F, 1.0F, 1.0F}; + + self->data->chart_type = ChartType::bar; + self->data->chart_scale = ChartScale::logarithmic; + + self->controller_motion = gtk_event_controller_motion_new(); + + g_signal_connect(self->controller_motion, "motion", G_CALLBACK(on_pointer_motion), self); + + g_signal_connect(GTK_WIDGET(self), "hide", + G_CALLBACK(+[](GtkWidget* widget, Chart* self) { self->data->is_visible = false; }), self); + + g_signal_connect(GTK_WIDGET(self), "show", + G_CALLBACK(+[](GtkWidget* widget, Chart* self) { self->data->is_visible = true; }), self); + + gtk_widget_add_controller(GTK_WIDGET(self), self->controller_motion); +} + +auto create() -> Chart* { + return static_cast(g_object_new(EE_TYPE_CHART, nullptr)); +} + +} // namespace ui::chart diff --git a/src/client_info_holder.cpp b/src/client_info_holder.cpp new file mode 100644 index 0000000..d6f6e0d --- /dev/null +++ b/src/client_info_holder.cpp @@ -0,0 +1,121 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "client_info_holder.hpp" + +namespace ui::holders { + +enum { PROP_0, PROP_ID, PROP_NAME, PROP_API, PROP_ACCESS }; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ClientInfoHolder, client_info_holder, G_TYPE_OBJECT); + +void client_info_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec) { + auto* self = EE_CLIENT_INFO_HOLDER(object); + + switch (prop_id) { + case PROP_ID: + self->info->id = g_value_get_uint(value); + break; + case PROP_NAME: + self->info->name = g_value_get_string(value); + break; + case PROP_API: + self->info->api = g_value_get_string(value); + break; + case PROP_ACCESS: + self->info->access = g_value_get_string(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +void client_info_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec) { + auto* self = EE_CLIENT_INFO_HOLDER(object); + + switch (prop_id) { + case PROP_ID: + g_value_set_uint(value, self->info->id); + break; + case PROP_NAME: + g_value_set_string(value, self->info->name.c_str()); + break; + case PROP_API: + g_value_set_string(value, self->info->api.c_str()); + break; + case PROP_ACCESS: + g_value_set_string(value, self->info->access.c_str()); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +void client_info_holder_finalize(GObject* object) { + auto* self = EE_CLIENT_INFO_HOLDER(object); + + self->info_updated.clear(); + + util::debug(util::to_string(self->info->id) + ", " + self->info->name + " finalized"); + + delete self->info; + + G_OBJECT_CLASS(client_info_holder_parent_class)->finalize(object); +} + +void client_info_holder_class_init(ClientInfoHolderClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = client_info_holder_finalize; + object_class->set_property = client_info_set_property; + object_class->get_property = client_info_get_property; + + g_object_class_install_property( + object_class, PROP_ID, + g_param_spec_uint("id", "Id", "Id", G_MININT, G_MAXUINT, SPA_ID_INVALID, G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, PROP_NAME, + g_param_spec_string("name", "Name", "Name", nullptr, G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, PROP_API, + g_param_spec_string("api", "API", "API", nullptr, G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, PROP_ACCESS, + g_param_spec_string("access", "Access", "Access", nullptr, G_PARAM_READWRITE)); +} + +void client_info_holder_init(ClientInfoHolder* self) { + self->info = new ClientInfo(); +} + +auto create(const ClientInfo& info) -> ClientInfoHolder* { + auto* holder = static_cast(g_object_new(EE_TYPE_CLIENT_INFO_HOLDER, nullptr)); + + holder->info->id = info.id; + holder->info->name = info.name; + holder->info->api = info.api; + holder->info->access = info.access; + + return holder; +} + +} // namespace ui::holders diff --git a/src/compressor.cpp b/src/compressor.cpp new file mode 100644 index 0000000..e4a5062 --- /dev/null +++ b/src/compressor.cpp @@ -0,0 +1,241 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "compressor.hpp" + +Compressor::Compressor(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, + tags::plugin_name::compressor, + tags::plugin_package::lsp, + schema, + schema_path, + pipe_manager, + true) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/sc_compressor_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/sc_compressor_stereo is not installed"); + } + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-type", + G_CALLBACK(+[](GSettings* settings, const char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-input-device", + G_CALLBACK(+[](GSettings* settings, const char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + lv2_wrapper->bind_key_enum<"cm", "mode">(settings); + + lv2_wrapper->bind_key_enum<"sct", "sidechain-type">(settings); + + lv2_wrapper->bind_key_enum<"scm", "sidechain-mode">(settings); + + lv2_wrapper->bind_key_enum<"scs", "sidechain-source">(settings); + + lv2_wrapper->bind_key_enum<"sscs", "stereo-split-source">(settings); + + lv2_wrapper->bind_key_enum<"shpm", "hpf-mode">(settings); + + lv2_wrapper->bind_key_enum<"slpm", "lpf-mode">(settings); + + lv2_wrapper->bind_key_bool<"ssplit", "stereo-split">(settings); + + lv2_wrapper->bind_key_bool<"scl", "sidechain-listen">(settings); + + lv2_wrapper->bind_key_double<"at", "attack">(settings); + + lv2_wrapper->bind_key_double<"rt", "release">(settings); + + lv2_wrapper->bind_key_double<"cr", "ratio">(settings); + + lv2_wrapper->bind_key_double<"scr", "sidechain-reactivity">(settings); + + lv2_wrapper->bind_key_double<"sla", "sidechain-lookahead">(settings); + + lv2_wrapper->bind_key_double<"shpf", "hpf-frequency">(settings); + + lv2_wrapper->bind_key_double<"slpf", "lpf-frequency">(settings); + + lv2_wrapper->bind_key_double_db<"bth", "boost-threshold">(settings); + + lv2_wrapper->bind_key_double_db<"bsa", "boost-amount">(settings); + + lv2_wrapper->bind_key_double_db<"al", "threshold">(settings); + + lv2_wrapper->bind_key_double_db<"kn", "knee">(settings); + + lv2_wrapper->bind_key_double_db<"mk", "makeup">(settings); + + lv2_wrapper->bind_key_double_db<"scp", "sidechain-preamp">(settings); + + // The following controls can assume -inf + lv2_wrapper->bind_key_double_db<"rrl", "release-threshold", false>(settings); + + lv2_wrapper->bind_key_double_db<"cdr", "dry", false>(settings); + + lv2_wrapper->bind_key_double_db<"cwt", "wet", false>(settings); + + setup_input_output_gain(); +} + +Compressor::~Compressor() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Compressor::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Compressor::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out, probe_left, probe_right); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + reduction_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("rlm_l") + lv2_wrapper->get_control_port_value("rlm_r")); + + sidechain_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("slm_l") + lv2_wrapper->get_control_port_value("slm_r")); + + curve_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("clm_l") + lv2_wrapper->get_control_port_value("clm_r")); + + envelope_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("elm_l") + lv2_wrapper->get_control_port_value("elm_r")); + + reduction.emit(reduction_port_value); + sidechain.emit(sidechain_port_value); + curve.emit(curve_port_value); + envelope.emit(envelope_port_value); + + notify(); + } + } +} + +void Compressor::update_sidechain_links(const std::string& key) { + if (util::gsettings_get_string(settings, "sidechain-type") != "External") { + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + return; + } + + const auto device_name = util::gsettings_get_string(settings, "sidechain-input-device"); + + NodeInfo input_device = pm->ee_source_node; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == device_name) { + input_device = node; + + break; + } + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + for (const auto& link : pm->link_nodes(input_device.id, get_node_id(), true)) { + list_proxies.push_back(link); + } +} + +void Compressor::update_probe_links() { + update_sidechain_links(""); +} + +auto Compressor::get_latency_seconds() -> float { + return this->latency_value; +} diff --git a/src/compressor_preset.cpp b/src/compressor_preset.cpp new file mode 100644 index 0000000..1a1d524 --- /dev/null +++ b/src/compressor_preset.cpp @@ -0,0 +1,144 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "compressor_preset.hpp" + +CompressorPreset::CompressorPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::compressor::id, + tags::schema::compressor::input_path, + tags::schema::compressor::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::compressor).append("#").append(util::to_string(index)); +} + +void CompressorPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["dry"] = g_settings_get_double(settings, "dry"); + + json[section][instance_name]["wet"] = g_settings_get_double(settings, "wet"); + + json[section][instance_name]["mode"] = util::gsettings_get_string(settings, "mode"); + + json[section][instance_name]["attack"] = g_settings_get_double(settings, "attack"); + + json[section][instance_name]["release"] = g_settings_get_double(settings, "release"); + + json[section][instance_name]["release-threshold"] = g_settings_get_double(settings, "release-threshold"); + + json[section][instance_name]["threshold"] = g_settings_get_double(settings, "threshold"); + + json[section][instance_name]["ratio"] = g_settings_get_double(settings, "ratio"); + + json[section][instance_name]["knee"] = g_settings_get_double(settings, "knee"); + + json[section][instance_name]["makeup"] = g_settings_get_double(settings, "makeup"); + + json[section][instance_name]["boost-threshold"] = g_settings_get_double(settings, "boost-threshold"); + + json[section][instance_name]["boost-amount"] = g_settings_get_double(settings, "boost-amount"); + + json[section][instance_name]["stereo-split"] = g_settings_get_boolean(settings, "stereo-split") != 0; + + json[section][instance_name]["sidechain"]["type"] = util::gsettings_get_string(settings, "sidechain-type"); + + json[section][instance_name]["sidechain"]["mode"] = util::gsettings_get_string(settings, "sidechain-mode"); + + json[section][instance_name]["sidechain"]["source"] = util::gsettings_get_string(settings, "sidechain-source"); + + json[section][instance_name]["sidechain"]["stereo-split-source"] = + util::gsettings_get_string(settings, "stereo-split-source"); + + json[section][instance_name]["sidechain"]["preamp"] = g_settings_get_double(settings, "sidechain-preamp"); + + json[section][instance_name]["sidechain"]["reactivity"] = g_settings_get_double(settings, "sidechain-reactivity"); + + json[section][instance_name]["sidechain"]["lookahead"] = g_settings_get_double(settings, "sidechain-lookahead"); + + json[section][instance_name]["hpf-mode"] = util::gsettings_get_string(settings, "hpf-mode"); + + json[section][instance_name]["hpf-frequency"] = g_settings_get_double(settings, "hpf-frequency"); + + json[section][instance_name]["lpf-mode"] = util::gsettings_get_string(settings, "lpf-mode"); + + json[section][instance_name]["lpf-frequency"] = g_settings_get_double(settings, "lpf-frequency"); +} + +void CompressorPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "dry", "dry"); + + update_key(json.at(section).at(instance_name), settings, "wet", "wet"); + + update_key(json.at(section).at(instance_name), settings, "mode", "mode"); + + update_key(json.at(section).at(instance_name), settings, "attack", "attack"); + + update_key(json.at(section).at(instance_name), settings, "release", "release"); + + update_key(json.at(section).at(instance_name), settings, "release-threshold", "release-threshold"); + + update_key(json.at(section).at(instance_name), settings, "threshold", "threshold"); + + update_key(json.at(section).at(instance_name), settings, "ratio", "ratio"); + + update_key(json.at(section).at(instance_name), settings, "knee", "knee"); + + update_key(json.at(section).at(instance_name), settings, "makeup", "makeup"); + + update_key(json.at(section).at(instance_name), settings, "boost-threshold", "boost-threshold"); + + update_key(json.at(section).at(instance_name), settings, "boost-amount", "boost-amount"); + + update_key(json.at(section).at(instance_name), settings, "stereo-split", "stereo-split"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-type", "type"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-mode", "mode"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "stereo-split-source", + "stereo-split-source"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-source", "source"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-preamp", "preamp"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-reactivity", + "reactivity"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-lookahead", "lookahead"); + + update_key(json.at(section).at(instance_name), settings, "hpf-mode", "hpf-mode"); + + update_key(json.at(section).at(instance_name), settings, "hpf-frequency", "hpf-frequency"); + + update_key(json.at(section).at(instance_name), settings, "lpf-mode", "lpf-mode"); + + update_key(json.at(section).at(instance_name), settings, "lpf-frequency", "lpf-frequency"); +} diff --git a/src/compressor_ui.cpp b/src/compressor_ui.cpp new file mode 100644 index 0000000..20c2caa --- /dev/null +++ b/src/compressor_ui.cpp @@ -0,0 +1,483 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "compressor_ui.hpp" + +namespace ui::compressor_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr compressor; + + std::vector connections; + + std::vector gconnections; +}; + +struct _CompressorBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkLabel *gain_label, *sidechain_label, *curve_label, *envelope_label; + + GtkSpinButton *attack, *release, *release_threshold, *threshold, *knee, *ratio, *makeup, *dry, *wet, *boost_threshold, + *boost_amount, *preamp, *reactivity, *lookahead, *hpf_freq, *lpf_freq; + + GtkToggleButton *listen, *show_native_ui; + + GtkCheckButton* stereo_split; + + GtkDropDown *compression_mode, *sidechain_type, *sidechain_mode, *sidechain_source, *stereo_split_source, *lpf_mode, + *hpf_mode, *dropdown_input_devices; + + GListStore* input_devices_model; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(CompressorBox, compressor_box, GTK_TYPE_BOX) + +void on_reset(CompressorBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(CompressorBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->compressor->show_native_ui(); + } else { + self->data->compressor->close_native_ui(); + } +} + +auto set_device_sensitive(CompressorBox* self, const guint selected_id) -> gboolean { + // Sensitive on External Device selected + return (selected_id == 2U) ? 1 : 0; +} + +auto set_boost_threshold_sensitive(CompressorBox* self, const guint selected_id) -> gboolean { + switch (selected_id) { + case 0U: // Downward + case 2U: // Boosting + return 0; + + default: + break; + } + + return 1; +} + +auto set_boost_amount_sensitive(CompressorBox* self, const guint selected_id) -> gboolean { + switch (selected_id) { + case 0U: // Downward + case 1U: // Upward + return 0; + + default: + break; + } + + return 1; +} + +void setup_dropdown_input_device(CompressorBox* self) { + auto* selection = gtk_single_selection_new(G_LIST_MODEL(self->input_devices_model)); + + g_signal_connect(self->dropdown_input_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, CompressorBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->settings, "sidechain-input-device", holder->info->name.c_str()); + } + }), + self); + + gtk_drop_down_set_model(self->dropdown_input_devices, G_LIST_MODEL(self->input_devices_model)); + + g_object_unref(selection); +} + +void setup(CompressorBox* self, + std::shared_ptr compressor, + const std::string& schema_path, + PipeManager* pm) { + self->data->compressor = compressor; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::compressor::id, schema_path.c_str()); + + compressor->set_post_messages(true); + + setup_dropdown_input_device(self); + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == tags::pipewire::ee_sink_name || node.name == tags::pipewire::ee_source_name) { + continue; + } + + if (node.media_class == tags::pipewire::media_class::source || + node.media_class == tags::pipewire::media_class::virtual_source || + node.media_role == tags::pipewire::media_role::dsp) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + } + } + + self->data->connections.push_back(compressor->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(compressor->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(compressor->reduction.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->gain_label)) { + return; + } + + gtk_label_set_text(self->gain_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(compressor->envelope.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->envelope_label)) { + return; + } + + gtk_label_set_text(self->envelope_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(compressor->sidechain.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->sidechain_label)) { + return; + } + + gtk_label_set_text(self->sidechain_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(compressor->curve.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->curve_label)) { + return; + } + + gtk_label_set_text(self->curve_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(pm->source_added.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->source_removed.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->input_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->compressor->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "dry", gtk_spin_button_get_adjustment(self->dry), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet", gtk_spin_button_get_adjustment(self->wet), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "attack", gtk_spin_button_get_adjustment(self->attack), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "knee", gtk_spin_button_get_adjustment(self->knee), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "makeup", gtk_spin_button_get_adjustment(self->makeup), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "ratio", gtk_spin_button_get_adjustment(self->ratio), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "release", gtk_spin_button_get_adjustment(self->release), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "threshold", gtk_spin_button_get_adjustment(self->threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-preamp", gtk_spin_button_get_adjustment(self->preamp), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-reactivity", gtk_spin_button_get_adjustment(self->reactivity), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-lookahead", gtk_spin_button_get_adjustment(self->lookahead), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "release-threshold", gtk_spin_button_get_adjustment(self->release_threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "boost-threshold", gtk_spin_button_get_adjustment(self->boost_threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "boost-amount", gtk_spin_button_get_adjustment(self->boost_amount), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "hpf-frequency", gtk_spin_button_get_adjustment(self->hpf_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "lpf-frequency", gtk_spin_button_get_adjustment(self->lpf_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-listen", self->listen, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "mode", self->compression_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-type", self->sidechain_type); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-mode", self->sidechain_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-source", self->sidechain_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "stereo-split-source", self->stereo_split_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "hpf-mode", self->hpf_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "lpf-mode", self->lpf_mode); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); + + // bind source dropdowns sensitive property to split-stereo gsettings boolean + + g_settings_bind(self->settings, "stereo-split", self->sidechain_source, "sensitive", + static_cast(G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN)); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split_source, "sensitive", G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_COMPRESSOR_BOX(object); + + self->data->compressor->set_post_messages(false); + + self->data->compressor->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(compressor_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_COMPRESSOR_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(compressor_box_parent_class)->finalize(object); +} + +void compressor_box_class_init(CompressorBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::compressor_ui); + + gtk_widget_class_bind_template_child(widget_class, CompressorBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, CompressorBox, gain_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, sidechain_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, curve_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, envelope_label); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, attack); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, release); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, release_threshold); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, threshold); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, knee); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, ratio); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, makeup); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, dry); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, wet); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, boost_threshold); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, boost_amount); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, preamp); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, reactivity); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, lookahead); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, hpf_freq); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, lpf_freq); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, compression_mode); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, sidechain_type); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, sidechain_mode); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, sidechain_source); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, stereo_split_source); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, stereo_split); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, lpf_mode); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, hpf_mode); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, listen); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, dropdown_input_devices); + gtk_widget_class_bind_template_child(widget_class, CompressorBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); + gtk_widget_class_bind_template_callback(widget_class, set_device_sensitive); + gtk_widget_class_bind_template_callback(widget_class, set_boost_threshold_sensitive); + gtk_widget_class_bind_template_callback(widget_class, set_boost_amount_sensitive); +} + +void compressor_box_init(CompressorBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + + prepare_spinbuttons<"dB">(self->threshold, self->boost_threshold, self->boost_amount, self->knee, self->makeup, + self->preamp); + + prepare_spinbuttons<"Hz">(self->hpf_freq, self->lpf_freq); + + prepare_spinbuttons<"ms">(self->attack, self->release, self->lookahead, self->reactivity); + + prepare_spinbuttons<"">(self->ratio); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->release_threshold, self->dry, self->wet); +} + +auto create() -> CompressorBox* { + return static_cast(g_object_new(EE_TYPE_COMPRESSOR_BOX, nullptr)); +} + +} // namespace ui::compressor_box diff --git a/src/convolver.cpp b/src/convolver.cpp new file mode 100644 index 0000000..c103709 --- /dev/null +++ b/src/convolver.cpp @@ -0,0 +1,485 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "convolver.hpp" + +namespace { + +constexpr auto CONVPROC_SCHEDULER_PRIORITY = 0; + +constexpr auto CONVPROC_SCHEDULER_CLASS = SCHED_FIFO; + +} // namespace + +Convolver::Convolver(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::convolver, tags::plugin_package::zita, schema, schema_path, pipe_manager), + do_autogain(g_settings_get_boolean(settings, "autogain") != 0), + ir_width(g_settings_get_int(settings, "ir-width")) { + gconnections.push_back(g_signal_connect(settings, "changed::ir-width", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->ir_width = g_settings_get_int(self->settings, key); + + std::scoped_lock lock(self->data_mutex); + + if (self->kernel_is_initialized) { + self->kernel_L = self->original_kernel_L; + self->kernel_R = self->original_kernel_R; + + self->set_kernel_stereo_width(); + self->apply_kernel_autogain(); + } + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::kernel-path", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->prepare_kernel(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::autogain", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->do_autogain = g_settings_get_boolean(settings, key) != 0; + + self->prepare_kernel(); + }), + this)); + + setup_input_output_gain(); +} + +Convolver::~Convolver() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + for (auto& t : mythreads) { + t.join(); + } + + mythreads.clear(); + + std::scoped_lock lock(data_mutex); + + ready = false; + + if (conv != nullptr) { + conv->stop_process(); + + conv->cleanup(); + + delete conv; + } + + util::debug(log_tag + name + " destroyed"); +} + +void Convolver::setup() { + ready = false; + + /* + As zita uses fftw we have to be careful when reinitializing it. The thread that creates the fftw plan has to be the + same that destroys it. Otherwise segmentation faults can happen. As we do not want to do this initializing in the + plugin realtime thread we send it to the main thread through g_idle_add().connect_once + */ + + util::idle_add([&, this] { + if (ready) { + return; + } + + blocksize = n_samples; + + n_samples_is_power_of_2 = (n_samples & (n_samples - 1U)) == 0U && n_samples != 0U; + + if (!n_samples_is_power_of_2) { + while ((blocksize & (blocksize - 1)) != 0 && blocksize > 2) { + blocksize--; + } + } + + data_L.resize(0U); + data_R.resize(0U); + + deque_out_L.resize(0U); + deque_out_R.resize(0U); + + notify_latency = true; + + latency_n_frames = 0U; + + read_kernel_file(); + + if (kernel_is_initialized) { + kernel_L = original_kernel_L; + kernel_R = original_kernel_R; + + set_kernel_stereo_width(); + apply_kernel_autogain(); + + setup_zita(); + } + + std::scoped_lock lock(data_mutex); + + ready = kernel_is_initialized && zita_ready; + }); +} + +void Convolver::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (bypass || !ready) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + if (n_samples_is_power_of_2) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + do_convolution(left_out, right_out); + } else { + for (size_t j = 0U; j < left_in.size(); j++) { + data_L.push_back(left_in[j]); + data_R.push_back(right_in[j]); + + if (data_L.size() == blocksize) { + do_convolution(data_L, data_R); + + for (const auto& v : data_L) { + deque_out_L.push_back(v); + } + + for (const auto& v : data_R) { + deque_out_R.push_back(v); + } + + data_L.resize(0U); + data_R.resize(0U); + } + } + + // copying the processed samples to the output buffers + + if (deque_out_L.size() >= left_out.size()) { + for (float& v : left_out) { + v = deque_out_L.front(); + + deque_out_L.pop_front(); + } + + for (float& v : right_out) { + v = deque_out_R.front(); + + deque_out_R.pop_front(); + } + } else { + const uint offset = 2U * (left_out.size() - deque_out_L.size()); + + if (offset != latency_n_frames) { + latency_n_frames = offset; + + notify_latency = true; + } + + for (uint n = 0U; !deque_out_L.empty() && n < left_out.size(); n++) { + if (n < offset) { + left_out[n] = 0.0F; + right_out[n] = 0.0F; + } else { + left_out[n] = deque_out_L.front(); + right_out[n] = deque_out_R.front(); + + deque_out_R.pop_front(); + deque_out_L.pop_front(); + } + } + } + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (notify_latency) { + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this] { latency.emit(); }); + + update_filter_params(); + + notify_latency = false; + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +void Convolver::read_kernel_file() { + kernel_is_initialized = false; + + const auto path = util::gsettings_get_string(settings, "kernel-path"); + + if (path.empty()) { + util::warning(log_tag + name + ": irs file path is null. Entering passthrough mode..."); + + return; + } + + // SndfileHandle might have issues with std::string, so we provide cstring + + SndfileHandle file = SndfileHandle(path.c_str()); + + if (file.channels() == 0 || file.frames() == 0) { + util::warning(log_tag + name + ": irs file does not exists or it is empty: " + path); + util::warning(log_tag + name + ": Entering passthrough mode..."); + + return; + } + + util::debug(log_tag + name + ": irs file: " + path); + util::debug(log_tag + name + ": irs rate: " + util::to_string(file.samplerate()) + " Hz"); + util::debug(log_tag + name + ": irs channels: " + util::to_string(file.channels())); + util::debug(log_tag + name + ": irs frames: " + util::to_string(file.frames())); + + // for now only stereo irs files are supported + + if (file.channels() != 2) { + util::warning(log_tag + name + " Only stereo impulse responses are supported."); + util::warning(log_tag + name + " The impulse file was not loaded!"); + + return; + } + + std::vector buffer(file.frames() * file.channels()); + std::vector buffer_L(file.frames()); + std::vector buffer_R(file.frames()); + + file.readf(buffer.data(), file.frames()); + + for (size_t n = 0U; n < buffer_L.size(); n++) { + buffer_L[n] = buffer[2U * n]; + buffer_R[n] = buffer[2U * n + 1U]; + } + + if (file.samplerate() != static_cast(rate)) { + util::debug(log_tag + name + " resampling the kernel to " + util::to_string(rate)); + + auto resampler = std::make_unique(file.samplerate(), rate); + + original_kernel_L = resampler->process(buffer_L, true); + + resampler = std::make_unique(file.samplerate(), rate); + + original_kernel_R = resampler->process(buffer_R, true); + } else { + original_kernel_L = buffer_L; + original_kernel_R = buffer_R; + } + + kernel_is_initialized = true; + + util::debug(log_tag + name + ": kernel initialized"); +} + +void Convolver::apply_kernel_autogain() { + if (!do_autogain) { + return; + } + + if (kernel_L.empty() || kernel_R.empty()) { + return; + } + + const float abs_peak_L = + std::ranges::max(kernel_L, [](const auto& a, const auto& b) { return (std::fabs(a) < std::fabs(b)); }); + const float abs_peak_R = + std::ranges::max(kernel_R, [](const auto& a, const auto& b) { return (std::fabs(a) < std::fabs(b)); }); + + const float peak = (abs_peak_L > abs_peak_R) ? abs_peak_L : abs_peak_R; + + // normalize + + std::ranges::for_each(kernel_L, [&](auto& v) { v /= peak; }); + std::ranges::for_each(kernel_R, [&](auto& v) { v /= peak; }); + + // find average power + + float power_L = 0.0F; + float power_R = 0.0F; + + std::ranges::for_each(kernel_L, [&](const auto& v) { power_L += v * v; }); + std::ranges::for_each(kernel_R, [&](const auto& v) { power_R += v * v; }); + + const float power = std::max(power_L, power_R); + + const float autogain = std::min(1.0F, 1.0F / std::sqrt(power)); + + util::debug(log_tag + "autogain factor: " + util::to_string(autogain)); + + std::ranges::for_each(kernel_L, [&](auto& v) { v *= autogain; }); + std::ranges::for_each(kernel_R, [&](auto& v) { v *= autogain; }); +} + +/* + Mid-Side based Stereo width effect + taken from https://github.com/tomszilagyi/ir.lv2/blob/automatable/ir.cc +*/ +void Convolver::set_kernel_stereo_width() { + const float w = static_cast(ir_width) * 0.01F; + const float x = (1.0F - w) / (1.0F + w); // M-S coeff.; L_out = L + x*R; R_out = R + x*L + + for (uint i = 0U; i < original_kernel_L.size(); i++) { + const auto L = original_kernel_L[i]; + const auto R = original_kernel_R[i]; + + kernel_L[i] = L + x * R; + kernel_R[i] = R + x * L; + } +} + +void Convolver::setup_zita() { + zita_ready = false; + + if (n_samples == 0U || !kernel_is_initialized) { + return; + } + + const uint max_convolution_size = kernel_L.size(); + const uint buffer_size = get_zita_buffer_size(); + + if (conv != nullptr) { + conv->stop_process(); + + conv->cleanup(); + + delete conv; + } + + conv = new Convproc(); + + conv->set_options(0); + + int ret = conv->configure(2, 2, max_convolution_size, buffer_size, buffer_size, buffer_size, 0.0F /*density*/); + + if (ret != 0) { + util::warning(log_tag + name + " can't initialise zita-convolver engine: " + util::to_string(ret, "")); + + return; + } + + ret = conv->impdata_create(0, 0, 1, kernel_L.data(), 0, static_cast(kernel_L.size())); + + if (ret != 0) { + util::warning(log_tag + name + " left impdata_create failed: " + util::to_string(ret)); + + return; + } + + ret = conv->impdata_create(1, 1, 1, kernel_R.data(), 0, static_cast(kernel_R.size())); + + if (ret != 0) { + util::warning(log_tag + name + " right impdata_create failed: " + util::to_string(ret, "")); + + return; + } + + ret = conv->start_process(CONVPROC_SCHEDULER_PRIORITY, CONVPROC_SCHEDULER_CLASS); + + if (ret != 0) { + util::warning(log_tag + name + " start_process failed: " + util::to_string(ret, "")); + + conv->stop_process(); + conv->cleanup(); + + return; + } + + zita_ready = true; + + util::debug(log_tag + name + ": zita is ready"); +} + +auto Convolver::get_zita_buffer_size() -> uint { + if (n_samples_is_power_of_2) { + return n_samples; + } + + return blocksize; +} + +auto Convolver::get_latency_seconds() -> float { + return this->latency_value; +} + +void Convolver::prepare_kernel() { + if (n_samples == 0U || rate == 0U) { + return; + } + + data_mutex.lock(); + + ready = false; + + data_mutex.unlock(); + + read_kernel_file(); + + if (kernel_is_initialized) { + kernel_L = original_kernel_L; + kernel_R = original_kernel_R; + + set_kernel_stereo_width(); + apply_kernel_autogain(); + + setup_zita(); + + data_mutex.lock(); + + ready = kernel_is_initialized && zita_ready; + + data_mutex.unlock(); + } +} diff --git a/src/convolver_menu_combine.cpp b/src/convolver_menu_combine.cpp new file mode 100644 index 0000000..2ee5cdc --- /dev/null +++ b/src/convolver_menu_combine.cpp @@ -0,0 +1,283 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "convolver_menu_combine.hpp" + +namespace ui::convolver_menu_combine { + +using namespace std::string_literals; + +auto constexpr irs_ext = ".irs"; + +std::filesystem::path irs_dir = g_get_user_config_dir() + "/easyeffects/irs"s; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + std::vector mythreads; +}; + +struct _ConvolverMenuCombine { + GtkBox parent_instance; + + GtkDropDown *dropdown_kernel_1, *dropdown_kernel_2; + + GtkEntry* output_kernel_name; + + GtkSpinner* spinner; + + GtkStringList *string_list_1, *string_list_2; + + GSettings* app_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ConvolverMenuCombine, convolver_menu_combine, GTK_TYPE_POPOVER) + +void append_to_string_list(ConvolverMenuCombine* self, const std::string& irs_filename) { + ui::append_to_string_list(self->string_list_1, irs_filename); + ui::append_to_string_list(self->string_list_2, irs_filename); +} + +void remove_from_string_list(ConvolverMenuCombine* self, const std::string& irs_filename) { + ui::remove_from_string_list(self->string_list_1, irs_filename); + ui::remove_from_string_list(self->string_list_2, irs_filename); +} + +void direct_conv(const std::vector& a, const std::vector& b, std::vector& c) { + std::vector indices(c.size()); + + std::iota(indices.begin(), indices.end(), 0U); + + auto each = [&](const int n) { + c[n] = 0.0F; + + // Static cast to avoid gcc signedness warning. + + const int a_size = static_cast(a.size()); + const int b_size = static_cast(b.size()); + + for (int m = 0; m < b_size; m++) { + if (const auto z = n - m; z >= 0 && z < a_size - 1) { + c[n] += b[m] * a[z]; + } + } + }; +#if defined(ENABLE_LIBCPP_WORKAROUNDS) && (_LIBCPP_VERSION < 170000 || defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL)) + std::for_each(indices.begin(), indices.end(), each); +#else + std::for_each(std::execution::par_unseq, indices.begin(), indices.end(), each); +#endif +} + +void combine_kernels(ConvolverMenuCombine* self, + const std::string& kernel_1_name, + const std::string& kernel_2_name, + const std::string& output_file_name) { + if (output_file_name.empty()) { + // The method combine_kernels run in a secondary thread. But the widgets have to be used in the main thread. + + util::idle_add([=] { gtk_spinner_stop(self->spinner); }); + + return; + } + + auto [rate1, kernel_1_L, kernel_1_R] = ui::convolver::read_kernel(irs_dir, irs_ext, kernel_1_name); + auto [rate2, kernel_2_L, kernel_2_R] = ui::convolver::read_kernel(irs_dir, irs_ext, kernel_2_name); + + if (rate1 == 0 || rate2 == 0) { + util::idle_add([=] { gtk_spinner_stop(self->spinner); }); + + return; + } + + if (rate1 > rate2) { + util::debug("resampling the kernel " + kernel_2_name + " to " + util::to_string(rate1) + " Hz"); + + auto resampler = std::make_unique(rate2, rate1); + + kernel_2_L = resampler->process(kernel_2_L, true); + + resampler = std::make_unique(rate2, rate1); + + kernel_2_R = resampler->process(kernel_2_R, true); + } else if (rate2 > rate1) { + util::debug("resampling the kernel " + kernel_1_name + " to " + util::to_string(rate2) + " Hz"); + + auto resampler = std::make_unique(rate1, rate2); + + kernel_1_L = resampler->process(kernel_1_L, true); + + resampler = std::make_unique(rate1, rate2); + + kernel_1_R = resampler->process(kernel_1_R, true); + } + + std::vector kernel_L(kernel_1_L.size() + kernel_2_L.size() - 1U); + std::vector kernel_R(kernel_1_R.size() + kernel_2_R.size() - 1U); + + // As the convolution is commutative we change the order based on which will run faster. + + if (kernel_1_L.size() > kernel_2_L.size()) { + direct_conv(kernel_1_L, kernel_2_L, kernel_L); + direct_conv(kernel_1_R, kernel_2_R, kernel_R); + } else { + direct_conv(kernel_2_L, kernel_1_L, kernel_L); + direct_conv(kernel_2_R, kernel_1_R, kernel_R); + } + + std::vector buffer(kernel_L.size() * 2U); // 2 channels interleaved + + for (size_t n = 0U; n < kernel_L.size(); n++) { + buffer[2U * n] = kernel_L[n]; + buffer[2U * n + 1U] = kernel_R[n]; + } + + const auto output_file_path = irs_dir / std::filesystem::path{output_file_name + irs_ext}; + + auto mode = SFM_WRITE; + auto format = SF_FORMAT_WAV | SF_FORMAT_PCM_32; + auto n_channels = 2; + auto rate = (rate1 > rate2) ? rate1 : rate2; + + auto sndfile = SndfileHandle(output_file_path.string(), mode, format, n_channels, rate); + + sndfile.writef(buffer.data(), static_cast(kernel_L.size())); + + util::debug("combined kernel saved: " + output_file_path.string()); + + util::idle_add([=] { gtk_spinner_stop(self->spinner); }); +} + +void on_combine_kernels(ConvolverMenuCombine* self, GtkButton* btn) { + if (g_list_model_get_n_items(G_LIST_MODEL(self->string_list_1)) == 0 || + g_list_model_get_n_items(G_LIST_MODEL(self->string_list_2)) == 0) { + return; + } + + auto* dropdown_1_selection = gtk_drop_down_get_selected_item(self->dropdown_kernel_1); + auto* dropdown_2_selection = gtk_drop_down_get_selected_item(self->dropdown_kernel_2); + + if (dropdown_1_selection == nullptr || dropdown_2_selection == nullptr) { + return; + } + + gtk_spinner_start(self->spinner); + + const auto* const kernel_1_name = gtk_string_object_get_string(GTK_STRING_OBJECT(dropdown_1_selection)); + + const auto* const kernel_2_name = gtk_string_object_get_string(GTK_STRING_OBJECT(dropdown_2_selection)); + + std::string output_name = gtk_editable_get_text(GTK_EDITABLE(self->output_kernel_name)); + + if (output_name.empty() || output_name.find_first_of("\\/") != std::string::npos) { + util::debug(" combined IR filename is empty or has illegal characters."); + + gtk_widget_add_css_class(GTK_WIDGET(self->output_kernel_name), "error"); + + gtk_widget_grab_focus(GTK_WIDGET(self->output_kernel_name)); + + gtk_spinner_stop(self->spinner); + } else { + // Truncate filename if longer than 100 characters + + if (output_name.size() > 100U) { + output_name.resize(100U); + } + + gtk_widget_remove_css_class(GTK_WIDGET(self->output_kernel_name), "error"); + + /* + The current code convolving the impulse responses is doing direct convolution. It can be very slow depending on + the size of each kernel. So we do not want to do it in the main thread. + */ + + self->data->mythreads.emplace_back( // Using emplace_back here makes sense + [=]() { combine_kernels(self, kernel_1_name, kernel_2_name, output_name); }); + } +} + +void dispose(GObject* object) { + auto* self = EE_CONVOLVER_MENU_COMBINE(object); + + for (auto& t : self->data->mythreads) { + t.join(); + } + + self->data->mythreads.clear(); + + g_object_unref(self->app_settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(convolver_menu_combine_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_CONVOLVER_MENU_COMBINE(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(convolver_menu_combine_parent_class)->finalize(object); +} + +void convolver_menu_combine_class_init(ConvolverMenuCombineClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::convolver_menu_combine_ui); + + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuCombine, string_list_1); + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuCombine, string_list_2); + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuCombine, dropdown_kernel_1); + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuCombine, dropdown_kernel_2); + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuCombine, output_kernel_name); + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuCombine, spinner); + + gtk_widget_class_bind_template_callback(widget_class, on_combine_kernels); +} + +void convolver_menu_combine_init(ConvolverMenuCombine* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + for (const auto& name : util::get_files_name(irs_dir, irs_ext)) { + gtk_string_list_append(self->string_list_1, name.c_str()); + gtk_string_list_append(self->string_list_2, name.c_str()); + } + + self->app_settings = g_settings_new(tags::app::id); + + g_settings_bind(self->app_settings, "autohide-popovers", self, "autohide", G_SETTINGS_BIND_DEFAULT); +} + +auto create() -> ConvolverMenuCombine* { + return static_cast(g_object_new(EE_TYPE_CONVOLVER_MENU_COMBINE, nullptr)); +} + +} // namespace ui::convolver_menu_combine diff --git a/src/convolver_menu_impulses.cpp b/src/convolver_menu_impulses.cpp new file mode 100644 index 0000000..0f2efa2 --- /dev/null +++ b/src/convolver_menu_impulses.cpp @@ -0,0 +1,369 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "convolver_menu_impulses.hpp" +#include "config.h" + +namespace ui::convolver_menu_impulses { + +using namespace std::string_literals; + +enum class ImpulseImportState { success, no_regular_file, no_frame, no_stereo }; + +auto constexpr irs_ext = ".irs"; + +std::filesystem::path irs_dir = g_get_user_config_dir() + "/easyeffects/irs"s; + +struct _ConvolverMenuImpulses { + GtkBox parent_instance; + + GtkScrolledWindow* scrolled_window; + + GtkListView* listview; + + GtkSpinButton* ir_width; + + GtkSearchEntry* entry_search; + + GtkStringList* string_list; + + GSettings *settings, *app_settings; + + app::Application* application; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ConvolverMenuImpulses, convolver_menu_impulses, GTK_TYPE_POPOVER) + +void append_to_string_list(ConvolverMenuImpulses* self, const std::string& irs_filename) { + ui::append_to_string_list(self->string_list, irs_filename); +} + +void remove_from_string_list(ConvolverMenuImpulses* self, const std::string& irs_filename) { + ui::remove_from_string_list(self->string_list, irs_filename); +} + +auto import_irs_file(const std::string& file_path) -> ImpulseImportState { + std::filesystem::path p{file_path}; + + if (!std::filesystem::is_regular_file(p)) { + util::warning(p.string() + " is not a file!"); + + return ImpulseImportState::no_regular_file; + } + + auto file = SndfileHandle(file_path.c_str()); + + if (file.frames() == 0) { + util::warning("Cannot import the impulse response! The format may be corrupted or unsupported."); + util::warning(file_path + " loading failed"); + + return ImpulseImportState::no_frame; + } + + if (file.channels() != 2) { + util::warning("Only stereo impulse files are supported!"); + util::warning(file_path + " loading failed"); + + return ImpulseImportState::no_stereo; + } + + auto out_path = irs_dir / p.filename(); + + out_path.replace_extension(irs_ext); + + std::filesystem::copy_file(p, out_path, std::filesystem::copy_options::overwrite_existing); + + util::debug("Irs file successfully imported to: " + out_path.string()); + + return ImpulseImportState::success; +} + +void notify_import_error(const ImpulseImportState& import_state, ConvolverMenuImpulses* self) { + std::string descr; + + switch (import_state) { + case ImpulseImportState::no_regular_file: { + descr = _("The File Is Not Regular"); + + break; + } + case ImpulseImportState::no_frame: { + descr = _("The Impulse File May Be Corrupted or Unsupported"); + + break; + } + case ImpulseImportState::no_stereo: { + descr = _("Only Stereo Impulse Files Are Supported"); + + break; + } + default: + return; + } + + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->application)); + + ui::show_simple_message_dialog(GTK_WIDGET(active_window), _("Impulse File Not Imported"), descr); +} + +void on_import_irs_clicked(ConvolverMenuImpulses* self, GtkButton* btn) { + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->application)); + + auto* dialog = gtk_file_dialog_new(); + + gtk_file_dialog_set_title(dialog, _("Import Impulse File")); + gtk_file_dialog_set_accept_label(dialog, _("Open")); + + auto* init_folder = g_file_new_for_path(SYSTEM_IRS_DIR); + + gtk_file_dialog_set_initial_folder(dialog, init_folder); + + g_object_unref(init_folder); + + GListStore* filters = g_list_store_new(GTK_TYPE_FILE_FILTER); + + auto* filter = gtk_file_filter_new(); + + gtk_file_filter_set_name(filter, _("Impulse Response")); + gtk_file_filter_add_pattern(filter, "*.irs"); + gtk_file_filter_add_pattern(filter, "*.wav"); + + g_list_store_append(filters, filter); + + g_object_unref(filter); + + gtk_file_dialog_set_filters(dialog, G_LIST_MODEL(filters)); + + g_object_unref(filters); + + gtk_file_dialog_open_multiple( + dialog, active_window, nullptr, + +[](GObject* source_object, GAsyncResult* result, gpointer user_data) { + auto* self = static_cast(user_data); + auto* dialog = GTK_FILE_DIALOG(source_object); + + auto* files_list = gtk_file_dialog_open_multiple_finish(dialog, result, nullptr); + + if (files_list == nullptr) { + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(files_list); n++) { + auto* file = static_cast(g_list_model_get_item(files_list, n)); + auto* path = g_file_get_path(file); + + if (auto import_state = import_irs_file(path); import_state != ImpulseImportState::success) { + notify_import_error(import_state, self); + } + + g_free(path); + } + + g_object_unref(files_list); + }, + self); +} + +void remove_irs_file(const std::string& name) { + const auto irs_file = irs_dir / std::filesystem::path{name + irs_ext}; + + if (std::filesystem::exists(irs_file)) { + std::filesystem::remove(irs_file); + + util::debug("removed irs file: " + irs_file.string()); + } +} + +void setup_listview(ConvolverMenuImpulses* self) { + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect(factory, "setup", + G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, ConvolverMenuImpulses* self) { + auto* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + auto* label = gtk_label_new(nullptr); + auto* load = gtk_button_new_with_label(_("Load")); + auto* remove = gtk_button_new_from_icon_name("user-trash-symbolic"); + + gtk_widget_set_halign(GTK_WIDGET(label), GTK_ALIGN_START); + gtk_widget_set_hexpand(GTK_WIDGET(label), 1); + + gtk_box_append(GTK_BOX(box), GTK_WIDGET(label)); + gtk_box_append(GTK_BOX(box), GTK_WIDGET(load)); + gtk_box_append(GTK_BOX(box), GTK_WIDGET(remove)); + + gtk_list_item_set_activatable(item, 0); + gtk_list_item_set_child(item, GTK_WIDGET(box)); + + g_object_set_data(G_OBJECT(item), "name", label); + g_object_set_data(G_OBJECT(item), "load", load); + g_object_set_data(G_OBJECT(item), "remove", remove); + + g_signal_connect(load, "clicked", G_CALLBACK(+[](GtkButton* btn, ConvolverMenuImpulses* self) { + if (auto* string_object = + GTK_STRING_OBJECT(g_object_get_data(G_OBJECT(btn), "string-object")); + string_object != nullptr) { + auto* name = gtk_string_object_get_string(string_object); + + auto irs_file = irs_dir / std::filesystem::path{name}; + + irs_file += irs_ext; + + g_settings_set_string(self->settings, "kernel-path", irs_file.c_str()); + } + }), + self); + + g_signal_connect(remove, "clicked", G_CALLBACK(+[](GtkButton* btn, ConvolverMenuImpulses* self) { + if (auto* string_object = + GTK_STRING_OBJECT(g_object_get_data(G_OBJECT(btn), "string-object")); + string_object != nullptr) { + auto* name = gtk_string_object_get_string(string_object); + + remove_irs_file(name); + } + }), + self); + }), + self); + + g_signal_connect(factory, "bind", + G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, ConvolverMenuImpulses* self) { + auto* label = static_cast(g_object_get_data(G_OBJECT(item), "name")); + auto* load = static_cast(g_object_get_data(G_OBJECT(item), "load")); + auto* remove = static_cast(g_object_get_data(G_OBJECT(item), "remove")); + + auto* child_item = gtk_list_item_get_item(item); + auto* string_object = GTK_STRING_OBJECT(child_item); + + g_object_set_data(G_OBJECT(load), "string-object", string_object); + g_object_set_data(G_OBJECT(remove), "string-object", string_object); + + auto* name = gtk_string_object_get_string(GTK_STRING_OBJECT(child_item)); + + gtk_label_set_text(label, name); + + gtk_accessible_update_property(GTK_ACCESSIBLE(load), GTK_ACCESSIBLE_PROPERTY_LABEL, + (_("Load Impulse") + " "s + name).c_str(), -1); + + gtk_accessible_update_property(GTK_ACCESSIBLE(remove), GTK_ACCESSIBLE_PROPERTY_LABEL, + (_("Remove Impulse") + " "s + name).c_str(), -1); + }), + self); + + gtk_list_view_set_factory(self->listview, factory); + + g_object_unref(factory); + + for (const auto& name : util::get_files_name(irs_dir, irs_ext)) { + gtk_string_list_append(self->string_list, name.c_str()); + } + + // filter + + auto* filter = gtk_string_filter_new(gtk_property_expression_new(GTK_TYPE_STRING_OBJECT, nullptr, "string")); + + auto* filter_model = gtk_filter_list_model_new(G_LIST_MODEL(self->string_list), GTK_FILTER(filter)); + + gtk_filter_list_model_set_incremental(filter_model, 1); + + g_object_bind_property(self->entry_search, "text", filter, "search", G_BINDING_DEFAULT); + + // sorter + + auto* sorter = gtk_string_sorter_new(gtk_property_expression_new(GTK_TYPE_STRING_OBJECT, nullptr, "string")); + + auto* sorter_model = gtk_sort_list_model_new(G_LIST_MODEL(filter_model), GTK_SORTER(sorter)); + + // setting the listview model and factory + + auto* selection = gtk_no_selection_new(G_LIST_MODEL(sorter_model)); + + gtk_list_view_set_model(self->listview, GTK_SELECTION_MODEL(selection)); + + g_object_unref(selection); +} + +void setup(ConvolverMenuImpulses* self, const std::string& schema_path, app::Application* application) { + self->application = application; + + self->settings = g_settings_new_with_path(tags::schema::convolver::id, schema_path.c_str()); + + setup_listview(self); +} + +void show(GtkWidget* widget) { + auto* self = EE_CONVOLVER_MENU_IMPULSES(widget); + + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->application)); + + auto active_window_height = gtk_widget_get_height(GTK_WIDGET(active_window)); + + const int menu_height = static_cast(0.5F * static_cast(active_window_height)); + + gtk_scrolled_window_set_max_content_height(self->scrolled_window, menu_height); + + GTK_WIDGET_CLASS(convolver_menu_impulses_parent_class)->show(widget); +} + +void dispose(GObject* object) { + auto* self = EE_CONVOLVER_MENU_IMPULSES(object); + + g_object_unref(self->settings); + g_object_unref(self->app_settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(convolver_menu_impulses_parent_class)->dispose(object); +} + +void convolver_menu_impulses_class_init(ConvolverMenuImpulsesClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + + widget_class->show = show; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::convolver_menu_impulses_ui); + + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuImpulses, scrolled_window); + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuImpulses, listview); + gtk_widget_class_bind_template_child(widget_class, ConvolverMenuImpulses, entry_search); + + gtk_widget_class_bind_template_callback(widget_class, on_import_irs_clicked); +} + +void convolver_menu_impulses_init(ConvolverMenuImpulses* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->string_list = gtk_string_list_new(nullptr); + + self->app_settings = g_settings_new(tags::app::id); + + g_settings_bind(self->app_settings, "autohide-popovers", self, "autohide", G_SETTINGS_BIND_DEFAULT); +} + +auto create() -> ConvolverMenuImpulses* { + return static_cast(g_object_new(EE_TYPE_CONVOLVER_MENU_IMPULSES, nullptr)); +} + +} // namespace ui::convolver_menu_impulses diff --git a/src/convolver_preset.cpp b/src/convolver_preset.cpp new file mode 100644 index 0000000..e5f2f01 --- /dev/null +++ b/src/convolver_preset.cpp @@ -0,0 +1,57 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "convolver_preset.hpp" + +ConvolverPreset::ConvolverPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::convolver::id, + tags::schema::convolver::input_path, + tags::schema::convolver::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::convolver).append("#").append(util::to_string(index)); +} + +void ConvolverPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["kernel-path"] = util::gsettings_get_string(settings, "kernel-path"); + + json[section][instance_name]["ir-width"] = g_settings_get_int(settings, "ir-width"); + + json[section][instance_name]["autogain"] = g_settings_get_boolean(settings, "autogain") != 0; +} + +void ConvolverPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "kernel-path", "kernel-path"); + + update_key(json.at(section).at(instance_name), settings, "ir-width", "ir-width"); + + update_key(json.at(section).at(instance_name), settings, "autogain", "autogain"); +} diff --git a/src/convolver_ui.cpp b/src/convolver_ui.cpp new file mode 100644 index 0000000..ce70412 --- /dev/null +++ b/src/convolver_ui.cpp @@ -0,0 +1,695 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "convolver_ui.hpp" + +namespace ui::convolver_box { + +using namespace std::string_literals; + +auto constexpr irs_ext = ".irs"; + +static std::filesystem::path irs_dir = g_get_user_config_dir() + "/easyeffects/irs"s; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + app::Application* application; + + std::shared_ptr convolver; + + std::mutex lock_guard_irs_info; + + std::vector mythreads; + + std::vector connections; + + std::vector gconnections; + + std::vector left_mag, right_mag, time_axis, left_spectrum, right_spectrum, freq_axis; +}; + +struct _ConvolverBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkMenuButton *menu_button_impulses, *menu_button_combine; + + GtkLabel *label_file_name, *label_sampling_rate, *label_samples, *label_duration; + + GtkSpinButton* ir_width; + + GtkCheckButton *check_left, *check_right; + + GtkToggleButton *show_fft, *enable_log_scale; + + GtkBox* chart_box; + + ui::convolver_menu_impulses::ConvolverMenuImpulses* impulses_menu; + + ui::convolver_menu_combine::ConvolverMenuCombine* combine_menu; + + ui::chart::Chart* chart; + + GSettings* settings; + + GFileMonitor* folder_monitor; + + Data* data; + + GtkToggleButton* autogain; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ConvolverBox, convolver_box, GTK_TYPE_BOX) + +void on_reset(ConvolverBox* self, GtkButton* btn) { + gtk_toggle_button_set_active(self->autogain, 0); + + util::reset_all_keys_except(self->settings); +} + +void plot_fft(ConvolverBox* self) { + if (self->data->freq_axis.empty() || self->data->left_spectrum.empty() || self->data->right_spectrum.empty()) { + return; + } + + ui::chart::set_chart_type(self->chart, ui::chart::ChartType::line); + ui::chart::set_fill_bars(self->chart, false); + ui::chart::set_line_width(self->chart, 2.0F); + ui::chart::set_n_x_decimals(self->chart, 0); + ui::chart::set_n_y_decimals(self->chart, 2); + ui::chart::set_x_unit(self->chart, "Hz"); + + if (gtk_toggle_button_get_active(self->enable_log_scale) != 0) { + ui::chart::set_chart_scale(self->chart, ui::chart::ChartScale::logarithmic); + } else { + ui::chart::set_chart_scale(self->chart, ui::chart::ChartScale::linear); + } + + ui::chart::set_x_data(self->chart, self->data->freq_axis); + + if (gtk_check_button_get_active(self->check_left) != 0) { + ui::chart::set_y_data(self->chart, self->data->left_spectrum); + } else if (gtk_check_button_get_active(self->check_right) != 0) { + ui::chart::set_y_data(self->chart, self->data->right_spectrum); + } +} + +void plot_waveform(ConvolverBox* self) { + if (self->data->time_axis.empty() || self->data->left_mag.empty() || self->data->right_mag.empty()) { + return; + } + + ui::chart::set_chart_type(self->chart, ui::chart::ChartType::line); + ui::chart::set_chart_scale(self->chart, ui::chart::ChartScale::linear); + ui::chart::set_fill_bars(self->chart, false); + ui::chart::set_line_width(self->chart, 2.0F); + ui::chart::set_n_x_decimals(self->chart, 2); + ui::chart::set_n_y_decimals(self->chart, 2); + ui::chart::set_x_unit(self->chart, "s"); + + ui::chart::set_x_data(self->chart, self->data->time_axis); + + if (gtk_check_button_get_active(self->check_left) != 0) { + ui::chart::set_y_data(self->chart, self->data->left_mag); + } else if (gtk_check_button_get_active(self->check_right) != 0) { + ui::chart::set_y_data(self->chart, self->data->right_mag); + } +} + +void on_show_fft(ConvolverBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + plot_fft(self); + } else { + plot_waveform(self); + } +} + +void on_show_channel(ConvolverBox* self, GtkCheckButton* btn) { + if (gtk_check_button_get_active(btn) != 0) { + on_show_fft(self, self->show_fft); + } +} + +void on_enable_log_scale(ConvolverBox* self, GtkToggleButton* btn) { + plot_fft(self); +} + +auto interpolate(const std::vector& x_source, + const std::vector& y_source, + const std::vector& x_new) -> std::vector { + auto* acc = gsl_interp_accel_alloc(); + auto* spline = gsl_spline_alloc(gsl_interp_steffen, x_source.size()); + + gsl_spline_init(spline, x_source.data(), y_source.data(), x_source.size()); + + std::vector output(x_new.size()); + + for (size_t n = 0; n < x_new.size(); n++) { + output[n] = static_cast(gsl_spline_eval(spline, x_new[n], acc)); + } + + gsl_spline_free(spline); + gsl_interp_accel_free(acc); + + return output; +} + +void get_irs_spectrum(ConvolverBox* self, const int& rate) { + if (self->data->left_mag.empty() || self->data->right_mag.empty() || + self->data->left_mag.size() != self->data->right_mag.size()) { + util::debug(" aborting the impulse fft calculation..."); + + return; + } + + util::debug(" calculating the impulse fft..."); + + self->data->left_spectrum.resize(self->data->left_mag.size() / 2U + 1U); + self->data->right_spectrum.resize(self->data->right_mag.size() / 2U + 1U); + + auto real_input = self->data->left_mag; + + for (uint n = 0U; n < real_input.size(); n++) { + // https://en.wikipedia.org/wiki/Hann_function + + const float w = 0.5F * (1.0F - std::cos(2.0F * std::numbers::pi_v * static_cast(n) / + static_cast(real_input.size() - 1U))); + + real_input[n] *= w; + } + + auto* complex_output = fftw_alloc_complex(real_input.size()); + + auto* plan = + fftw_plan_dft_r2c_1d(static_cast(real_input.size()), real_input.data(), complex_output, FFTW_ESTIMATE); + + fftw_execute(plan); + + for (uint i = 0U; i < self->data->left_spectrum.size(); i++) { + double sqr = complex_output[i][0] * complex_output[i][0] + complex_output[i][1] * complex_output[i][1]; + + sqr /= static_cast(self->data->left_spectrum.size() * self->data->left_spectrum.size()); + + self->data->left_spectrum[i] = sqr; + } + + // right channel fft + + real_input = self->data->right_mag; + + for (uint n = 0U; n < real_input.size(); n++) { + // https://en.wikipedia.org/wiki/Hann_function + + const float w = 0.5F * (1.0F - std::cos(2.0F * std::numbers::pi_v * static_cast(n) / + static_cast(real_input.size() - 1U))); + + real_input[n] *= w; + } + + fftw_execute(plan); + + for (uint i = 0U; i < self->data->right_spectrum.size(); i++) { + double sqr = complex_output[i][0] * complex_output[i][0] + complex_output[i][1] * complex_output[i][1]; + + sqr /= static_cast(self->data->right_spectrum.size() * self->data->right_spectrum.size()); + + self->data->right_spectrum[i] = sqr; + } + + // cleaning + + if (complex_output != nullptr) { + fftw_free(complex_output); + } + + fftw_destroy_plan(plan); + + // initializing the frequency axis + + self->data->freq_axis.resize(self->data->left_spectrum.size()); + + for (uint n = 0U; n < self->data->freq_axis.size(); n++) { + self->data->freq_axis[n] = + 0.5F * static_cast(rate) * static_cast(n) / static_cast(self->data->freq_axis.size()); + } + + // removing the DC component at f = 0 Hz + + self->data->freq_axis.erase(self->data->freq_axis.begin()); + self->data->left_spectrum.erase(self->data->left_spectrum.begin()); + self->data->right_spectrum.erase(self->data->right_spectrum.begin()); + + const auto chart_width = static_cast(gtk_widget_get_width(GTK_WIDGET(self->chart))); + const auto n_interp_points = (chart_width > 0U) ? chart_width : 1000U; + + // initializing the logarithmic frequency axis + + auto max_freq = std::ranges::max(self->data->freq_axis); + auto min_freq = std::ranges::min(self->data->freq_axis); + + util::debug("min fft frequency: " + util::to_string(min_freq, "")); + util::debug("max fft frequency: " + util::to_string(max_freq, "")); + + const auto log_axis = util::logspace(min_freq, max_freq, n_interp_points); + // const auto log_axis = util::logspace(20.0F, 22000.0F, self->data->freq_axis.size()); + + std::vector freq_axis(log_axis.size()); + + std::copy(log_axis.begin(), log_axis.end(), freq_axis.begin()); + + self->data->left_spectrum = interpolate(self->data->freq_axis, self->data->left_spectrum, freq_axis); + self->data->right_spectrum = interpolate(self->data->freq_axis, self->data->right_spectrum, freq_axis); + self->data->freq_axis = freq_axis; // it has to be after the two previous lines + + // find min and max values + + const auto fft_min_left = std::ranges::min(self->data->left_spectrum); + const auto fft_max_left = std::ranges::max(self->data->left_spectrum); + + const auto fft_min_right = std::ranges::min(self->data->right_spectrum); + const auto fft_max_right = std::ranges::max(self->data->right_spectrum); + + // rescaling between 0 and 1 + + for (uint n = 0U; n < self->data->left_spectrum.size(); n++) { + self->data->left_spectrum[n] = (self->data->left_spectrum[n] - fft_min_left) / (fft_max_left - fft_min_left); + self->data->right_spectrum[n] = (self->data->right_spectrum[n] - fft_min_right) / (fft_max_right - fft_min_right); + } + + util::idle_add([=]() { + if (self == nullptr) { + return; + } + + if (!ui::chart::get_is_visible(self->chart)) { + return; + } + + if (gtk_toggle_button_get_active(self->show_fft) != 0) { + plot_fft(self); + } + }); +} + +void get_irs_info(ConvolverBox* self) { + const std::string path = util::gsettings_get_string(self->settings, "kernel-path"); + + if (path.empty()) { + util::warning(": irs file path is null."); + + // Set label to initial empty state + gtk_widget_remove_css_class(GTK_WIDGET(self->label_file_name), "error"); + gtk_widget_add_css_class(GTK_WIDGET(self->label_file_name), "dim-label"); + gtk_label_set_text(self->label_file_name, _("No Impulse File Loaded")); + + gtk_label_set_text(self->label_sampling_rate, ""); + gtk_label_set_text(self->label_samples, ""); + gtk_label_set_text(self->label_duration, ""); + + return; + } + + auto [rate, kernel_L, kernel_R] = ui::convolver::read_kernel(irs_dir, irs_ext, path); + + if (rate == 0) { + // warning the user that there is a problem + + util::idle_add([=]() { + if (self == nullptr) { + return; + } + + if (!ui::chart::get_is_visible(self->chart)) { + return; + } + + // Move label to error state + gtk_widget_remove_css_class(GTK_WIDGET(self->label_file_name), "dim-label"); + gtk_widget_add_css_class(GTK_WIDGET(self->label_file_name), "error"); + gtk_label_set_text(self->label_file_name, _("Failed To Load The Impulse File")); + + gtk_label_set_text(self->label_sampling_rate, ""); + gtk_label_set_text(self->label_samples, ""); + gtk_label_set_text(self->label_duration, ""); + }); + + return; + } + + const auto dt = 1.0 / rate; + + const double duration = (static_cast(kernel_L.size()) - 1.0) * dt; + + self->data->time_axis.resize(kernel_L.size()); + + self->data->left_mag.resize(kernel_L.size()); + self->data->right_mag.resize(kernel_R.size()); + + std::copy(kernel_L.begin(), kernel_L.end(), self->data->left_mag.begin()); + std::copy(kernel_R.begin(), kernel_R.end(), self->data->right_mag.begin()); + + for (size_t n = 0U; n < self->data->time_axis.size(); n++) { + self->data->time_axis[n] = static_cast(n) * dt; + } + + get_irs_spectrum(self, rate); + + const auto chart_width = static_cast(gtk_widget_get_width(GTK_WIDGET(self->chart))); + + const auto n_interp_points = (chart_width > 0U) ? chart_width : 1000; + + auto x_linear = util::linspace(self->data->time_axis.front(), self->data->time_axis.back(), n_interp_points); + + std::vector x_axis(x_linear.size()); + + std::copy(x_linear.begin(), x_linear.end(), x_axis.begin()); + + self->data->left_mag = interpolate(self->data->time_axis, self->data->left_mag, x_axis); + self->data->right_mag = interpolate(self->data->time_axis, self->data->right_mag, x_axis); + self->data->time_axis = x_axis; // it has to be after the two previous lines + + self->data->time_axis.shrink_to_fit(); + self->data->left_mag.shrink_to_fit(); + self->data->right_mag.shrink_to_fit(); + + // find min and max values + + const auto min_left = std::ranges::min(self->data->left_mag); + const auto max_left = std::ranges::max(self->data->left_mag); + + const auto min_right = std::ranges::min(self->data->right_mag); + const auto max_right = std::ranges::max(self->data->right_mag); + + // rescaling between 0 and 1 + + for (size_t n = 0U; n < self->data->left_mag.size(); n++) { + self->data->left_mag[n] = (self->data->left_mag[n] - min_left) / (max_left - min_left); + self->data->right_mag[n] = (self->data->right_mag[n] - min_right) / (max_right - min_right); + } + + // updating interface with ir file info + + auto rate_copy = rate; + auto n_samples = kernel_L.size(); + + util::idle_add([=]() { + if (self == nullptr) { + return; + } + + if (!ui::chart::get_is_visible(self->chart)) { + return; + } + + const auto fpath = std::filesystem::path{path}; + + // Set label to ready state and update with filename + gtk_widget_remove_css_class(GTK_WIDGET(self->label_file_name), "error"); + gtk_widget_add_css_class(GTK_WIDGET(self->label_file_name), "dim-label"); + gtk_label_set_text(self->label_file_name, fpath.stem().c_str()); + + gtk_label_set_text(self->label_sampling_rate, fmt::format(ui::get_user_locale(), "{0:Ld} Hz", rate_copy).c_str()); + gtk_label_set_text(self->label_samples, fmt::format(ui::get_user_locale(), "{0:Ld}", n_samples).c_str()); + gtk_label_set_text(self->label_duration, fmt::format(ui::get_user_locale(), "{0:.3Lf}", duration).c_str()); + + if (gtk_toggle_button_get_active(self->show_fft) == 0) { + plot_waveform(self); + } + }); +} + +void setup(ConvolverBox* self, + std::shared_ptr convolver, + const std::string& schema_path, + app::Application* application) { + self->data->convolver = convolver; + self->data->application = application; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::convolver::id, schema_path.c_str()); + + convolver->set_post_messages(true); + + ui::convolver_menu_impulses::setup(self->impulses_menu, schema_path, application); + + self->data->connections.push_back(convolver->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(convolver->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::kernel-path", G_CALLBACK(+[](GSettings* settings, char* key, ConvolverBox* self) { + self->data->mythreads.emplace_back([=]() { + std::scoped_lock lock(self->data->lock_guard_irs_info); + + get_irs_info(self); + }); + }), + self)); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->convolver->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain", "autogain">(self->settings, self->input_gain, self->output_gain, + self->autogain); + + g_settings_bind(self->settings, "ir-width", gtk_spin_button_get_adjustment(self->ir_width), "value", + G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_CONVOLVER_BOX(object); + + self->data->convolver->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + g_file_monitor_cancel(self->folder_monitor); + + g_object_unref(self->folder_monitor); + + for (auto& t : self->data->mythreads) { + t.join(); + } + + self->data->mythreads.clear(); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(convolver_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_CONVOLVER_BOX(object); + + for (auto& t : self->data->mythreads) { + t.join(); + } + + self->data->mythreads.clear(); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(convolver_box_parent_class)->finalize(object); +} + +void convolver_box_class_init(ConvolverBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::convolver_ui); + + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, menu_button_impulses); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, menu_button_combine); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, label_file_name); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, label_sampling_rate); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, label_samples); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, label_duration); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, ir_width); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, check_left); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, check_right); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, show_fft); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, enable_log_scale); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, chart_box); + gtk_widget_class_bind_template_child(widget_class, ConvolverBox, autogain); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_fft); + gtk_widget_class_bind_template_callback(widget_class, on_show_channel); + gtk_widget_class_bind_template_callback(widget_class, on_enable_log_scale); +} + +void convolver_box_init(ConvolverBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + // irs dir + + if (!std::filesystem::is_directory(irs_dir)) { + if (std::filesystem::create_directories(irs_dir)) { + util::debug("irs directory created: " + irs_dir.string()); + } else { + util::warning("failed to create irs directory: " + irs_dir.string()); + } + } else { + util::debug("irs directory already exists: " + irs_dir.string()); + } + + prepare_spinbuttons<"%">(self->ir_width); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + self->chart = ui::chart::create(); + + gtk_widget_set_vexpand(GTK_WIDGET(self->chart), 1); + + self->impulses_menu = ui::convolver_menu_impulses::create(); + self->combine_menu = ui::convolver_menu_combine::create(); + + gtk_menu_button_set_popover(self->menu_button_impulses, GTK_WIDGET(self->impulses_menu)); + gtk_menu_button_set_popover(self->menu_button_combine, GTK_WIDGET(self->combine_menu)); + + gtk_box_insert_child_after(self->chart_box, GTK_WIDGET(self->chart), + gtk_widget_get_first_child(GTK_WIDGET(self->chart_box))); + + // setting some signals + + auto* gfile = g_file_new_for_path(irs_dir.c_str()); + + self->folder_monitor = g_file_monitor_directory(gfile, G_FILE_MONITOR_NONE, nullptr, nullptr); + + g_signal_connect(self->folder_monitor, "changed", + G_CALLBACK(+[](GFileMonitor* monitor, GFile* file, GFile* other_file, GFileMonitorEvent event_type, + ConvolverBox* self) { + const auto irs_filename = util::remove_filename_extension(g_file_get_basename(file)); + + if (irs_filename.empty()) { + util::warning("can't retrieve information about irs file"); + + return; + } + + switch (event_type) { + case G_FILE_MONITOR_EVENT_CREATED: { + ui::convolver_menu_impulses::append_to_string_list(self->impulses_menu, irs_filename); + ui::convolver_menu_combine::append_to_string_list(self->combine_menu, irs_filename); + + break; + } + + case G_FILE_MONITOR_EVENT_DELETED: { + ui::convolver_menu_impulses::remove_from_string_list(self->impulses_menu, irs_filename); + ui::convolver_menu_combine::remove_from_string_list(self->combine_menu, irs_filename); + + break; + } + + default: + break; + } + }), + self); + + g_object_unref(gfile); + + g_signal_connect(GTK_WIDGET(self), "realize", G_CALLBACK(+[](GtkWidget* widget, ConvolverBox* self) { + /* + Reading the current configured irs file. We do this here because we need some widgets to be ready + when the impulse response file information is available + */ + + self->data->mythreads.emplace_back([=]() { // Using emplace_back here makes sense + std::scoped_lock lock(self->data->lock_guard_irs_info); + + get_irs_info(self); + }); + }), + self); +} + +auto create() -> ConvolverBox* { + return static_cast(g_object_new(EE_TYPE_CONVOLVER_BOX, nullptr)); +} + +} // namespace ui::convolver_box diff --git a/src/convolver_ui_common.cpp b/src/convolver_ui_common.cpp new file mode 100644 index 0000000..22a9e74 --- /dev/null +++ b/src/convolver_ui_common.cpp @@ -0,0 +1,70 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "convolver_ui_common.hpp" + +namespace ui::convolver { + +auto read_kernel(std::filesystem::path irs_dir, const std::string& irs_ext, const std::string& file_name) + -> std::tuple, std::vector> { + int rate = 0; + std::vector buffer; + std::vector kernel_L; + std::vector kernel_R; + + auto file_path = irs_dir / std::filesystem::path{file_name}; + + util::debug("reading the impulse file: " + file_path.string()); + + if (file_path.extension() != irs_ext) { + file_path += irs_ext; + } + + if (!std::filesystem::exists(file_path)) { + util::debug("file: " + file_path.string() + " does not exist"); + + return std::make_tuple(rate, kernel_L, kernel_R); + } + + auto sndfile = SndfileHandle(file_path.string()); + + if (sndfile.channels() != 2 || sndfile.frames() == 0) { + util::warning(" Only stereo impulse responses are supported."); + util::warning(" The impulse file was not loaded!"); + + return std::make_tuple(rate, kernel_L, kernel_R); + } + + buffer.resize(sndfile.frames() * sndfile.channels()); + kernel_L.resize(sndfile.frames()); + kernel_R.resize(sndfile.frames()); + + sndfile.readf(buffer.data(), sndfile.frames()); + + for (size_t n = 0U; n < kernel_L.size(); n++) { + kernel_L[n] = buffer[2U * n]; + kernel_R[n] = buffer[2U * n + 1U]; + } + + rate = sndfile.samplerate(); + + return std::make_tuple(rate, kernel_L, kernel_R); +} + +} // namespace ui::convolver \ No newline at end of file diff --git a/src/crossfeed.cpp b/src/crossfeed.cpp new file mode 100644 index 0000000..a89683e --- /dev/null +++ b/src/crossfeed.cpp @@ -0,0 +1,116 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "crossfeed.hpp" + +Crossfeed::Crossfeed(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::crossfeed, tags::plugin_package::bs2b, schema, schema_path, pipe_manager) { + bs2b.set_level_fcut(g_settings_get_int(settings, "fcut")); + + bs2b.set_level_feed(10 * static_cast(g_settings_get_double(settings, "feed"))); + + gconnections.push_back(g_signal_connect(settings, "changed::fcut", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + std::scoped_lock lock(self->data_mutex); + + self->bs2b.set_level_fcut(g_settings_get_int(settings, key)); + }), + this)); + + gconnections.push_back( + g_signal_connect(settings, "changed::feed", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + std::scoped_lock lock(self->data_mutex); + + self->bs2b.set_level_feed(10 * static_cast(g_settings_get_double(settings, key))); + }), + this)); + + setup_input_output_gain(); +} + +Crossfeed::~Crossfeed() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Crossfeed::setup() { + std::scoped_lock lock(data_mutex); + + data.resize(2U * static_cast(n_samples)); + + if (rate != bs2b.get_srate()) { + bs2b.set_srate(rate); + } +} + +void Crossfeed::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + for (size_t n = 0U; n < left_in.size(); n++) { + data[n * 2U] = left_in[n]; + data[n * 2U + 1U] = right_in[n]; + } + + bs2b.cross_feed(data.data(), static_cast(n_samples)); + + for (size_t n = 0U; n < left_out.size(); n++) { + left_out[n] = data[n * 2U]; + right_out[n] = data[n * 2U + 1U]; + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto Crossfeed::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/crossfeed_preset.cpp b/src/crossfeed_preset.cpp new file mode 100644 index 0000000..2d49dba --- /dev/null +++ b/src/crossfeed_preset.cpp @@ -0,0 +1,53 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "crossfeed_preset.hpp" + +CrossfeedPreset::CrossfeedPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::crossfeed::id, + tags::schema::crossfeed::input_path, + tags::schema::crossfeed::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::crossfeed).append("#").append(util::to_string(index)); +} + +void CrossfeedPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["fcut"] = g_settings_get_int(settings, "fcut"); + + json[section][instance_name]["feed"] = g_settings_get_double(settings, "feed"); +} + +void CrossfeedPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "fcut", "fcut"); + + update_key(json.at(section).at(instance_name), settings, "feed", "feed"); +} diff --git a/src/crossfeed_ui.cpp b/src/crossfeed_ui.cpp new file mode 100644 index 0000000..fb21723 --- /dev/null +++ b/src/crossfeed_ui.cpp @@ -0,0 +1,202 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "crossfeed_ui.hpp" + +namespace ui::crossfeed_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr crossfeed; + + std::vector connections; + + std::vector gconnections; +}; + +struct _CrossfeedBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkSpinButton *fcut, *feed; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(CrossfeedBox, crossfeed_box, GTK_TYPE_BOX) + +void on_reset(CrossfeedBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_preset_cmoy(CrossfeedBox* self, GtkButton* btn) { + gtk_spin_button_set_value(self->fcut, 700.0); + gtk_spin_button_set_value(self->feed, 6.0); +} + +void on_preset_default(CrossfeedBox* self, GtkButton* btn) { + gtk_spin_button_set_value(self->fcut, 700.0); + gtk_spin_button_set_value(self->feed, 4.5); +} + +void on_preset_jmeier(CrossfeedBox* self, GtkButton* btn) { + gtk_spin_button_set_value(self->fcut, 650.0); + gtk_spin_button_set_value(self->feed, 9.5); +} + +void setup(CrossfeedBox* self, std::shared_ptr crossfeed, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->crossfeed = crossfeed; + + self->settings = g_settings_new_with_path(tags::schema::crossfeed::id, schema_path.c_str()); + + crossfeed->set_post_messages(true); + + self->data->connections.push_back(crossfeed->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(crossfeed->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->crossfeed->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "fcut", gtk_spin_button_get_adjustment(self->fcut), "value", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "feed", gtk_spin_button_get_adjustment(self->feed), "value", G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_CROSSFEED_BOX(object); + + self->data->crossfeed->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(crossfeed_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_CROSSFEED_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(crossfeed_box_parent_class)->finalize(object); +} + +void crossfeed_box_class_init(CrossfeedBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::crossfeed_ui); + + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, fcut); + gtk_widget_class_bind_template_child(widget_class, CrossfeedBox, feed); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + + gtk_widget_class_bind_template_callback(widget_class, on_preset_cmoy); + gtk_widget_class_bind_template_callback(widget_class, on_preset_default); + gtk_widget_class_bind_template_callback(widget_class, on_preset_jmeier); +} + +void crossfeed_box_init(CrossfeedBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"Hz">(self->fcut); + prepare_spinbuttons<"dB">(self->feed); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> CrossfeedBox* { + return static_cast(g_object_new(EE_TYPE_CROSSFEED_BOX, nullptr)); +} + +} // namespace ui::crossfeed_box diff --git a/src/crystalizer.cpp b/src/crystalizer.cpp new file mode 100644 index 0000000..5634458 --- /dev/null +++ b/src/crystalizer.cpp @@ -0,0 +1,309 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "crystalizer.hpp" + +Crystalizer::Crystalizer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::crystalizer, tags::plugin_package::ee, schema, schema_path, pipe_manager) { + for (uint n = 0U; n < nbands; n++) { + filters.at(n) = std::make_unique(log_tag + name + " band" + util::to_string(n)); + } + + std::ranges::fill(band_mute, false); + std::ranges::fill(band_bypass, false); + std::ranges::fill(band_intensity, 1.0F); + std::ranges::fill(band_last_L, 0.0F); + std::ranges::fill(band_last_R, 0.0F); + + frequencies[0] = 20.0F; + frequencies[1] = 520.0F; + frequencies[2] = 1020.0F; + frequencies[3] = 2020.0F; + frequencies[4] = 3020.0F; + frequencies[5] = 4020.0F; + frequencies[6] = 5020.0F; + frequencies[7] = 6020.0F; + frequencies[8] = 7020.0F; + frequencies[9] = 8020.0F; + frequencies[10] = 9020.0F; + frequencies[11] = 10020.0F; + frequencies[12] = 15020.0F; + frequencies[13] = 20020.0F; + + for (uint n = 0U; n < nbands; n++) { + bind_band(static_cast(n)); + } + + setup_input_output_gain(); +} + +Crystalizer::~Crystalizer() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + data_mutex.lock(); + + filters_are_ready = false; + + data_mutex.unlock(); + + util::debug(log_tag + name + " destroyed"); +} + +void Crystalizer::setup() { + data_mutex.lock(); + + filters_are_ready = false; + + data_mutex.unlock(); + + /* + As zita uses fftw we have to be careful when reinitializing it. The thread that creates the fftw plan has to be the + same that destroys it. Otherwise segmentation faults can happen. As we do not want to do this initializing in the + plugin realtime thread we send it to the main thread through g_idle_add().connect_once + */ + + util::idle_add([&, this] { + if (filters_are_ready) { + return; + } + + blocksize = n_samples; + + n_samples_is_power_of_2 = (n_samples & (n_samples - 1)) == 0 && n_samples != 0; + + if (!n_samples_is_power_of_2) { + while ((blocksize & (blocksize - 1)) != 0 && blocksize > 2) { + blocksize--; + } + } + + util::debug(log_tag + name + " blocksize: " + util::to_string(blocksize)); + + notify_latency = true; + do_first_rotation = true; + + latency_n_frames = 1U; // the second derivative forces us to delay at least one sample + + deque_out_L.resize(0U); + deque_out_R.resize(0U); + + data_L.resize(0U); + data_R.resize(0U); + + for (uint n = 0U; n < nbands; n++) { + band_data_L.at(n).resize(blocksize); + band_data_R.at(n).resize(blocksize); + + band_second_derivative_L.at(n).resize(blocksize); + band_second_derivative_R.at(n).resize(blocksize); + } + + for (uint n = 0U; n < nbands; n++) { + filters.at(n)->set_n_samples(blocksize); + filters.at(n)->set_rate(rate); + + filters.at(n)->set_min_frequency(frequencies.at(n)); + filters.at(n)->set_max_frequency(frequencies.at(n + 1U)); + + filters.at(n)->setup(); + } + + data_mutex.lock(); + + filters_are_ready = true; + + data_mutex.unlock(); + }); +} + +void Crystalizer::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (bypass || !filters_are_ready) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + if (n_samples_is_power_of_2 && blocksize == n_samples) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + enhance_peaks(left_out, right_out); + } else { + for (size_t j = 0U; j < left_in.size(); j++) { + data_L.push_back(left_in[j]); + data_R.push_back(right_in[j]); + + if (data_L.size() == blocksize) { + enhance_peaks(data_L, data_R); + + for (const auto& v : data_L) { + deque_out_L.push_back(v); + } + + for (const auto& v : data_R) { + deque_out_R.push_back(v); + } + + data_L.resize(0U); + data_R.resize(0U); + } + } + + // copying the processed samples to the output buffers + + if (deque_out_L.size() >= left_out.size()) { + for (float& v : left_out) { + v = deque_out_L.front(); + + deque_out_L.pop_front(); + } + + for (float& v : right_out) { + v = deque_out_R.front(); + + deque_out_R.pop_front(); + } + } else { + uint offset = 2U * (left_out.size() - deque_out_L.size()); + + if (offset != latency_n_frames) { + latency_n_frames = offset + 1U; // the second derivative forces us to delay at least one sample + + notify_latency = true; + } + + for (uint n = 0U; !deque_out_L.empty() && n < left_out.size(); n++) { + if (n < offset) { + left_out[n] = 0.0F; + right_out[n] = 0.0F; + } else { + left_out[n] = deque_out_L.front(); + right_out[n] = deque_out_R.front(); + + deque_out_R.pop_front(); + deque_out_L.pop_front(); + } + } + } + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (notify_latency) { + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + + notify_latency = false; + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +void Crystalizer::bind_band(const int& n) { + const std::string bandn = "band" + util::to_string(n); + + band_intensity.at(n) = + static_cast(util::db_to_linear(g_settings_get_double(settings, ("intensity-" + bandn).c_str()))); + + band_mute.at(n) = g_settings_get_boolean(settings, ("mute-" + bandn).c_str()) != 0; + band_bypass.at(n) = g_settings_get_boolean(settings, ("bypass-" + bandn).c_str()) != 0; + + using namespace std::string_literals; + + gconnections.push_back(g_signal_connect(settings, ("changed::"s + "intensity-"s + bandn).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto s_key = std::string(key); + + int index = 0; + + if (util::str_to_num(s_key.substr(s_key.find("-band") + 5U), index)) { + auto* self = static_cast(user_data); + + self->band_intensity.at(index) = + g_settings_get_double(settings, key) != 0; + } + }), + this)); + + gconnections.push_back(g_signal_connect(settings, ("changed::"s + "mute-"s + bandn).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto s_key = std::string(key); + + int index = 0; + + if (util::str_to_num(s_key.substr(s_key.find("-band") + 5U), index)) { + auto* self = static_cast(user_data); + + self->band_mute.at(index) = g_settings_get_boolean(settings, key) != 0; + } + }), + this)); + + gconnections.push_back(g_signal_connect(settings, ("changed::"s + "bypass-"s + bandn).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto s_key = std::string(key); + + int index = 0; + + if (util::str_to_num(s_key.substr(s_key.find("-band") + 5U), index)) { + auto* self = static_cast(user_data); + + self->band_bypass.at(index) = g_settings_get_boolean(settings, key) != 0; + } + }), + this)); +} + +auto Crystalizer::get_latency_seconds() -> float { + return this->latency_value; +} diff --git a/src/crystalizer_preset.cpp b/src/crystalizer_preset.cpp new file mode 100644 index 0000000..b035344 --- /dev/null +++ b/src/crystalizer_preset.cpp @@ -0,0 +1,65 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "crystalizer_preset.hpp" + +CrystalizerPreset::CrystalizerPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::crystalizer::id, + tags::schema::crystalizer::input_path, + tags::schema::crystalizer::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::crystalizer).append("#").append(util::to_string(index)); +} + +void CrystalizerPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + for (int n = 0; n < 13; n++) { + const auto bandn = "band" + util::to_string(n); + + json[section][instance_name][bandn]["intensity"] = g_settings_get_double(settings, ("intensity-" + bandn).c_str()); + + json[section][instance_name][bandn]["mute"] = g_settings_get_boolean(settings, ("mute-" + bandn).c_str()) != 0; + + json[section][instance_name][bandn]["bypass"] = g_settings_get_boolean(settings, ("bypass-" + bandn).c_str()) != 0; + } +} + +void CrystalizerPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + for (int n = 0; n < 13; n++) { + const auto bandn = "band" + util::to_string(n); + + update_key(json.at(section).at(instance_name)[bandn], settings, "intensity-" + bandn, "intensity"); + + update_key(json.at(section).at(instance_name)[bandn], settings, "mute-" + bandn, "mute"); + + update_key(json.at(section).at(instance_name)[bandn], settings, "bypass-" + bandn, "bypass"); + } +} diff --git a/src/crystalizer_ui.cpp b/src/crystalizer_ui.cpp new file mode 100644 index 0000000..645e68e --- /dev/null +++ b/src/crystalizer_ui.cpp @@ -0,0 +1,249 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "crystalizer_ui.hpp" + +namespace ui::crystalizer_box { + +constexpr uint nbands = 13U; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr crystalizer; + + std::vector connections; + + std::vector gconnections; +}; + +struct _CrystalizerBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label; + + GtkBox* bands_box; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(CrystalizerBox, crystalizer_box, GTK_TYPE_BOX) + +void on_reset(CrystalizerBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void build_bands(CrystalizerBox* self) { + for (uint n = 0U; n < nbands; n++) { + auto builder = gtk_builder_new_from_resource(tags::resources::crystalizer_band_ui); + + auto* band_box = GTK_BOX(gtk_builder_get_object(builder, "band_box")); + + auto* band_label = GTK_LABEL(gtk_builder_get_object(builder, "band_label")); + + auto* band_intensity = GTK_SCALE(gtk_builder_get_object(builder, "band_intensity")); + + auto* band_bypass = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "band_bypass")); + auto* band_mute = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "band_mute")); + + prepare_scales<"">(band_intensity); + + const auto bandn = "band" + util::to_string(n); + + // connections + + g_settings_bind(self->settings, ("intensity-" + bandn).c_str(), gtk_range_get_adjustment(GTK_RANGE(band_intensity)), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, ("mute-" + bandn).c_str(), band_mute, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, ("bypass-" + bandn).c_str(), band_bypass, "active", G_SETTINGS_BIND_DEFAULT); + + switch (n) { + case 0U: + gtk_label_set_text(band_label, "250 Hz"); + break; + case 1U: + gtk_label_set_text(band_label, "750 Hz"); + break; + case 2U: + gtk_label_set_text(band_label, "1.5 kHz"); + break; + case 3U: + gtk_label_set_text(band_label, "2.5 kHz"); + break; + case 4U: + gtk_label_set_text(band_label, "3.5 kHz"); + break; + case 5U: + gtk_label_set_text(band_label, "4.5 kHz"); + break; + case 6U: + gtk_label_set_text(band_label, "5.5 kHz"); + break; + case 7U: + gtk_label_set_text(band_label, "6.5 kHz"); + break; + case 8U: + gtk_label_set_text(band_label, "7.5 kHz"); + break; + case 9U: + gtk_label_set_text(band_label, "8.5 kHz"); + break; + case 10U: + gtk_label_set_text(band_label, "9.5 kHz"); + break; + case 11U: + gtk_label_set_text(band_label, "12.5 kHz"); + break; + case 12U: + gtk_label_set_text(band_label, "17.5 kHz"); + break; + } + + gtk_box_append(self->bands_box, GTK_WIDGET(band_box)); + + g_object_unref(builder); + } +} + +void setup(CrystalizerBox* self, std::shared_ptr crystalizer, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->crystalizer = crystalizer; + + self->settings = g_settings_new_with_path(tags::schema::crystalizer::id, schema_path.c_str()); + + crystalizer->set_post_messages(true); + + build_bands(self); + + self->data->connections.push_back(crystalizer->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(crystalizer->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); +} + +void dispose(GObject* object) { + auto* self = EE_CRYSTALIZER_BOX(object); + + self->data->crystalizer->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(crystalizer_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_CRYSTALIZER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(crystalizer_box_parent_class)->finalize(object); +} + +void crystalizer_box_class_init(CrystalizerBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::crystalizer_ui); + + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, output_level_right_label); + + gtk_widget_class_bind_template_child(widget_class, CrystalizerBox, bands_box); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void crystalizer_box_init(CrystalizerBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> CrystalizerBox* { + return static_cast(g_object_new(EE_TYPE_CRYSTALIZER_BOX, nullptr)); +} + +} // namespace ui::crystalizer_box diff --git a/src/deepfilternet.cpp b/src/deepfilternet.cpp new file mode 100644 index 0000000..7dc107c --- /dev/null +++ b/src/deepfilternet.cpp @@ -0,0 +1,197 @@ +/* + * Copyright © 2023 Torge Matthies + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "deepfilternet.hpp" + +DeepFilterNet::DeepFilterNet(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, + tags::plugin_name::deepfilternet, + tags::plugin_package::deepfilternet, + schema, + schema_path, + pipe_manager) { + ladspa_wrapper = std::make_unique("libdeep_filter_ladspa.so", "deep_filter_stereo"); + + package_installed = ladspa_wrapper->found_plugin(); + + if (!package_installed) { + util::debug(log_tag + "libdeep_filter_ladspa is not installed"); + } + + ladspa_wrapper->bind_key_double_db_exponential<"Attenuation Limit (dB)", "attenuation-limit", false>(settings); + + ladspa_wrapper->bind_key_double_db_exponential<"Min processing threshold (dB)", "min-processing-threshold", false>( + settings); + + ladspa_wrapper + ->bind_key_double_db_exponential<"Max ERB processing threshold (dB)", "max-erb-processing-threshold", false>( + settings); + + ladspa_wrapper + ->bind_key_double_db_exponential<"Max DF processing threshold (dB)", "max-df-processing-threshold", false>( + settings); + + ladspa_wrapper->bind_key_int<"Min Processing Buffer (frames)", "min-processing-buffer">(settings); + + ladspa_wrapper->bind_key_double<"Post Filter Beta", "post-filter-beta">(settings); + + setup_input_output_gain(); +} + +DeepFilterNet::~DeepFilterNet() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void DeepFilterNet::setup() { + std::scoped_lock lock(data_mutex); + + if (!ladspa_wrapper->found_plugin()) { + return; + } + + resample = rate != 48000; + resampler_ready = !resample; + + util::idle_add([&, this] { + ladspa_wrapper->n_samples = n_samples; + std::scoped_lock lock(data_mutex); + + if (ladspa_wrapper->get_rate() != 48000) { + ladspa_wrapper->create_instance(48000); + ladspa_wrapper->activate(); + } + + if (resample && !resampler_ready) { + resampler_inL = std::make_unique(rate, 48000); + resampler_inR = std::make_unique(rate, 48000); + resampler_outL = std::make_unique(48000, rate); + resampler_outR = std::make_unique(48000, rate); + + std::vector dummy(n_samples); + + const auto resampled_inL = resampler_inL->process(dummy, false); + const auto resampled_inR = resampler_inR->process(dummy, false); + + resampled_outL.resize(resampled_inL.size()); + resampled_outR.resize(resampled_inR.size()); + + resampler_outL->process(resampled_inL, false); + resampler_outR->process(resampled_inR, false); + + carryover_l.clear(); + carryover_r.clear(); + carryover_l.reserve(4); // chosen by fair dice roll. + carryover_r.reserve(4); // guaranteed to be random. + carryover_l.push_back(0.0F); + carryover_r.push_back(0.0F); + + resampler_ready = true; + } + }); +} + +void DeepFilterNet::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (!ladspa_wrapper->found_plugin() || !ladspa_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + if (resample) { + const auto& resampled_inL = resampler_inL->process(left_in, false); + const auto& resampled_inR = resampler_inR->process(right_in, false); + + resampled_outL.resize(resampled_inL.size()); + resampled_outR.resize(resampled_inR.size()); + + ladspa_wrapper->n_samples = resampled_inL.size(); + ladspa_wrapper->connect_data_ports(resampled_inL, resampled_inR, resampled_outL, resampled_outR); + } else { + ladspa_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + } + + ladspa_wrapper->run(); + + if (resample) { + const auto& outL = resampler_outL->process(resampled_outL, false); + const auto& outR = resampler_outR->process(resampled_outR, false); + + auto carryover_end_l = std::min(carryover_l.size(), left_out.size()); + auto carryover_end_r = std::min(carryover_r.size(), right_out.size()); + + auto left_offset = + carryover_end_l + outL.size() > left_out.size() ? carryover_end_l : left_out.size() - outL.size(); + auto right_offset = + carryover_end_r + outR.size() > right_out.size() ? carryover_end_r : right_out.size() - outR.size(); + + auto left_count = std::min(outL.size(), left_out.size() - left_offset); + auto right_count = std::min(outR.size(), right_out.size() - right_offset); + + std::copy(carryover_l.begin(), carryover_l.begin() + carryover_end_l, left_out.begin()); + std::copy(carryover_r.begin(), carryover_r.begin() + carryover_end_r, right_out.begin()); + + carryover_l.erase(carryover_l.begin(), carryover_l.begin() + carryover_end_l); + carryover_r.erase(carryover_r.begin(), carryover_r.begin() + carryover_end_r); + + std::fill(left_out.begin() + carryover_end_l, left_out.begin() + left_offset, 0); + std::fill(right_out.begin() + carryover_end_r, right_out.begin() + right_offset, 0); + + std::copy(outL.begin(), outL.begin() + left_count, left_out.begin() + left_offset); + std::copy(outR.begin(), outR.begin() + right_count, right_out.begin() + right_offset); + + carryover_l.insert(carryover_l.end(), outL.begin() + left_count, outL.end()); + carryover_r.insert(carryover_r.end(), outR.begin() + right_count, outR.end()); + + std::fill(left_out.begin() + left_offset + left_count, left_out.end(), 0); + std::fill(right_out.begin() + right_offset + right_count, right_out.end(), 0); + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto DeepFilterNet::get_latency_seconds() -> float { + return 0.02F + 1.0F / rate; +} diff --git a/src/deepfilternet_preset.cpp b/src/deepfilternet_preset.cpp new file mode 100644 index 0000000..6a29e8b --- /dev/null +++ b/src/deepfilternet_preset.cpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2023 Torge Matthies + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "deepfilternet_preset.hpp" + +DeepFilterNetPreset::DeepFilterNetPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::deepfilternet::id, + tags::schema::deepfilternet::input_path, + tags::schema::deepfilternet::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::deepfilternet).append("#").append(util::to_string(index)); +} + +void DeepFilterNetPreset::save(nlohmann::json& json) { + json[section][instance_name]["attenuation-limit"] = g_settings_get_double(settings, "attenuation-limit"); + json[section][instance_name]["min-processing-threshold"] = g_settings_get_double(settings, "min-processing-threshold"); + json[section][instance_name]["max-erb-processing-threshold"] = g_settings_get_double(settings, "max-erb-processing-threshold"); + json[section][instance_name]["max-df-processing-threshold"] = g_settings_get_double(settings, "max-df-processing-threshold"); + json[section][instance_name]["min-processing-buffer"] = g_settings_get_int(settings, "min-processing-buffer"); + json[section][instance_name]["post-filter-beta"] = g_settings_get_double(settings, "post-filter-beta"); +} + +void DeepFilterNetPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "attenuation-limit", "attenuation-limit"); + update_key(json.at(section).at(instance_name), settings, "min-processing-threshold", "min-processing-threshold"); + update_key(json.at(section).at(instance_name), settings, "max-erb-processing-threshold", "max-erb-processing-threshold"); + update_key(json.at(section).at(instance_name), settings, "max-df-processing-threshold", "max-df-processing-threshold"); + update_key(json.at(section).at(instance_name), settings, "min-processing-buffer", "min-processing-buffer"); + update_key(json.at(section).at(instance_name), settings, "post-filter-beta", "post-filter-beta"); +} diff --git a/src/deepfilternet_ui.cpp b/src/deepfilternet_ui.cpp new file mode 100644 index 0000000..f13f711 --- /dev/null +++ b/src/deepfilternet_ui.cpp @@ -0,0 +1,200 @@ +/* + * Copyright © 2023 Torge Matthies + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "deepfilternet_ui.hpp" + +namespace ui::deepfilternet_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr deepfilternet; + + std::vector connections; + + std::vector gconnections; +}; + +struct _DeepFilterNetBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkScale* att_limit; + + GtkLabel *att_limit_label, *min_processing_thresh_label, *max_erb_processing_thresh_label, + *max_df_processing_thresh_label, *min_processing_buffer_label, *post_filter_beta_label; + + GtkSpinButton *min_processing_thresh, *max_erb_processing_thresh, *max_df_processing_thresh, *min_processing_buffer, + *post_filter_beta; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(DeepFilterNetBox, deepfilternet_box, GTK_TYPE_BOX) + +void on_reset(DeepFilterNetBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(DeepFilterNetBox* self, std::shared_ptr deepfilternet, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->deepfilternet = deepfilternet; + + self->settings = g_settings_new_with_path(tags::schema::deepfilternet::id, schema_path.c_str()); + + deepfilternet->set_post_messages(true); + + self->data->connections.push_back(deepfilternet->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(deepfilternet->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->deepfilternet->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + gsettings_bind_widgets<"attenuation-limit", "min-processing-threshold", "max-erb-processing-threshold", + "max-df-processing-threshold", "min-processing-buffer", "post-filter-beta">( + self->settings, self->att_limit, self->min_processing_thresh, self->max_erb_processing_thresh, + self->max_df_processing_thresh, self->min_processing_buffer, self->post_filter_beta); +} + +void dispose(GObject* object) { + auto* self = EE_DEEPFILTERNET_BOX(object); + + self->data->deepfilternet->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(deepfilternet_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_DEEPFILTERNET_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(deepfilternet_box_parent_class)->finalize(object); +} + +void deepfilternet_box_class_init(DeepFilterNetBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::deepfilternet_ui); + + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, att_limit); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, min_processing_thresh); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, max_erb_processing_thresh); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, max_df_processing_thresh); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, min_processing_buffer); + gtk_widget_class_bind_template_child(widget_class, DeepFilterNetBox, post_filter_beta); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void deepfilternet_box_init(DeepFilterNetBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"dB">(self->min_processing_thresh); + prepare_spinbuttons<"dB">(self->max_erb_processing_thresh); + prepare_spinbuttons<"dB">(self->max_df_processing_thresh); + prepare_spinbuttons<"frames">(self->min_processing_buffer); + prepare_spinbuttons<"dB">(self->post_filter_beta); + + prepare_scales<"dB">(self->att_limit); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> DeepFilterNetBox* { + return static_cast(g_object_new(EE_TYPE_DEEPFILTERNET_BOX, nullptr)); +} + +} // namespace ui::deepfilternet_box diff --git a/src/deesser.cpp b/src/deesser.cpp new file mode 100644 index 0000000..8cf4ce5 --- /dev/null +++ b/src/deesser.cpp @@ -0,0 +1,123 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "deesser.hpp" + +Deesser::Deesser(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::deesser, tags::plugin_package::calf, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://calf.sourceforge.net/plugins/Deesser"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://calf.sourceforge.net/plugins/Deesser is not installed"); + } + + lv2_wrapper->bind_key_enum<"mode", "mode">(settings); + + lv2_wrapper->bind_key_enum<"detection", "detection">(settings); + + lv2_wrapper->bind_key_double<"ratio", "ratio">(settings); + + lv2_wrapper->bind_key_double<"f1_freq", "f1-freq">(settings); + + lv2_wrapper->bind_key_double<"f2_freq", "f2-freq">(settings); + + lv2_wrapper->bind_key_double<"f2_q", "f2-q">(settings); + + lv2_wrapper->bind_key_double_db<"threshold", "threshold">(settings); + + lv2_wrapper->bind_key_double_db<"makeup", "makeup">(settings); + + lv2_wrapper->bind_key_double_db<"f1_level", "f1-level">(settings); + + lv2_wrapper->bind_key_double_db<"f2_level", "f2-level">(settings); + + lv2_wrapper->bind_key_int<"laxity", "laxity">(settings); + + lv2_wrapper->bind_key_bool<"sc_listen", "sc-listen">(settings); + + setup_input_output_gain(); +} + +Deesser::~Deesser() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Deesser::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Deesser::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + // values needed as double for levelbars widget ui, so we convert them here + + detected_port_value = static_cast(lv2_wrapper->get_control_port_value("detected")); + compression_port_value = static_cast(lv2_wrapper->get_control_port_value("compression")); + + detected.emit(detected_port_value); + compression.emit(compression_port_value); + + notify(); + } + } +} + +auto Deesser::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/deesser_preset.cpp b/src/deesser_preset.cpp new file mode 100644 index 0000000..9b0b038 --- /dev/null +++ b/src/deesser_preset.cpp @@ -0,0 +1,93 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "deesser_preset.hpp" + +DeesserPreset::DeesserPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::deesser::id, + tags::schema::deesser::input_path, + tags::schema::deesser::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::deesser).append("#").append(util::to_string(index)); +} + +void DeesserPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["detection"] = util::gsettings_get_string(settings, "detection"); + + json[section][instance_name]["mode"] = util::gsettings_get_string(settings, "mode"); + + json[section][instance_name]["threshold"] = g_settings_get_double(settings, "threshold"); + + json[section][instance_name]["ratio"] = g_settings_get_double(settings, "ratio"); + + json[section][instance_name]["laxity"] = g_settings_get_int(settings, "laxity"); + + json[section][instance_name]["makeup"] = g_settings_get_double(settings, "makeup"); + + json[section][instance_name]["f1-freq"] = g_settings_get_double(settings, "f1-freq"); + + json[section][instance_name]["f2-freq"] = g_settings_get_double(settings, "f2-freq"); + + json[section][instance_name]["f1-level"] = g_settings_get_double(settings, "f1-level"); + + json[section][instance_name]["f2-level"] = g_settings_get_double(settings, "f2-level"); + + json[section][instance_name]["f2-q"] = g_settings_get_double(settings, "f2-q"); + + json[section][instance_name]["sc-listen"] = g_settings_get_boolean(settings, "sc-listen") != 0; +} + +void DeesserPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "detection", "detection"); + + update_key(json.at(section).at(instance_name), settings, "mode", "mode"); + + update_key(json.at(section).at(instance_name), settings, "threshold", "threshold"); + + update_key(json.at(section).at(instance_name), settings, "ratio", "ratio"); + + update_key(json.at(section).at(instance_name), settings, "laxity", "laxity"); + + update_key(json.at(section).at(instance_name), settings, "makeup", "makeup"); + + update_key(json.at(section).at(instance_name), settings, "f1-freq", "f1-freq"); + + update_key(json.at(section).at(instance_name), settings, "f2-freq", "f2-freq"); + + update_key(json.at(section).at(instance_name), settings, "f1-level", "f1-level"); + + update_key(json.at(section).at(instance_name), settings, "f2-level", "f2-level"); + + update_key(json.at(section).at(instance_name), settings, "f2-q", "f2-q"); + + update_key(json.at(section).at(instance_name), settings, "sc-listen", "sc-listen"); +} diff --git a/src/deesser_ui.cpp b/src/deesser_ui.cpp new file mode 100644 index 0000000..6f97d6c --- /dev/null +++ b/src/deesser_ui.cpp @@ -0,0 +1,267 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "deesser_ui.hpp" + +namespace ui::deesser_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr deesser; + + std::vector connections; + + std::vector gconnections; +}; + +struct _DeesserBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkLevelBar *compression, *detected; + + GtkLabel *compression_label, *detected_label; + + GtkSpinButton *f1_freq, *f2_freq, *f1_level, *f2_level, *f2_q, *threshold, *ratio, *laxity, *makeup; + + GtkToggleButton* sc_listen; + + GtkDropDown *detection, *mode; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(DeesserBox, deesser_box, GTK_TYPE_BOX) + +void on_reset(DeesserBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(DeesserBox* self, std::shared_ptr deesser, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->deesser = deesser; + + self->settings = g_settings_new_with_path(tags::schema::deesser::id, schema_path.c_str()); + + deesser->set_post_messages(true); + + self->data->connections.push_back(deesser->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(deesser->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(deesser->detected.connect([=](const double value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LEVEL_BAR(self->compression) || !GTK_IS_LABEL(self->compression_label)) { + return; + } + + gtk_level_bar_set_value(self->compression, 1.0 - value); + gtk_label_set_text(self->compression_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(deesser->compression.connect([=](const double value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LEVEL_BAR(self->detected) || !GTK_IS_LABEL(self->detected_label)) { + return; + } + + gtk_level_bar_set_value(self->detected, value); + gtk_label_set_text(self->detected_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->deesser->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "makeup", gtk_spin_button_get_adjustment(self->makeup), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "ratio", gtk_spin_button_get_adjustment(self->ratio), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "threshold", gtk_spin_button_get_adjustment(self->threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "f1-freq", gtk_spin_button_get_adjustment(self->f1_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "f2-freq", gtk_spin_button_get_adjustment(self->f2_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "f1-level", gtk_spin_button_get_adjustment(self->f1_level), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "f2-level", gtk_spin_button_get_adjustment(self->f2_level), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "f2-q", gtk_spin_button_get_adjustment(self->f2_q), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "laxity", gtk_spin_button_get_adjustment(self->laxity), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sc-listen", self->sc_listen, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "detection", self->detection); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "mode", self->mode); +} + +void dispose(GObject* object) { + auto* self = EE_DEESSER_BOX(object); + + self->data->deesser->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(deesser_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_DEESSER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(deesser_box_parent_class)->finalize(object); +} + +void deesser_box_class_init(DeesserBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->finalize = finalize; + object_class->dispose = dispose; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::deesser_ui); + + gtk_widget_class_bind_template_child(widget_class, DeesserBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, DeesserBox, compression); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, compression_label); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, detected); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, detected_label); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, sc_listen); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, detection); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, mode); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, f1_freq); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, f2_freq); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, f1_level); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, f2_level); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, f2_q); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, threshold); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, ratio); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, laxity); + gtk_widget_class_bind_template_child(widget_class, DeesserBox, makeup); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void deesser_box_init(DeesserBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"dB">(self->makeup, self->threshold, self->f1_level, self->f2_level); + + prepare_spinbuttons<"Hz">(self->f1_freq, self->f2_freq); + + prepare_spinbuttons<"">(self->f2_q); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> DeesserBox* { + return static_cast(g_object_new(EE_TYPE_DEESSER_BOX, nullptr)); +} + +} // namespace ui::deesser_box diff --git a/src/delay.cpp b/src/delay.cpp new file mode 100644 index 0000000..c799e92 --- /dev/null +++ b/src/delay.cpp @@ -0,0 +1,131 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "delay.hpp" + +Delay::Delay(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::delay, tags::plugin_package::lsp, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/comp_delay_x2_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/comp_delay_x2_stereo is not installed"); + } + + lv2_wrapper->set_control_port_value("mode_l", 2); + lv2_wrapper->set_control_port_value("mode_r", 2); + + lv2_wrapper->bind_key_double<"time_l", "time-l">(settings); + lv2_wrapper->bind_key_double<"time_r", "time-r">(settings); + + lv2_wrapper->bind_key_bool<"phase_l", "invert-phase-l">(settings); + lv2_wrapper->bind_key_bool<"phase_r", "invert-phase-r">(settings); + + // The following controls can assume -inf + lv2_wrapper->bind_key_double_db<"dry_l", "dry-l", false>(settings); + lv2_wrapper->bind_key_double_db<"dry_r", "dry-r", false>(settings); + + lv2_wrapper->bind_key_double_db<"wet_l", "wet-l", false>(settings); + lv2_wrapper->bind_key_double_db<"wet_r", "wet-r", false>(settings); + + setup_input_output_gain(); +} + +Delay::~Delay() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Delay::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Delay::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto Delay::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/delay_preset.cpp b/src/delay_preset.cpp new file mode 100644 index 0000000..16a1f12 --- /dev/null +++ b/src/delay_preset.cpp @@ -0,0 +1,77 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "delay_preset.hpp" + +DelayPreset::DelayPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::delay::id, + tags::schema::delay::input_path, + tags::schema::delay::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::delay).append("#").append(util::to_string(index)); +} + +void DelayPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["time-l"] = g_settings_get_double(settings, "time-l"); + + json[section][instance_name]["time-r"] = g_settings_get_double(settings, "time-r"); + + json[section][instance_name]["dry-l"] = g_settings_get_double(settings, "dry-l"); + + json[section][instance_name]["dry-r"] = g_settings_get_double(settings, "dry-r"); + + json[section][instance_name]["wet-l"] = g_settings_get_double(settings, "wet-l"); + + json[section][instance_name]["wet-r"] = g_settings_get_double(settings, "wet-r"); + + json[section][instance_name]["invert-phase-l"] = g_settings_get_boolean(settings, "invert-phase-l") != 0; + + json[section][instance_name]["invert-phase-r"] = g_settings_get_boolean(settings, "invert-phase-r") != 0; +} + +void DelayPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "time-l", "time-l"); + + update_key(json.at(section).at(instance_name), settings, "time-r", "time-r"); + + update_key(json.at(section).at(instance_name), settings, "dry-l", "dry-l"); + + update_key(json.at(section).at(instance_name), settings, "dry-r", "dry-r"); + + update_key(json.at(section).at(instance_name), settings, "wet-l", "wet-l"); + + update_key(json.at(section).at(instance_name), settings, "wet-r", "wet-r"); + + update_key(json.at(section).at(instance_name), settings, "invert-phase-l", "invert-phase-l"); + + update_key(json.at(section).at(instance_name), settings, "invert-phase-r", "invert-phase-r"); +} diff --git a/src/delay_ui.cpp b/src/delay_ui.cpp new file mode 100644 index 0000000..8b68dbb --- /dev/null +++ b/src/delay_ui.cpp @@ -0,0 +1,230 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "delay_ui.hpp" + +namespace ui::delay_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr delay; + + std::vector connections; + + std::vector gconnections; +}; + +struct _DelayBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkSpinButton *time_l, *time_r, *dry_l, *dry_r, *wet_l, *wet_r; + + GtkToggleButton* show_native_ui; + + GtkSwitch *invert_phase_l, *invert_phase_r; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(DelayBox, delay_box, GTK_TYPE_BOX) + +void on_reset(DelayBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(DelayBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->delay->show_native_ui(); + } else { + self->data->delay->close_native_ui(); + } +} + +void setup(DelayBox* self, std::shared_ptr delay, const std::string& schema_path) { + self->data->delay = delay; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::delay::id, schema_path.c_str()); + + delay->set_post_messages(true); + + self->data->connections.push_back(delay->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(delay->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->delay->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "time-l", gtk_spin_button_get_adjustment(self->time_l), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "time-r", gtk_spin_button_get_adjustment(self->time_r), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "dry-l", gtk_spin_button_get_adjustment(self->dry_l), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "dry-r", gtk_spin_button_get_adjustment(self->dry_r), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet-l", gtk_spin_button_get_adjustment(self->wet_l), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet-r", gtk_spin_button_get_adjustment(self->wet_r), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "invert-phase-l", self->invert_phase_l, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "invert-phase-r", self->invert_phase_r, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_DELAY_BOX(object); + + self->data->delay->set_post_messages(false); + + self->data->delay->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(delay_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_DELAY_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(delay_box_parent_class)->finalize(object); +} + +void delay_box_class_init(DelayBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::delay_ui); + + gtk_widget_class_bind_template_child(widget_class, DelayBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, DelayBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, DelayBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, DelayBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, DelayBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, DelayBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, DelayBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, DelayBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, DelayBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, DelayBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, DelayBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, DelayBox, time_l); + gtk_widget_class_bind_template_child(widget_class, DelayBox, time_r); + gtk_widget_class_bind_template_child(widget_class, DelayBox, dry_l); + gtk_widget_class_bind_template_child(widget_class, DelayBox, dry_r); + gtk_widget_class_bind_template_child(widget_class, DelayBox, wet_l); + gtk_widget_class_bind_template_child(widget_class, DelayBox, wet_r); + gtk_widget_class_bind_template_child(widget_class, DelayBox, invert_phase_l); + gtk_widget_class_bind_template_child(widget_class, DelayBox, invert_phase_r); + + gtk_widget_class_bind_template_child(widget_class, DelayBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); +} + +void delay_box_init(DelayBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"ms">(self->time_l, self->time_r); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->dry_l, self->dry_r, self->wet_l, self->wet_r); +} + +auto create() -> DelayBox* { + return static_cast(g_object_new(EE_TYPE_DELAY_BOX, nullptr)); +} + +} // namespace ui::delay_box diff --git a/src/easyeffects.cpp b/src/easyeffects.cpp new file mode 100644 index 0000000..854eb0c --- /dev/null +++ b/src/easyeffects.cpp @@ -0,0 +1,68 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include +#include "application.hpp" +#include "config.h" + +auto sigterm(void* data) -> int { + auto* app = G_APPLICATION(data); + + app::hide_all_windows(app); + + g_application_quit(app); + + return G_SOURCE_REMOVE; +} + +auto main(int argc, char* argv[]) -> int { + util::debug("easyeffects version: " + std::string(VERSION)); + + try { + // Init internationalization support before anything else + + auto* bindtext_output = bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); + textdomain(GETTEXT_PACKAGE); + + if (bindtext_output != nullptr) { + util::debug("locale directory: " + std::string(bindtext_output)); + } else if (errno == ENOMEM) { + util::warning("bindtextdomain: Not enough memory available!"); + + return errno; + } + + auto* app = app::application_new(); + + g_unix_signal_add(2, G_SOURCE_FUNC(sigterm), app); + + auto status = g_application_run(app, argc, argv); + + g_object_unref(app); + + util::debug("Exitting the main function with status: " + util::to_string(status, "")); + + return status; + } catch (const std::exception& e) { + std::cerr << e.what() << std::endl; + + return EXIT_FAILURE; + } +} diff --git a/src/echo_canceller.cpp b/src/echo_canceller.cpp new file mode 100644 index 0000000..050989c --- /dev/null +++ b/src/echo_canceller.cpp @@ -0,0 +1,275 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "echo_canceller.hpp" + +EchoCanceller::EchoCanceller(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, + tags::plugin_name::echo_canceller, + tags::plugin_package::speex, + schema, + schema_path, + pipe_manager, + true), + residual_echo_suppression(g_settings_get_int(settings, "residual-echo-suppression")), + near_end_suppression(g_settings_get_int(settings, "near-end-suppression")) { + gconnections.push_back(g_signal_connect(settings, "changed::filter-length", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + std::scoped_lock lock(self->data_mutex); + + self->filter_length_ms = g_settings_get_int(settings, key); + + self->init_speex(); + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::residual-echo-suppression", + G_CALLBACK(+[](GSettings* settings, char* key, EchoCanceller* self) { + std::scoped_lock lock(self->data_mutex); + + self->residual_echo_suppression = g_settings_get_int(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS, &self->residual_echo_suppression); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS, &self->residual_echo_suppression); + } + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::near-end-suppression", G_CALLBACK(+[](GSettings* settings, char* key, EchoCanceller* self) { + std::scoped_lock lock(self->data_mutex); + + self->near_end_suppression = g_settings_get_int(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE, + &self->near_end_suppression); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE, + &self->near_end_suppression); + } + }), + this)); + + setup_input_output_gain(); +} + +EchoCanceller::~EchoCanceller() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + data_mutex.lock(); + + ready = false; + + if (echo_state_L != nullptr) { + speex_echo_state_destroy(echo_state_L); + } + + if (echo_state_R != nullptr) { + speex_echo_state_destroy(echo_state_R); + } + + free_speex(); + + data_mutex.unlock(); + + util::debug(log_tag + name + " destroyed"); +} + +void EchoCanceller::setup() { + std::scoped_lock lock(data_mutex); + + ready = false; + + notify_latency = true; + + latency_n_frames = 0U; + + init_speex(); +} + +void EchoCanceller::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + std::scoped_lock lock(data_mutex); + + if (bypass || !ready) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + for (size_t j = 0U; j < left_in.size(); j++) { + data_L[j] = static_cast(left_in[j] * (SHRT_MAX + 1)); + data_R[j] = static_cast(right_in[j] * (SHRT_MAX + 1)); + + /* + This is a very naive and not corect attempt to mitigate the shortcomes discussed at + https://github.com/wwmm/easyeffects/issues/1566. + */ + + probe_mono[j] = static_cast(0.5F * (probe_left[j] + probe_right[j]) * (SHRT_MAX + 1)); + } + + speex_echo_cancellation(echo_state_L, data_L.data(), probe_mono.data(), filtered_L.data()); + speex_echo_cancellation(echo_state_R, data_R.data(), probe_mono.data(), filtered_R.data()); + + speex_preprocess_run(state_left, filtered_L.data()); + speex_preprocess_run(state_right, filtered_R.data()); + + for (size_t j = 0U; j < filtered_L.size(); j++) { + left_out[j] = static_cast(filtered_L[j]) * inv_short_max; + + right_out[j] = static_cast(filtered_R[j]) * inv_short_max; + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (notify_latency) { + const float latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + + notify_latency = false; + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +void EchoCanceller::init_speex() { + if (n_samples == 0U || rate == 0U) { + return; + } + + data_L.resize(n_samples); + data_R.resize(n_samples); + probe_mono.resize(n_samples); + filtered_L.resize(n_samples); + filtered_R.resize(n_samples); + + const uint filter_length = static_cast(0.001F * static_cast(filter_length_ms * rate)); + + util::debug(log_tag + name + " filter length: " + util::to_string(filter_length)); + + if (echo_state_L != nullptr) { + speex_echo_state_destroy(echo_state_L); + } + + echo_state_L = speex_echo_state_init(static_cast(n_samples), static_cast(filter_length)); + + if (speex_echo_ctl(echo_state_L, SPEEX_ECHO_SET_SAMPLING_RATE, &rate) != 0) { + util::warning(log_tag + name + "SPEEX_ECHO_SET_SAMPLING_RATE: unknown request"); + } + + if (echo_state_R != nullptr) { + speex_echo_state_destroy(echo_state_R); + } + + echo_state_R = speex_echo_state_init(static_cast(n_samples), static_cast(filter_length)); + + if (speex_echo_ctl(echo_state_R, SPEEX_ECHO_SET_SAMPLING_RATE, &rate) != 0) { + util::warning(log_tag + name + "SPEEX_ECHO_SET_SAMPLING_RATE: unknown request"); + } + + if (state_left != nullptr) { + speex_preprocess_state_destroy(state_left); + } + + if (state_right != nullptr) { + speex_preprocess_state_destroy(state_right); + } + + state_left = speex_preprocess_state_init(static_cast(n_samples), static_cast(rate)); + state_right = speex_preprocess_state_init(static_cast(n_samples), static_cast(rate)); + + if (state_left != nullptr) { + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_ECHO_STATE, echo_state_L); + + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS, &residual_echo_suppression); + + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE, &near_end_suppression); + } + + if (state_right != nullptr) { + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_ECHO_STATE, echo_state_R); + + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS, &residual_echo_suppression); + + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE, &near_end_suppression); + } + + ready = true; +} + +void EchoCanceller::free_speex() { + if (state_left != nullptr) { + speex_preprocess_state_destroy(state_left); + } + + if (state_right != nullptr) { + speex_preprocess_state_destroy(state_right); + } + + state_left = nullptr; + state_right = nullptr; +} + +auto EchoCanceller::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/echo_canceller_preset.cpp b/src/echo_canceller_preset.cpp new file mode 100644 index 0000000..719bfd8 --- /dev/null +++ b/src/echo_canceller_preset.cpp @@ -0,0 +1,58 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "echo_canceller_preset.hpp" + +EchoCancellerPreset::EchoCancellerPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::echo_canceller::id, + tags::schema::echo_canceller::input_path, + tags::schema::echo_canceller::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::echo_canceller).append("#").append(util::to_string(index)); +} + +void EchoCancellerPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["filter-length"] = g_settings_get_int(settings, "filter-length"); + + json[section][instance_name]["residual-echo-suppression"] = g_settings_get_int(settings, "residual-echo-suppression"); + + json[section][instance_name]["near-end-suppression"] = g_settings_get_int(settings, "near-end-suppression"); +} + +void EchoCancellerPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "filter-length", "filter-length"); + + update_key(json.at(section).at(instance_name), settings, "residual-echo-suppression", + "residual-echo-suppression"); + + update_key(json.at(section).at(instance_name), settings, "near-end-suppression", "near-end-suppression"); +} diff --git a/src/echo_canceller_ui.cpp b/src/echo_canceller_ui.cpp new file mode 100644 index 0000000..4a65af7 --- /dev/null +++ b/src/echo_canceller_ui.cpp @@ -0,0 +1,186 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "echo_canceller_ui.hpp" + +namespace ui::echo_canceller_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr echo_canceller; + + std::vector connections; + + std::vector gconnections; +}; + +struct _EchoCancellerBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkSpinButton *filter_length, *residual_echo_suppression, *near_end_suppression; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(EchoCancellerBox, echo_canceller_box, GTK_TYPE_BOX) + +void on_reset(EchoCancellerBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(EchoCancellerBox* self, std::shared_ptr echo_canceller, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->echo_canceller = echo_canceller; + + self->settings = g_settings_new_with_path(tags::schema::echo_canceller::id, schema_path.c_str()); + + echo_canceller->set_post_messages(true); + + self->data->connections.push_back(echo_canceller->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(echo_canceller->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, + ui::get_plugin_credit_translated(self->data->echo_canceller->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain", "filter-length", "residual-echo-suppression", + "near-end-suppression">(self->settings, self->input_gain, self->output_gain, + self->filter_length, self->residual_echo_suppression, + self->near_end_suppression); +} + +void dispose(GObject* object) { + auto* self = EE_ECHO_CANCELLER_BOX(object); + + self->data->echo_canceller->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(echo_canceller_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_ECHO_CANCELLER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(echo_canceller_box_parent_class)->finalize(object); +} + +void echo_canceller_box_class_init(EchoCancellerBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::echo_canceller_ui); + + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, filter_length); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, residual_echo_suppression); + gtk_widget_class_bind_template_child(widget_class, EchoCancellerBox, near_end_suppression); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void echo_canceller_box_init(EchoCancellerBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"ms">(self->filter_length); + + prepare_spinbuttons<"dB">(self->residual_echo_suppression, self->near_end_suppression); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> EchoCancellerBox* { + return static_cast(g_object_new(EE_TYPE_ECHO_CANCELLER_BOX, nullptr)); +} + +} // namespace ui::echo_canceller_box diff --git a/src/effects_base.cpp b/src/effects_base.cpp new file mode 100644 index 0000000..8f6da31 --- /dev/null +++ b/src/effects_base.cpp @@ -0,0 +1,267 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "effects_base.hpp" + +EffectsBase::EffectsBase(std::string tag, const std::string& schema, PipeManager* pipe_manager) + : log_tag(std::move(tag)), + pm(pipe_manager), + settings(g_settings_new(schema.c_str())), + global_settings(g_settings_new(tags::app::id)) { + using namespace std::string_literals; + + schema_base_path = "/" + schema + "/"; + + std::replace(schema_base_path.begin(), schema_base_path.end(), '.', '/'); + + output_level = + std::make_shared(log_tag, tags::schema::output_level::id, schema_base_path + "outputlevel/", pm); + + spectrum = std::make_shared(log_tag, tags::schema::spectrum::id, tags::app::path + "/spectrum/"s, pm); + + if (!output_level->connected_to_pw) { + output_level->connect_to_pw(); + } + + if (!spectrum->connected_to_pw) { + spectrum->connect_to_pw(); + } + + create_filters_if_necessary(); + + gconnections.push_back(g_signal_connect(settings, "changed::plugins", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->create_filters_if_necessary(); + + self->broadcast_pipeline_latency(); + }), + this)); + + gconnections_global.push_back(g_signal_connect(global_settings, "changed::meters-update-interval", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + auto v = g_settings_get_int(settings, key); + + self->spectrum->notification_time_window = 0.001F * v; + + for (auto& plugin : self->plugins | std::views::values) { + plugin->notification_time_window = 0.001F * v; + } + }), + this)); + + gconnections_global.push_back(g_signal_connect(global_settings, "changed::lv2ui-update-frequency", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + auto v = g_settings_get_int(settings, key); + + for (auto& plugin : self->plugins | std::views::values) { + plugin->set_native_ui_update_frequency(v); + } + }), + this)); + + auto notification_time_window = + 0.001F * static_cast(g_settings_get_int(global_settings, "meters-update-interval")); + + spectrum->notification_time_window = notification_time_window; + + for (auto& plugin : plugins | std::views::values) { + plugin->notification_time_window = notification_time_window; + } +} + +EffectsBase::~EffectsBase() { + for (auto& c : connections) { + c.disconnect(); + } + + for (auto& handler_id : gconnections) { + g_signal_handler_disconnect(settings, handler_id); + } + + for (auto& handler_id : gconnections_global) { + g_signal_handler_disconnect(global_settings, handler_id); + } + + g_object_unref(settings); + + util::debug("effects_base: destroyed"); +} + +void EffectsBase::reset_settings() { + util::reset_all_keys_except(settings, {"input-device", "output-device"}); + + spectrum->reset_settings(); + + for (auto& plugin : plugins | std::views::values) { + plugin->reset_settings(); + } +} + +void EffectsBase::create_filters_if_necessary() { + const auto list = util::gchar_array_to_vector(g_settings_get_strv(settings, "plugins")); + + if (list.empty()) { + return; + } + + for (const auto& name : list) { + if (plugins.contains(name)) { + continue; + } + + auto instance_id = util::to_string(tags::plugin_name::get_id(name)); + + auto path = schema_base_path + tags::plugin_name::get_base_name(name) + "/" + instance_id + "/"; + + path.erase(std::remove(path.begin(), path.end(), '_'), path.end()); + + std::shared_ptr filter; + + if (name.starts_with(tags::plugin_name::autogain)) { + filter = std::make_shared(log_tag, tags::schema::autogain::id, path, pm); + } else if (name.starts_with(tags::plugin_name::bass_enhancer)) { + filter = std::make_shared(log_tag, tags::schema::bass_enhancer::id, path, pm); + } else if (name.starts_with(tags::plugin_name::bass_loudness)) { + filter = std::make_shared(log_tag, tags::schema::bass_loudness::id, path, pm); + } else if (name.starts_with(tags::plugin_name::compressor)) { + filter = std::make_shared(log_tag, tags::schema::compressor::id, path, pm); + } else if (name.starts_with(tags::plugin_name::convolver)) { + filter = std::make_shared(log_tag, tags::schema::convolver::id, path, pm); + } else if (name.starts_with(tags::plugin_name::crossfeed)) { + filter = std::make_shared(log_tag, tags::schema::crossfeed::id, path, pm); + } else if (name.starts_with(tags::plugin_name::crystalizer)) { + filter = std::make_shared(log_tag, tags::schema::crystalizer::id, path, pm); + } else if (name.starts_with(tags::plugin_name::deepfilternet)) { + filter = std::make_shared(log_tag, tags::schema::deepfilternet::id, path, pm); + } else if (name.starts_with(tags::plugin_name::deesser)) { + filter = std::make_shared(log_tag, tags::schema::deesser::id, path, pm); + } else if (name.starts_with(tags::plugin_name::delay)) { + filter = std::make_shared(log_tag, tags::schema::delay::id, path, pm); + } else if (name.starts_with(tags::plugin_name::echo_canceller)) { + filter = std::make_shared(log_tag, tags::schema::echo_canceller::id, path, pm); + } else if (name.starts_with(tags::plugin_name::exciter)) { + filter = std::make_shared(log_tag, tags::schema::exciter::id, path, pm); + } else if (name.starts_with(tags::plugin_name::expander)) { + filter = std::make_shared(log_tag, tags::schema::expander::id, path, pm); + } else if (name.starts_with(tags::plugin_name::equalizer)) { + filter = + std::make_shared(log_tag, tags::schema::equalizer::id, path, tags::schema::equalizer::channel_id, + schema_base_path + "equalizer/" + instance_id + "/leftchannel/", + schema_base_path + "equalizer/" + instance_id + "/rightchannel/", pm); + } else if (name.starts_with(tags::plugin_name::filter)) { + filter = std::make_shared(log_tag, tags::schema::filter::id, path, pm); + } else if (name.starts_with(tags::plugin_name::gate)) { + filter = std::make_shared(log_tag, tags::schema::gate::id, path, pm); + } else if (name.starts_with(tags::plugin_name::level_meter)) { + filter = std::make_shared(log_tag, tags::schema::level_meter::id, path, pm); + } else if (name.starts_with(tags::plugin_name::limiter)) { + filter = std::make_shared(log_tag, tags::schema::limiter::id, path, pm); + } else if (name.starts_with(tags::plugin_name::loudness)) { + filter = std::make_shared(log_tag, tags::schema::loudness::id, path, pm); + } else if (name.starts_with(tags::plugin_name::maximizer)) { + filter = std::make_shared(log_tag, tags::schema::maximizer::id, path, pm); + } else if (name.starts_with(tags::plugin_name::multiband_compressor)) { + filter = std::make_shared(log_tag, tags::schema::multiband_compressor::id, path, pm); + } else if (name.starts_with(tags::plugin_name::multiband_gate)) { + filter = std::make_shared(log_tag, tags::schema::multiband_gate::id, path, pm); + } else if (name.starts_with(tags::plugin_name::pitch)) { + filter = std::make_shared(log_tag, tags::schema::pitch::id, path, pm); + } else if (name.starts_with(tags::plugin_name::reverb)) { + filter = std::make_shared(log_tag, tags::schema::reverb::id, path, pm); + } else if (name.starts_with(tags::plugin_name::rnnoise)) { + filter = std::make_shared(log_tag, tags::schema::rnnoise::id, path, pm); + } else if (name.starts_with(tags::plugin_name::speex)) { + filter = std::make_shared(log_tag, tags::schema::speex::id, path, pm); + } else if (name.starts_with(tags::plugin_name::stereo_tools)) { + filter = std::make_shared(log_tag, tags::schema::stereo_tools::id, path, pm); + } + + connections.push_back(filter->latency.connect([=, this]() { broadcast_pipeline_latency(); })); + + plugins.insert(std::make_pair(name, filter)); + } +} + +void EffectsBase::remove_unused_filters() { + const auto list = util::gchar_array_to_vector(g_settings_get_strv(settings, "plugins")); + + if (list.empty()) { + plugins.clear(); + + return; + } + + for (auto it = plugins.begin(); it != plugins.end();) { + auto key = it->first; + + if (std::ranges::find(list, key) == list.end()) { + auto plugin = it->second; + + plugin->bypass = true; + plugin->set_post_messages(false); + plugin->latency.clear(); + + if (plugin->connected_to_pw) { + plugin->disconnect_from_pw(); + } + + it = plugins.erase(it); + } else { + it++; + } + } +} + +void EffectsBase::activate_filters() { + for (auto& plugin : plugins | std::views::values) { + plugin->set_active(true); + } +} + +void EffectsBase::deactivate_filters() { + for (auto& plugin : plugins | std::views::values) { + plugin->set_active(false); + } +} + +auto EffectsBase::get_pipeline_latency() -> float { + float total = 0.0F; + + for (const auto& name : util::gchar_array_to_vector(g_settings_get_strv(settings, "plugins"))) { + if (plugins.contains(name)) { + total += plugins[name]->get_latency_seconds(); + } + } + + return total * 1000.0F; +} + +void EffectsBase::broadcast_pipeline_latency() { + const auto latency_value = get_pipeline_latency(); + + util::debug(log_tag + "pipeline latency: " + util::to_string(latency_value, "") + " ms"); + + pipeline_latency.emit(latency_value); +} diff --git a/src/effects_box.cpp b/src/effects_box.cpp new file mode 100644 index 0000000..781c065 --- /dev/null +++ b/src/effects_box.cpp @@ -0,0 +1,558 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "effects_box.hpp" + +namespace { + +bool schedule_signal_idle = false; + +} + +namespace ui::effects_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + app::Application* application; + + EffectsBase* effects_base; + + PipelineType pipeline_type; + + uint spectrum_rate, spectrum_n_bands; + + float global_output_level_left, global_output_level_right, pipeline_latency_ms; + + std::vector spectrum_mag, spectrum_x_axis, spectrum_freqs; + + std::vector connections; + + std::vector gconnections_spectrum; +}; + +struct _EffectsBox { + GtkBox parent_instance; + + AdwViewStack* stack; + + AdwViewStackPage *apps_box_page, *plugins_box_page; + + GtkLabel *device_state, *latency_status, *label_global_output_level_left, *label_global_output_level_right; + + GtkToggleButton* toggle_listen_mic; + + GtkMenuButton* menubutton_blocklist; + + GtkImage* saturation_icon; + + GtkIconTheme* icon_theme; + + ui::chart::Chart* spectrum_chart; + + ui::apps_box::AppsBox* appsBox; + + ui::plugins_box::PluginsBox* pluginsBox; + + ui::blocklist_menu::BlocklistMenu* blocklist_menu; + + GSettings *settings_spectrum, *app_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(EffectsBox, effects_box, GTK_TYPE_BOX) + +void init_spectrum_frequency_axis(EffectsBox* self) { + self->data->spectrum_freqs.resize(self->data->spectrum_n_bands); + + for (uint n = 0U; n < self->data->spectrum_n_bands; n++) { + self->data->spectrum_freqs[n] = 0.5F * static_cast(self->data->spectrum_rate) * static_cast(n) / + static_cast(self->data->spectrum_n_bands); + } + + if (!self->data->spectrum_freqs.empty()) { + const auto min_freq = static_cast(g_settings_get_int(self->settings_spectrum, "minimum-frequency")); + const auto max_freq = static_cast(g_settings_get_int(self->settings_spectrum, "maximum-frequency")); + + if (min_freq > (max_freq - 100.0F)) { + return; + } + + auto log_x_axis = util::logspace(min_freq, max_freq, g_settings_get_int(self->settings_spectrum, "n-points")); + + self->data->spectrum_x_axis.resize(log_x_axis.size()); + self->data->spectrum_mag.resize(log_x_axis.size()); + + std::copy(log_x_axis.begin(), log_x_axis.end(), self->data->spectrum_x_axis.begin()); + + ui::chart::set_x_data(self->spectrum_chart, self->data->spectrum_x_axis); + } +} + +void setup_spectrum(EffectsBox* self) { + self->data->spectrum_rate = 0U; + self->data->spectrum_n_bands = 0U; + + ui::chart::set_color(self->spectrum_chart, util::gsettings_get_color(self->settings_spectrum, "color")); + + ui::chart::set_axis_labels_color(self->spectrum_chart, + util::gsettings_get_color(self->settings_spectrum, "color-axis-labels")); + + ui::chart::set_fill_bars(self->spectrum_chart, g_settings_get_boolean(self->settings_spectrum, "fill") != 0); + + ui::chart::set_dynamic_y_scale(self->spectrum_chart, + g_settings_get_boolean(self->settings_spectrum, "dynamic-y-scale") != 0); + + ui::chart::set_rounded_corners(self->spectrum_chart, + g_settings_get_boolean(self->settings_spectrum, "rounded-corners") != 0); + + ui::chart::set_draw_bar_border(self->spectrum_chart, + g_settings_get_boolean(self->settings_spectrum, "show-bar-border") != 0); + + ui::chart::set_line_width(self->spectrum_chart, + static_cast(g_settings_get_double(self->settings_spectrum, "line-width"))); + + ui::chart::set_chart_scale(self->spectrum_chart, ui::chart::ChartScale::logarithmic); + + ui::chart::set_x_unit(self->spectrum_chart, "Hz"); + ui::chart::set_y_unit(self->spectrum_chart, "dB"); + + ui::chart::set_n_x_decimals(self->spectrum_chart, 0); + ui::chart::set_n_y_decimals(self->spectrum_chart, 1); + + ui::chart::set_margin(self->spectrum_chart, 0.0F); + + gtk_widget_set_size_request(GTK_WIDGET(self->spectrum_chart), -1, + g_settings_get_int(self->settings_spectrum, "height")); + + auto chart_type = util::gsettings_get_string(self->settings_spectrum, "type"); + + if (chart_type == "Bars") { + ui::chart::set_chart_type(self->spectrum_chart, chart::ChartType::bar); + } else if (chart_type == "Lines") { + ui::chart::set_chart_type(self->spectrum_chart, chart::ChartType::line); + } else if (chart_type == "Dots") { + ui::chart::set_chart_type(self->spectrum_chart, chart::ChartType::dots); + } + + g_settings_bind(self->settings_spectrum, "show", self->spectrum_chart, "visible", G_SETTINGS_BIND_GET); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::color", G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + ui::chart::set_color(self->spectrum_chart, util::gsettings_get_color(self->settings_spectrum, key)); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::color-axis-labels", + G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + ui::chart::set_axis_labels_color(self->spectrum_chart, util::gsettings_get_color(self->settings_spectrum, key)); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::fill", G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + ui::chart::set_fill_bars(self->spectrum_chart, g_settings_get_boolean(self->settings_spectrum, key) != 0); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::dynamic-y-scale", + G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + ui::chart::set_dynamic_y_scale(self->spectrum_chart, g_settings_get_boolean(self->settings_spectrum, key) != 0); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::rounded-corners", + G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + ui::chart::set_rounded_corners(self->spectrum_chart, g_settings_get_boolean(self->settings_spectrum, key) != 0); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::show-bar-border", + G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + ui::chart::set_draw_bar_border(self->spectrum_chart, g_settings_get_boolean(self->settings_spectrum, key) != 0); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::line-width", G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + ui::chart::set_line_width(self->spectrum_chart, + static_cast(g_settings_get_double(self->settings_spectrum, key))); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::height", G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + gtk_widget_set_size_request(GTK_WIDGET(self->spectrum_chart), -1, + g_settings_get_int(self->settings_spectrum, key)); + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::type", G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + auto chart_type = util::gsettings_get_string(self->settings_spectrum, key); + + if (chart_type == "Bars") { + ui::chart::set_chart_type(self->spectrum_chart, chart::ChartType::bar); + } else if (chart_type == "Lines") { + ui::chart::set_chart_type(self->spectrum_chart, chart::ChartType::line); + } else if (chart_type == "Dots") { + ui::chart::set_chart_type(self->spectrum_chart, chart::ChartType::dots); + } + }), + self)); + + self->data->gconnections_spectrum.push_back(g_signal_connect( + self->settings_spectrum, "changed::n-points", G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + util::idle_add([=]() { init_spectrum_frequency_axis(self); }); + }), + self)); + + self->data->gconnections_spectrum.push_back( + g_signal_connect(self->settings_spectrum, "changed::minimum-frequency", + G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + util::idle_add([=]() { init_spectrum_frequency_axis(self); }); + }), + self)); + + self->data->gconnections_spectrum.push_back( + g_signal_connect(self->settings_spectrum, "changed::maximum-frequency", + G_CALLBACK(+[](GSettings* settings, char* key, EffectsBox* self) { + util::idle_add([=]() { init_spectrum_frequency_axis(self); }); + }), + self)); +} + +void stack_visible_child_changed(EffectsBox* self, GParamSpec* pspec, GtkWidget* stack) { + const auto* name = adw_view_stack_get_visible_child_name(ADW_VIEW_STACK(stack)); + + gtk_widget_set_visible(GTK_WIDGET(self->menubutton_blocklist), (g_strcmp0(name, "apps") == 0) ? 1 : 0); + + if (self->data->pipeline_type == PipelineType::input) { + gtk_widget_set_visible(GTK_WIDGET(self->toggle_listen_mic), (g_strcmp0(name, "plugins") == 0) ? 1 : 0); + } +} + +void on_listen_mic_toggled(EffectsBox* self, GtkToggleButton* button) { + self->data->application->sie->set_listen_to_mic(gtk_toggle_button_get_active(button) != 0); +} + +void setup(EffectsBox* self, app::Application* application, PipelineType pipeline_type, GtkIconTheme* icon_theme) { + self->data->application = application; + self->data->pipeline_type = pipeline_type; + self->icon_theme = icon_theme; + + switch (pipeline_type) { + case PipelineType::input: { + self->data->effects_base = static_cast(self->data->application->sie); + + self->apps_box_page = adw_view_stack_add_titled(self->stack, GTK_WIDGET(self->appsBox), "apps", _("Recorders")); + + adw_view_stack_page_set_icon_name(self->apps_box_page, "media-record-symbolic"); + + auto set_device_state_label = [=]() { + auto source_rate = static_cast(application->pm->ee_source_node.rate) * 0.001F; + + gtk_label_set_text(self->device_state, fmt::format(ui::get_user_locale(), "{0:.1Lf} kHz", source_rate).c_str()); + }; + + set_device_state_label(); + + self->data->connections.push_back(application->pm->source_changed.connect([=](const auto nd_info) { + if (nd_info.id == application->pm->ee_source_node.id) { + set_device_state_label(); + } + })); + + break; + } + case PipelineType::output: { + self->data->effects_base = static_cast(self->data->application->soe); + + self->apps_box_page = adw_view_stack_add_titled(self->stack, GTK_WIDGET(self->appsBox), "apps", _("Players")); + + adw_view_stack_page_set_icon_name(self->apps_box_page, "multimedia-player-symbolic"); + + auto set_device_state_label = [=]() { + auto sink_rate = static_cast(application->pm->ee_sink_node.rate) * 0.001F; + + gtk_label_set_text(self->device_state, fmt::format(ui::get_user_locale(), "{0:.1Lf} kHz", sink_rate).c_str()); + }; + + set_device_state_label(); + + self->data->connections.push_back(application->pm->sink_changed.connect([=](const auto nd_info) { + if (nd_info.id == application->pm->ee_sink_node.id) { + set_device_state_label(); + } + })); + + break; + } + } + + self->plugins_box_page = + adw_view_stack_add_titled(self->stack, GTK_WIDGET(self->pluginsBox), "plugins", _("Effects")); + + adw_view_stack_page_set_icon_name(self->plugins_box_page, "emblem-music-symbolic"); + + // setting up the boxes we added to the stack + + ui::apps_box::setup(self->appsBox, application, pipeline_type, icon_theme); + ui::plugins_box::setup(self->pluginsBox, application, pipeline_type); + ui::blocklist_menu::setup(self->blocklist_menu, application, pipeline_type); + + // output level + + self->data->connections.push_back( + self->data->effects_base->output_level->output_level.connect([=](const float left, const float right) { + self->data->global_output_level_left = left; + self->data->global_output_level_right = right; + + if (!schedule_signal_idle) { + return; + } + + g_idle_add((GSourceFunc) + + [](EffectsBox* self) { + if (!schedule_signal_idle) { + return G_SOURCE_REMOVE; + } + + gtk_label_set_text(self->label_global_output_level_left, + fmt::format("{0:.0f}", self->data->global_output_level_left).c_str()); + + gtk_label_set_text(self->label_global_output_level_right, + fmt::format("{0:.0f}", self->data->global_output_level_right).c_str()); + + gtk_widget_set_opacity( + GTK_WIDGET(self->saturation_icon), + (self->data->global_output_level_left > 0.0 || self->data->global_output_level_right > 0.0) + ? 1.0 + : 0.0); + + return G_SOURCE_REMOVE; + }, + self); + })); + + // spectrum array + + self->data->connections.push_back( + self->data->effects_base->spectrum->power.connect([=](uint rate, uint n_bands, std::vector magnitudes) { + if (self == nullptr) { + return; + } + + if (!ui::chart::get_is_visible(self->spectrum_chart)) { + return; + } + + if (!schedule_signal_idle) { + return; + } + + if (self->data->spectrum_rate != rate || self->data->spectrum_n_bands != n_bands) { + self->data->spectrum_rate = rate; + self->data->spectrum_n_bands = n_bands; + + init_spectrum_frequency_axis(self); + } + + auto* acc = gsl_interp_accel_alloc(); + auto* spline = gsl_spline_alloc(gsl_interp_steffen, n_bands); + + gsl_spline_init(spline, self->data->spectrum_freqs.data(), magnitudes.data(), n_bands); + + for (size_t n = 0; n < self->data->spectrum_x_axis.size(); n++) { + self->data->spectrum_mag[n] = + static_cast(gsl_spline_eval(spline, self->data->spectrum_x_axis[n], acc)); + } + + gsl_spline_free(spline); + gsl_interp_accel_free(acc); + + std::ranges::for_each(self->data->spectrum_mag, [](auto& v) { + v = 10.0F * std::log10(v); + + if (!std::isinf(v)) { + v = (v > util::minimum_db_level) ? v : util::minimum_db_level; + } else { + v = util::minimum_db_level; + } + }); + + ui::chart::set_y_data(self->spectrum_chart, self->data->spectrum_mag); + })); + + // As we are showing the window we want the filters to send notifications about level meters, etc + + self->data->effects_base->spectrum->bypass = g_settings_get_boolean(self->settings_spectrum, "show") == 0; + + self->data->effects_base->output_level->set_post_messages(true); + + // pipeline latency + + gtk_label_set_text( + self->latency_status, + fmt::format(ui::get_user_locale(), " {0:.1Lf} ms", self->data->effects_base->get_pipeline_latency()).c_str()); + + self->data->connections.push_back(self->data->effects_base->pipeline_latency.connect([=](const float& v) { + self->data->pipeline_latency_ms = v; + + if (!schedule_signal_idle) { + return; + } + + g_idle_add( + (GSourceFunc) + + [](EffectsBox* self) { + if (!schedule_signal_idle) { + return G_SOURCE_REMOVE; + } + + gtk_label_set_text( + self->latency_status, + fmt::format(ui::get_user_locale(), " {0:.1Lf} ms", self->data->pipeline_latency_ms).c_str()); + + return G_SOURCE_REMOVE; + }, + self); + })); +} + +void realize(GtkWidget* widget) { + schedule_signal_idle = true; + + GTK_WIDGET_CLASS(effects_box_parent_class)->realize(widget); +} + +void unroot(GtkWidget* widget) { + schedule_signal_idle = false; + + GTK_WIDGET_CLASS(effects_box_parent_class)->unroot(widget); +} + +void dispose(GObject* object) { + auto* self = EE_EFFECTS_BOX(object); + + schedule_signal_idle = false; + + self->data->effects_base->spectrum->bypass = true; + + self->data->effects_base->output_level->set_post_messages(false); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections_spectrum) { + g_signal_handler_disconnect(self->settings_spectrum, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections_spectrum.clear(); + + g_object_unref(self->app_settings); + g_object_unref(self->settings_spectrum); + + util::debug("disposed"); + + G_OBJECT_CLASS(effects_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_EFFECTS_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(effects_box_parent_class)->finalize(object); +} + +void effects_box_class_init(EffectsBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + widget_class->realize = realize; + widget_class->unroot = unroot; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::effects_box_ui); + + gtk_widget_class_bind_template_child(widget_class, EffectsBox, stack); + gtk_widget_class_bind_template_child(widget_class, EffectsBox, device_state); + gtk_widget_class_bind_template_child(widget_class, EffectsBox, latency_status); + gtk_widget_class_bind_template_child(widget_class, EffectsBox, label_global_output_level_left); + gtk_widget_class_bind_template_child(widget_class, EffectsBox, label_global_output_level_right); + gtk_widget_class_bind_template_child(widget_class, EffectsBox, toggle_listen_mic); + gtk_widget_class_bind_template_child(widget_class, EffectsBox, menubutton_blocklist); + gtk_widget_class_bind_template_child(widget_class, EffectsBox, saturation_icon); + + gtk_widget_class_bind_template_callback(widget_class, stack_visible_child_changed); + gtk_widget_class_bind_template_callback(widget_class, on_listen_mic_toggled); +} + +void effects_box_init(EffectsBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + schedule_signal_idle = false; + + self->app_settings = g_settings_new(tags::app::id); + self->settings_spectrum = g_settings_new(tags::schema::spectrum::id); + + self->spectrum_chart = ui::chart::create(); + + self->appsBox = ui::apps_box::create(); + self->pluginsBox = ui::plugins_box::create(); + self->blocklist_menu = ui::blocklist_menu::create(); + + gtk_menu_button_set_popover(self->menubutton_blocklist, GTK_WIDGET(self->blocklist_menu)); + + setup_spectrum(self); + + gtk_box_insert_child_after(GTK_BOX(self), GTK_WIDGET(self->spectrum_chart), nullptr); + + g_signal_connect(GTK_WIDGET(self->spectrum_chart), "show", G_CALLBACK(+[](GtkWidget* widget, EffectsBox* self) { + self->data->effects_base->spectrum->bypass = false; + }), + self); + + g_signal_connect(GTK_WIDGET(self->spectrum_chart), "hide", G_CALLBACK(+[](GtkWidget* widget, EffectsBox* self) { + self->data->effects_base->spectrum->bypass = true; + }), + self); +} + +auto create() -> EffectsBox* { + return static_cast(g_object_new(EE_TYPE_EFFECTS_BOX, nullptr)); +} + +} // namespace ui::effects_box diff --git a/src/equalizer.cpp b/src/equalizer.cpp new file mode 100644 index 0000000..e2e8835 --- /dev/null +++ b/src/equalizer.cpp @@ -0,0 +1,332 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "equalizer.hpp" + +using namespace std::string_literals; + +Equalizer::Equalizer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + const std::string& schema_channel, + const std::string& schema_channel_left_path, + const std::string& schema_channel_right_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::equalizer, tags::plugin_package::lsp, schema, schema_path, pipe_manager), + settings_left(g_settings_new_with_path(schema_channel.c_str(), schema_channel_left_path.c_str())), + settings_right(g_settings_new_with_path(schema_channel.c_str(), schema_channel_right_path.c_str())) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/para_equalizer_x32_lr"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/para_equalizer_x32_lr is not installed"); + } + + lv2_wrapper->bind_key_enum<"mode", "mode">(settings); + + lv2_wrapper->bind_key_double<"bal", "balance">(settings); + + lv2_wrapper->bind_key_double<"frqs_l", "pitch-left">(settings); + + lv2_wrapper->bind_key_double<"frqs_r", "pitch-right">(settings); + + bind_bands(std::make_index_sequence()); + + on_split_channels(); + + gconnections.push_back(g_signal_connect(settings, "changed::num-bands", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const uint nbands = g_settings_get_int(settings, key); + + const bool split = g_settings_get_boolean(settings, "split-channels") != 0; + + using namespace tags::equalizer; + + for (uint n = 0U; n < self->max_bands; n++) { + if (n >= nbands) { + // turn off unused bands + g_settings_set_enum(self->settings_left, band_type[n].data(), 0); + + if (split) { + g_settings_set_enum(self->settings_right, band_type[n].data(), 0); + } + } + } + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::split-channels", + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { self->on_split_channels(); }), this)); + + setup_input_output_gain(); +} + +Equalizer::~Equalizer() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + for (auto& handler_id : this->gconnections_unified) { + g_signal_handler_disconnect(this->settings_left, handler_id); + } + + this->gconnections_unified.clear(); + + util::debug(log_tag + name + " destroyed"); +} + +void Equalizer::on_split_channels() { + if (g_settings_get_boolean(settings, "split-channels") != 0) { + for (auto& handler_id : gconnections_unified) { + g_signal_handler_disconnect(settings_left, handler_id); + } + + gconnections_unified.clear(); + + return; + } + + using namespace tags::equalizer; + + for (uint n = 0U; n < max_bands; n++) { + g_settings_set_enum(settings_right, band_type[n].data(), g_settings_get_enum(settings_left, band_type[n].data())); + + g_settings_set_enum(settings_right, band_mode[n].data(), g_settings_get_enum(settings_left, band_mode[n].data())); + + g_settings_set_enum(settings_right, band_slope[n].data(), g_settings_get_enum(settings_left, band_slope[n].data())); + + g_settings_set_boolean(settings_right, band_solo[n].data(), + g_settings_get_boolean(settings_left, band_solo[n].data())); + + g_settings_set_boolean(settings_right, band_mute[n].data(), + g_settings_get_boolean(settings_left, band_mute[n].data())); + + g_settings_set_double(settings_right, band_frequency[n].data(), + g_settings_get_double(settings_left, band_frequency[n].data())); + + g_settings_set_double(settings_right, band_gain[n].data(), + g_settings_get_double(settings_left, band_gain[n].data())); + + g_settings_set_double(settings_right, band_q[n].data(), g_settings_get_double(settings_left, band_q[n].data())); + + g_settings_set_double(settings_right, band_width[n].data(), + g_settings_get_double(settings_left, band_width[n].data())); + + /* + When in unified mode we want settings applied to the left channel to be propagated to the right channel + database + */ + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_gain[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_double(self->settings_right, key, + g_settings_get_double(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_frequency[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_double(self->settings_right, key, + g_settings_get_double(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_q[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_double(self->settings_right, key, + g_settings_get_double(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_width[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_double(self->settings_right, key, + g_settings_get_double(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_type[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_enum(self->settings_right, key, + g_settings_get_enum(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_mode[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_enum(self->settings_right, key, + g_settings_get_enum(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_slope[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_enum(self->settings_right, key, + g_settings_get_enum(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_mute[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_boolean(self->settings_right, key, + g_settings_get_boolean(settings, key)); + }), + this)); + + gconnections_unified.push_back(g_signal_connect(settings_left, ("changed::"s + band_solo[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, Equalizer* self) { + g_settings_set_boolean(self->settings_right, key, + g_settings_get_boolean(settings, key)); + }), + this)); + } +} + +void Equalizer::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Equalizer::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +void Equalizer::sort_bands() { + struct EQ_Band { + gdouble freq; + gint type; + gint mode; + gint slope; + gdouble gain; + gdouble q; + gdouble width; + gboolean solo; + gboolean mute; + }; + + const auto used_bands = static_cast(g_settings_get_int(settings, "num-bands")); + if (used_bands < 1U || used_bands > max_bands) { + return; + } + + std::vector settings_channels{settings_left}; + if (g_settings_get_boolean(settings, "split-channels") != 0) { + settings_channels.push_back(settings_right); + } + + using namespace tags::equalizer; + + for (auto* channel : settings_channels) { + std::multimap sorted_bands; + + for (uint n = 0U; n < used_bands; n++) { + const auto f = g_settings_get_double(channel, band_frequency[n].data()); + + sorted_bands.emplace( + std::pair(f, {.freq = f, + .type = g_settings_get_enum(channel, band_type[n].data()), + .mode = g_settings_get_enum(channel, band_mode[n].data()), + .slope = g_settings_get_enum(channel, band_slope[n].data()), + .gain = g_settings_get_double(channel, band_gain[n].data()), + .q = g_settings_get_double(channel, band_q[n].data()), + .width = g_settings_get_double(channel, band_width[n].data()), + .solo = g_settings_get_boolean(channel, band_solo[n].data()), + .mute = g_settings_get_boolean(channel, band_mute[n].data())})); + } + + for (uint n = 0U; const auto& p : sorted_bands) { + g_settings_set_double(channel, band_frequency[n].data(), p.second.freq); + g_settings_set_enum(channel, band_type[n].data(), p.second.type); + g_settings_set_enum(channel, band_mode[n].data(), p.second.mode); + g_settings_set_enum(channel, band_slope[n].data(), p.second.slope); + g_settings_set_double(channel, band_gain[n].data(), p.second.gain); + g_settings_set_double(channel, band_q[n].data(), p.second.q); + g_settings_set_double(channel, band_width[n].data(), p.second.width); + g_settings_set_boolean(channel, band_solo[n].data(), p.second.solo); + g_settings_set_boolean(channel, band_mute[n].data(), p.second.mute); + n++; + } + } +} + +auto Equalizer::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/equalizer_band_box.cpp b/src/equalizer_band_box.cpp new file mode 100644 index 0000000..0ef81ea --- /dev/null +++ b/src/equalizer_band_box.cpp @@ -0,0 +1,218 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "equalizer_band_box.hpp" + +namespace ui::equalizer_band_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + int index = 0; // index in the gsettings database +}; + +struct _EqualizerBandBox { + GtkBox parent_instance; + + AdwComboRow *band_type, *band_mode, *band_slope; + + GtkButton *reset_frequency, *reset_quality; + + GtkSwitch *band_solo, *band_mute; + + GtkScale* band_scale; + + GtkSpinButton *band_frequency, *band_gain, *band_quality, *band_width; + + GtkPopover* popover_menu; + + GSettings *settings, *app_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(EqualizerBandBox, equalizer_band_box, GTK_TYPE_BOX) + +void on_reset_frequency(EqualizerBandBox* self, GtkButton* btn) { + g_settings_reset(self->settings, tags::equalizer::band_frequency[self->data->index].data()); +} + +void on_reset_gain(EqualizerBandBox* self, GtkButton* btn) { + g_settings_reset(self->settings, tags::equalizer::band_gain[self->data->index].data()); +} + +void on_reset_quality(EqualizerBandBox* self, GtkButton* btn) { + g_settings_reset(self->settings, tags::equalizer::band_q[self->data->index].data()); +} + +void on_reset_width(EqualizerBandBox* self, GtkButton* btn) { + g_settings_reset(self->settings, tags::equalizer::band_width[self->data->index].data()); +} + +auto set_band_label(EqualizerBandBox* self, double value) -> const char* { + if (value < 1000.0) { + // Show no decimal digits: full integer. No need of locale. + return g_strdup(fmt::format("{0:.0f} Hz", value).c_str()); + } + + // Convert in kHz and show hHz as 1 decimal digit. Use locale. + return g_strdup(fmt::format(ui::get_user_locale(), "{0:.1Lf} kHz", value / 1000.0).c_str()); +} + +auto set_band_quality_label(EqualizerBandBox* self, double value) -> const char* { + return g_strdup(fmt::format(ui::get_user_locale(), "Q {0:.2Lf}", value).c_str()); +} + +auto set_band_gain_sensitive(EqualizerBandBox* self, const guint selected_id) -> gboolean { + switch (selected_id) { + case 0U: // Off + case 2U: // High Pass + case 4U: // Low Pass + return 0; + + default: + break; + } + + return 1; +} + +auto set_band_width_sensitive(EqualizerBandBox* self, const guint selected_id) -> gboolean { + switch (selected_id) { + case 9U: // Band Pass + case 10U: // Ladder Pass + case 11U: // Ladder Rej + return 1; + + default: + break; + } + + return 0; +} + +void setup(EqualizerBandBox* self, GSettings* settings) { + self->settings = settings; +} + +void bind(EqualizerBandBox* self, int index) { + self->data->index = index; + + g_settings_bind(self->settings, tags::equalizer::band_gain[index].data(), + gtk_range_get_adjustment(GTK_RANGE(self->band_scale)), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, tags::equalizer::band_frequency[index].data(), + gtk_spin_button_get_adjustment(self->band_frequency), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, tags::equalizer::band_q[index].data(), + gtk_spin_button_get_adjustment(self->band_quality), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, tags::equalizer::band_width[index].data(), + gtk_spin_button_get_adjustment(self->band_width), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, tags::equalizer::band_solo[index].data(), self->band_solo, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, tags::equalizer::band_mute[index].data(), self->band_mute, "active", + G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, tags::equalizer::band_type[index].data(), self->band_type); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, tags::equalizer::band_mode[index].data(), self->band_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, tags::equalizer::band_slope[index].data(), self->band_slope); +} + +void dispose(GObject* object) { + auto* self = EE_EQUALIZER_BAND_BOX(object); + + g_object_unref(self->app_settings); + + util::debug("index: " + util::to_string(self->data->index) + " disposed"); + + G_OBJECT_CLASS(equalizer_band_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_EQUALIZER_BAND_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(equalizer_band_box_parent_class)->finalize(object); +} + +void equalizer_band_box_class_init(EqualizerBandBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::equalizer_band_ui); + + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_type); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_mode); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_slope); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, reset_frequency); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, reset_quality); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_solo); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_mute); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_scale); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_frequency); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_gain); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_quality); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, band_width); + gtk_widget_class_bind_template_child(widget_class, EqualizerBandBox, popover_menu); + + gtk_widget_class_bind_template_callback(widget_class, on_reset_frequency); + gtk_widget_class_bind_template_callback(widget_class, on_reset_gain); + gtk_widget_class_bind_template_callback(widget_class, on_reset_quality); + gtk_widget_class_bind_template_callback(widget_class, on_reset_width); + gtk_widget_class_bind_template_callback(widget_class, set_band_gain_sensitive); + gtk_widget_class_bind_template_callback(widget_class, set_band_width_sensitive); + gtk_widget_class_bind_template_callback(widget_class, set_band_label); + gtk_widget_class_bind_template_callback(widget_class, set_band_quality_label); +} + +void equalizer_band_box_init(EqualizerBandBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->app_settings = g_settings_new(tags::app::id); + + g_settings_bind(self->app_settings, "autohide-popovers", self->popover_menu, "autohide", G_SETTINGS_BIND_DEFAULT); + + prepare_scales<"">(self->band_scale); + + prepare_spinbuttons<"Hz">(self->band_frequency); + prepare_spinbuttons<"dB">(self->band_gain); + prepare_spinbuttons<"">(self->band_quality); + prepare_spinbuttons<"oct">(self->band_width); +} + +auto create() -> EqualizerBandBox* { + return static_cast(g_object_new(EE_TYPE_EQUALIZER_BAND_BOX, nullptr)); +} + +} // namespace ui::equalizer_band_box diff --git a/src/equalizer_preset.cpp b/src/equalizer_preset.cpp new file mode 100644 index 0000000..bac5c34 --- /dev/null +++ b/src/equalizer_preset.cpp @@ -0,0 +1,162 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "equalizer_preset.hpp" + +using namespace tags::equalizer; + +EqualizerPreset::EqualizerPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::equalizer::id, + tags::schema::equalizer::input_path, + tags::schema::equalizer::output_path, + preset_type, + index) { + input_settings_left = g_settings_new_with_path( + tags::schema::equalizer::channel_id, + (tags::schema::equalizer::input_path + util::to_string(index) + "/leftchannel/").c_str()); + + input_settings_right = g_settings_new_with_path( + tags::schema::equalizer::channel_id, + (tags::schema::equalizer::input_path + util::to_string(index) + "/rightchannel/").c_str()); + + output_settings_left = g_settings_new_with_path( + tags::schema::equalizer::channel_id, + (tags::schema::equalizer::output_path + util::to_string(index) + "/leftchannel/").c_str()); + + output_settings_right = g_settings_new_with_path( + tags::schema::equalizer::channel_id, + (tags::schema::equalizer::output_path + util::to_string(index) + "/rightchannel/").c_str()); + + instance_name.assign(tags::plugin_name::equalizer).append("#").append(util::to_string(index)); +} + +EqualizerPreset::~EqualizerPreset() { + g_object_unref(input_settings_left); + g_object_unref(input_settings_right); + g_object_unref(output_settings_left); + g_object_unref(output_settings_right); +} + +void EqualizerPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["mode"] = util::gsettings_get_string(settings, "mode"); + + json[section][instance_name]["split-channels"] = g_settings_get_boolean(settings, "split-channels") != 0; + + json[section][instance_name]["balance"] = g_settings_get_double(settings, "balance"); + + json[section][instance_name]["pitch-left"] = g_settings_get_double(settings, "pitch-left"); + + json[section][instance_name]["pitch-right"] = g_settings_get_double(settings, "pitch-right"); + + const auto nbands = g_settings_get_int(settings, "num-bands"); + + json[section][instance_name]["num-bands"] = nbands; + + if (section == "input") { + save_channel(json[section][instance_name]["left"], input_settings_left, nbands); + save_channel(json[section][instance_name]["right"], input_settings_right, nbands); + } else if (section == "output") { + save_channel(json[section][instance_name]["left"], output_settings_left, nbands); + save_channel(json[section][instance_name]["right"], output_settings_right, nbands); + } +} + +void EqualizerPreset::save_channel(nlohmann::json& json, GSettings* settings, const int& nbands) { + for (int n = 0; n < nbands; n++) { + const auto* const bandn = band_id[n]; + + json[bandn]["type"] = util::gsettings_get_string(settings, band_type[n].data()); + + json[bandn]["mode"] = util::gsettings_get_string(settings, band_mode[n].data()); + + json[bandn]["slope"] = util::gsettings_get_string(settings, band_slope[n].data()); + + json[bandn]["solo"] = g_settings_get_boolean(settings, band_solo[n].data()) != 0; + + json[bandn]["mute"] = g_settings_get_boolean(settings, band_mute[n].data()) != 0; + + json[bandn]["gain"] = g_settings_get_double(settings, band_gain[n].data()); + + json[bandn]["frequency"] = g_settings_get_double(settings, band_frequency[n].data()); + + json[bandn]["q"] = g_settings_get_double(settings, band_q[n].data()); + + json[bandn]["width"] = g_settings_get_double(settings, band_width[n].data()); + } +} + +void EqualizerPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "mode", "mode"); + + update_key(json.at(section).at(instance_name), settings, "num-bands", "num-bands"); + + update_key(json.at(section).at(instance_name), settings, "split-channels", "split-channels"); + + update_key(json.at(section).at(instance_name), settings, "balance", "balance"); + + update_key(json.at(section).at(instance_name), settings, "pitch-left", "pitch-left"); + + update_key(json.at(section).at(instance_name), settings, "pitch-right", "pitch-right"); + + const auto nbands = g_settings_get_int(settings, "num-bands"); + + if (section == "input") { + load_channel(json.at(section).at(instance_name).at("left"), input_settings_left, nbands); + load_channel(json.at(section).at(instance_name).at("right"), input_settings_right, nbands); + } else if (section == "output") { + load_channel(json.at(section).at(instance_name).at("left"), output_settings_left, nbands); + load_channel(json.at(section).at(instance_name).at("right"), output_settings_right, nbands); + } +} + +void EqualizerPreset::load_channel(const nlohmann::json& json, GSettings* settings, const int& nbands) { + for (int n = 0; n < nbands; n++) { + const auto bandn = "band" + util::to_string(n); + + update_key(json.at(bandn), settings, band_type[n].data(), "type"); + + update_key(json.at(bandn), settings, band_mode[n].data(), "mode"); + + update_key(json.at(bandn), settings, band_slope[n].data(), "slope"); + + update_key(json.at(bandn), settings, band_solo[n].data(), "solo"); + + update_key(json.at(bandn), settings, band_mute[n].data(), "mute"); + + update_key(json.at(bandn), settings, band_gain[n].data(), "gain"); + + update_key(json.at(bandn), settings, band_frequency[n].data(), "frequency"); + + update_key(json.at(bandn), settings, band_q[n].data(), "q"); + + update_key(json.at(bandn), settings, band_width[n].data(), "width"); + } +} diff --git a/src/equalizer_ui.cpp b/src/equalizer_ui.cpp new file mode 100644 index 0000000..7fe6ab9 --- /dev/null +++ b/src/equalizer_ui.cpp @@ -0,0 +1,910 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "equalizer_ui.hpp" + +namespace ui::equalizer_box { + +using namespace tags::equalizer; + +enum Channel { left, right }; + +struct APO_Band { + std::string type; + float freq = 1000.0F; + float gain = 0.0F; + float quality = (1.0F / std::numbers::sqrt2_v); +}; + +struct GraphicEQ_Band { + float freq = 1000.0F; + float gain = 0.0F; +}; + +std::unordered_map const FilterTypeMap = { + {"PK", "Bell"}, {"MODAL", "Bell"}, {"PEQ", "Bell"}, {"LP", "Lo-pass"}, {"LPQ", "Lo-pass"}, + {"HP", "Hi-pass"}, {"HPQ", "Hi-pass"}, {"LS", "Lo-shelf"}, {"LSC", "Lo-shelf"}, {"LS 6DB", "Lo-shelf"}, + {"LS 12DB", "Lo-shelf"}, {"HS", "Hi-shelf"}, {"HSC", "Hi-shelf"}, {"HS 6DB", "Hi-shelf"}, {"HS 12DB", "Hi-shelf"}, + {"NO", "Notch"}, {"AP", "Allpass"}}; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + app::Application* application{}; + + std::shared_ptr equalizer; + + std::vector connections; + + std::vector gconnections; +}; + +struct _EqualizerBox { + GtkBox parent_instance; + + AdwToastOverlay* toast_overlay; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkStack* stack; + + GtkListView *listview_left, *listview_right; + + GtkSpinButton *nbands, *balance, *pitch_left, *pitch_right; + + GtkDropDown* mode; + + GtkToggleButton *split_channels, *show_native_ui; + + GSettings *settings, *settings_left, *settings_right; + + GtkStringList *string_list_left, *string_list_right; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(EqualizerBox, equalizer_box, GTK_TYPE_BOX) + +void on_reset(EqualizerBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); + util::reset_all_keys_except(self->settings_left); + util::reset_all_keys_except(self->settings_right); +} + +void on_show_native_window(EqualizerBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->equalizer->show_native_ui(); + } else { + self->data->equalizer->close_native_ui(); + } +} + +void on_flat_response(EqualizerBox* self, GtkButton* btn) { + const auto& max_bands = self->data->equalizer->max_bands; + for (uint n = 0U; n < max_bands; n++) { + g_settings_reset(self->settings_left, band_gain[n].data()); + + g_settings_reset(self->settings_right, band_gain[n].data()); + } +} + +void on_calculate_frequencies(EqualizerBox* self, GtkButton* btn) { + constexpr double min_freq = 20.0; + constexpr double max_freq = 20000.0; + + double freq0 = min_freq; + double freq1 = 0.0; + + const auto nbands = g_settings_get_int(self->settings, "num-bands"); + + // code taken from gstreamer equalizer sources: gstiirequalizer.c + // function: gst_iir_equalizer_compute_frequencies + + const double step = std::pow(max_freq / min_freq, 1.0 / static_cast(nbands)); + + for (int n = 0; n < nbands; n++) { + freq1 = freq0 * step; + + const double freq = freq0 + 0.5 * (freq1 - freq0); + const double width = freq1 - freq0; + const double q = freq / width; + + // std::cout << n << "\t" << freq << "\t" << width << std::endl; + + g_settings_set_double(self->settings_left, band_frequency[n].data(), freq); + g_settings_set_double(self->settings_left, band_q[n].data(), q); + + g_settings_set_double(self->settings_right, band_frequency[n].data(), freq); + g_settings_set_double(self->settings_right, band_q[n].data(), q); + + freq0 = freq1; + } +} + +// ### APO Preset Section ### + +auto parse_apo_preamp(const std::string& line, double& preamp) -> bool { + std::smatch matches; + + static const auto re_preamp = std::regex(R"(preamp\s*:\s*([+-]?\d+(?:\.\d+)?)\s*db)", std::regex::icase); + + std::regex_search(line, matches, re_preamp); + + if (matches.size() != 2U) { + return false; + } + + return util::str_to_num(matches.str(1), preamp); +} + +auto parse_apo_filter(const std::string& line, struct APO_Band& filter) -> std::string { + std::smatch matches; + + static const auto re_filter = + std::regex(R"(filter\s*\d*\s*:\s*on\s+([a-z]+(?:\s+(?:6|12)db)?))", std::regex::icase); + + std::regex_search(line, matches, re_filter); + + if (matches.size() != 2U) { + return ""; + } + + // Possible multiple whitespaces are replaced by a single space + auto apo_filter = std::regex_replace(matches.str(1), std::regex(R"(\s+)"), " "); + + // Filter string needed in uppercase for unordered_map + std::transform(apo_filter.begin(), apo_filter.end(), apo_filter.begin(), + [](unsigned char c) { return std::toupper(c); }); + + try { + filter.type = FilterTypeMap.at(apo_filter); + } catch (...) { + filter.type = "Off"; + } + + return apo_filter; +} + +auto parse_apo_frequency(const std::string& line, struct APO_Band& filter) -> bool { + std::smatch matches; + + static const auto re_freq = std::regex(R"(fc\s+(\d+(?:,\d+)?(?:\.\d+)?)\s*hz)", std::regex::icase); + + std::regex_search(line, matches, re_freq); + + if (matches.size() != 2U) { + return false; + } + + // Frequency could have a comma as thousands separator + // to be removed for the correct float conversion. + return util::str_to_num(std::regex_replace(matches.str(1), std::regex(","), ""), filter.freq); +} + +auto parse_apo_gain(const std::string& line, struct APO_Band& filter) -> bool { + std::smatch matches; + + static const auto re_gain = std::regex(R"(gain\s+([+-]?\d+(?:\.\d+)?)\s*db)", std::regex::icase); + + std::regex_search(line, matches, re_gain); + + if (matches.size() != 2U) { + return false; + } + + return util::str_to_num(matches.str(1), filter.gain); +} + +auto parse_apo_quality(const std::string& line, struct APO_Band& filter) -> bool { + std::smatch matches; + + static const auto re_quality = std::regex(R"(q\s+(\d+(?:\.\d+)?))", std::regex::icase); + + std::regex_search(line, matches, re_quality); + + if (matches.size() != 2U) { + return false; + } + + return util::str_to_num(matches.str(1), filter.quality); +} + +auto parse_apo_config_line(const std::string& line, struct APO_Band& filter) -> bool { + auto filter_type = parse_apo_filter(line, filter); + + if (filter_type.empty()) { + return false; + } + + // The configuration line refers to an existing APO filter, so we try to get the other parameters. + parse_apo_frequency(line, filter); + + // Inspired by function "para_equalizer_ui::import_rew_file(const LSPString*)" + // inside 'lsp-plugins/src/ui/plugins/para_equalizer_ui.cpp' at + // https://github.com/sadko4u/lsp-plugins + if (filter_type == "PK" || filter_type == "MODAL" || filter_type == "PEQ") { + parse_apo_gain(line, filter); + + parse_apo_quality(line, filter); + } else if (filter_type == "LP" || filter_type == "LPQ" || filter_type == "HP" || filter_type == "HPQ") { + parse_apo_quality(line, filter); + } else if (filter_type == "LS" || filter_type == "LSC" || filter_type == "HS" || filter_type == "HSC") { + parse_apo_gain(line, filter); + + if (!parse_apo_quality(line, filter)) { + filter.quality = 2.0F / 3.0F; + } + } else if (filter_type == "LS 6DB") { + filter.freq = filter.freq * 2.0F / 3.0F; + filter.quality = std::numbers::sqrt2_v / 3.0F; + + parse_apo_gain(line, filter); + } else if (filter_type == "LS 12DB") { + filter.freq = filter.freq * 3.0F / 2.0F; + + parse_apo_gain(line, filter); + } else if (filter_type == "HS 6DB") { + filter.freq = filter.freq / (1.0F / std::numbers::sqrt2_v); + filter.quality = std::numbers::sqrt2_v / 3.0F; + + parse_apo_gain(line, filter); + } else if (filter_type == "HS 12DB") { + filter.freq = filter.freq * (1.0F / std::numbers::sqrt2_v); + + parse_apo_gain(line, filter); + } else if (filter_type == "NO") { + if (!parse_apo_quality(line, filter)) { + filter.quality = 100.0F / 3.0F; + } + } else if (filter_type == "AP") { + parse_apo_quality(line, filter); + } + + // If the APO filter type is different than the ones specified above, + // it's set as Off since it's not supported by LSP Equalizer. + // Default values are assumed. + return true; +} + +auto import_apo_preset(EqualizerBox* self, const std::string& file_path) -> bool { + std::filesystem::path p{file_path}; + + if (!std::filesystem::is_regular_file(p)) { + return false; + } + + std::ifstream eq_file; + eq_file.open(p.c_str()); + + std::vector bands; + double preamp = 0.0; + + if (const auto re = std::regex(R"(^[ \t]*#)"); eq_file.is_open()) { + for (std::string line; getline(eq_file, line);) { + if (std::regex_search(line, re)) { // Avoid commented lines + continue; + } + + if (struct APO_Band filter; parse_apo_config_line(line, filter)) { + bands.push_back(filter); + } else { + parse_apo_preamp(line, preamp); + } + } + } + + eq_file.close(); + + if (bands.empty()) { + return false; + } + + /* Sort bands by freq is made by user through Equalizer::sort_bands() + std::ranges::stable_sort(bands, {}, &APO_Band::freq); */ + + const auto& max_bands = self->data->equalizer->max_bands; + + // Apply APO parameters obtained + g_settings_set_int(self->settings, "num-bands", + static_cast(std::min(static_cast(bands.size()), max_bands))); + g_settings_set_double(self->settings, "input-gain", preamp); + + std::vector settings_channels; + + // Whether to apply the parameters to both channels or the selected one only + if (g_settings_get_boolean(self->settings, "split-channels") == 0) { + settings_channels.push_back(self->settings_left); + settings_channels.push_back(self->settings_right); + } else if (g_strcmp0(gtk_stack_get_visible_child_name(self->stack), "page_left_channel") == 0) { + settings_channels.push_back(self->settings_left); + } else { + settings_channels.push_back(self->settings_right); + } + + for (uint n = 0U, apo_bands = bands.size(); n < max_bands; n++) { + for (auto* channel : settings_channels) { + if (n < apo_bands) { + g_settings_set_string(channel, band_type[n].data(), bands[n].type.c_str()); + g_settings_set_string(channel, band_mode[n].data(), "APO (DR)"); + g_settings_set_double(channel, band_frequency[n].data(), bands[n].freq); + g_settings_set_double(channel, band_gain[n].data(), bands[n].gain); + g_settings_set_double(channel, band_q[n].data(), bands[n].quality); + } else { + g_settings_set_string(channel, band_type[n].data(), "Off"); + g_settings_reset(channel, band_mode[n].data()); + g_settings_reset(channel, band_frequency[n].data()); + g_settings_reset(channel, band_gain[n].data()); + g_settings_reset(channel, band_q[n].data()); + } + + g_settings_reset(channel, band_slope[n].data()); + g_settings_reset(channel, band_solo[n].data()); + g_settings_reset(channel, band_mute[n].data()); + } + } + + return true; +} + +void on_import_apo_preset_clicked(EqualizerBox* self, GtkButton* btn) { + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->data->application)); + + auto* dialog = gtk_file_dialog_new(); + + gtk_file_dialog_set_title(dialog, _("Import APO Preset File")); + gtk_file_dialog_set_accept_label(dialog, _("Open")); + + GListStore* filters = g_list_store_new(GTK_TYPE_FILE_FILTER); + + auto* filter = gtk_file_filter_new(); + + gtk_file_filter_add_pattern(filter, "*.txt"); + gtk_file_filter_set_name(filter, _("APO Presets")); + + g_list_store_append(filters, filter); + + g_object_unref(filter); + + gtk_file_dialog_set_filters(dialog, G_LIST_MODEL(filters)); + + g_object_unref(filters); + + gtk_file_dialog_open( + dialog, active_window, nullptr, + +[](GObject* source_object, GAsyncResult* result, gpointer user_data) { + auto* self = static_cast(user_data); + auto* dialog = GTK_FILE_DIALOG(source_object); + + auto* file = gtk_file_dialog_open_finish(dialog, result, nullptr); + + if (file != nullptr) { + auto* path = g_file_get_path(file); + + if (!import_apo_preset(self, path)) { + // notify error on preset loading + ui::show_fixed_toast( + self->toast_overlay, + _("APO Preset Not Loaded. File Format May Be Not Supported. Please Check Its Content.")); + } + + g_free(path); + + g_object_unref(file); + } + }, + self); +} + +// ### End APO Preset Section ### + +// ### GraphicEQ Section ### + +auto parse_graphiceq_config(const std::string& str, std::vector& bands) -> bool { + std::smatch full_match; + + // The first parsing stage is to ensure the given string contains a + // substring corresponding to the GraphicEQ format reported in the documentation: + // https://sourceforge.net/p/equalizerapo/wiki/Configuration%20reference/#graphiceq-since-version-10 + + // In order to do it, the following regular expression is used: + static const auto re_geq = + std::regex(R"(graphiceq\s*:((?:\s*\d+(?:,\d+)?(?:\.\d+)?\s+[+-]?\d+(?:\.\d+)?[ \t]*(?:;|$))+))", + std::regex::icase); + + // That regex is quite permissive since: + // - It's case insensitive; + // - Gain values can be signed (with leading +/-); + // - Frequency values can use a comma as thousand separator. + + // Note that the last class does not include the newline as whitespaces to allow + // matching the `$` as the end of line (not needed in this case, but it will also + // work if the input string will be multiline in the future). + // This ensures the last band is captured with or without the final `;`. + // The regex has been tested at https://regex101.com/r/JRwf4G/1 + + std::regex_search(str, full_match, re_geq); + + // The regex captures the full match and a group related to the sequential bands. + if (full_match.size() != 2U) { + return false; + } + + // Save the substring with all the bands and use it to extract the values. + // It can't be const because it's used to store the sub-sequential strings + // from the match_result class with suffix(). See the following while loop. + auto bands_substr = full_match.str(1); + + // Couldn't we extract the values in one only regex checking also the GraphicEQ format? + // No, there's no way. Even with Perl Compatible Regex (PCRE) checking the whole format + // and capturing the values will return only the last repeated group (the last band), + // but we need all of them. + std::smatch band_match; + static const auto re_geq_band = std::regex(R"((\d+(?:,\d+)?(?:\.\d+)?)\s+([+-]?\d+(?:\.\d+)?))"); + + // C++ regex does not support the global PCRE flag, so we need to repeat the search in a loop. + while (std::regex_search(bands_substr, band_match, re_geq_band)) { + // The size of the match should be 3: + // The full match with two additional groups (frequency and gain value). + if (band_match.size() != 3U) { + break; + } + + struct GraphicEQ_Band band; + + // Extract frequency. It could have a comma as thousands separator + // to be removed for the correct float conversion. + const auto freq_str = std::regex_replace(band_match.str(1), std::regex(","), ""); + util::str_to_num(freq_str, band.freq); + + // Extract gain. + const auto gain_str = band_match.str(2); + util::str_to_num(gain_str, band.gain); + + // Push the band into the vector. + bands.push_back(band); + + // Save the sub-sequential string, so the regex can return the match + // for the following band (if existing). + bands_substr = band_match.suffix().str(); + } + + return !bands.empty(); +} + +auto import_graphiceq_preset(EqualizerBox* self, const std::string& file_path) -> bool { + std::filesystem::path p{file_path}; + + if (!std::filesystem::is_regular_file(p)) { + return false; + } + + std::ifstream eq_file; + eq_file.open(p.c_str()); + + std::vector bands; + + if (const auto re = std::regex(R"(^[ \t]*#)"); eq_file.is_open()) { + for (std::string line; getline(eq_file, line);) { + if (std::regex_search(line, re)) { // Avoid commented lines + continue; + } + if (parse_graphiceq_config(line, bands)) { + break; + } + } + } + + eq_file.close(); + + if (bands.empty()) { + return false; + } + + /* Sort bands by freq is made by user through Equalizer::sort_bands() + std::ranges::stable_sort(bands, {}, &GraphicEQ_Band::freq); */ + + const auto& max_bands = self->data->equalizer->max_bands; + + // Apply GraphicEQ parameters obtained + g_settings_set_int(self->settings, "num-bands", + static_cast(std::min(static_cast(bands.size()), max_bands))); + + std::vector settings_channels; + + // Whether to apply the parameters to both channels or the selected one only + if (g_settings_get_boolean(self->settings, "split-channels") == 0) { + settings_channels.push_back(self->settings_left); + settings_channels.push_back(self->settings_right); + } else if (g_strcmp0(gtk_stack_get_visible_child_name(self->stack), "page_left_channel") == 0) { + settings_channels.push_back(self->settings_left); + } else { + settings_channels.push_back(self->settings_right); + } + + for (uint n = 0U, geq_bands = bands.size(); n < max_bands; n++) { + for (auto* channel : settings_channels) { + if (n < geq_bands) { + g_settings_set_string(channel, band_type[n].data(), "Bell"); + g_settings_set_double(channel, band_frequency[n].data(), bands[n].freq); + g_settings_set_double(channel, band_gain[n].data(), bands[n].gain); + } else { + g_settings_set_string(channel, band_type[n].data(), "Off"); + g_settings_reset(channel, band_frequency[n].data()); + g_settings_reset(channel, band_gain[n].data()); + } + + g_settings_reset(channel, band_mode[n].data()); + g_settings_reset(channel, band_q[n].data()); + g_settings_reset(channel, band_slope[n].data()); + g_settings_reset(channel, band_solo[n].data()); + g_settings_reset(channel, band_mute[n].data()); + } + } + + return true; +} + +void on_import_geq_preset_clicked(EqualizerBox* self, GtkButton* btn) { + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->data->application)); + + auto* dialog = gtk_file_dialog_new(); + + gtk_file_dialog_set_title(dialog, _("Import GraphicEQ Preset File")); + gtk_file_dialog_set_accept_label(dialog, _("Open")); + + GListStore* filters = g_list_store_new(GTK_TYPE_FILE_FILTER); + + auto* filter = gtk_file_filter_new(); + + gtk_file_filter_add_pattern(filter, "*.txt"); + gtk_file_filter_set_name(filter, _("GraphicEQ Presets")); + + g_list_store_append(filters, filter); + + g_object_unref(filter); + + gtk_file_dialog_set_filters(dialog, G_LIST_MODEL(filters)); + + g_object_unref(filters); + + gtk_file_dialog_open( + dialog, active_window, nullptr, + +[](GObject* source_object, GAsyncResult* result, gpointer user_data) { + auto* self = static_cast(user_data); + auto* dialog = GTK_FILE_DIALOG(source_object); + + auto* file = gtk_file_dialog_open_finish(dialog, result, nullptr); + + if (file != nullptr) { + auto* path = g_file_get_path(file); + + if (!import_graphiceq_preset(self, path)) { + // notify error on preset loading + ui::show_fixed_toast( + self->toast_overlay, + _("GraphicEQ Preset Not Loaded. File Format May Be Not Supported. Please Check Its Content.")); + } + + g_free(path); + + g_object_unref(file); + } + }, + self); +} + +// ### End GraphicEQ Section ### + +auto sort_band_widgets(EqualizerBox* self, const int nbands, GSettings* settings, const bool& sort_by_freq) + -> std::vector { + std::vector list(nbands); + + std::iota(list.begin(), list.end(), 0); + + if (sort_by_freq) { + std::ranges::sort(list, [=](const int& a, const int& b) { + const auto freq_a = g_settings_get_double(settings, tags::equalizer::band_frequency[a].data()); + + const auto freq_b = g_settings_get_double(settings, tags::equalizer::band_frequency[b].data()); + + return freq_a < freq_b; + }); + } + + std::vector output; + + output.reserve(nbands); + + for (int n = 0; n < nbands; n++) { + output.push_back(util::to_string(list[n])); + } + + return output; +} + +void build_all_bands(EqualizerBox* self, const bool& sort_by_freq = false) { + const auto split = g_settings_get_boolean(self->settings, "split-channels") != 0; + + const auto nbands = g_settings_get_int(self->settings, "num-bands"); + + auto list = sort_band_widgets(self, nbands, self->settings_left, sort_by_freq); + + gtk_string_list_splice(self->string_list_left, 0, g_list_model_get_n_items(G_LIST_MODEL(self->string_list_left)), + util::make_gchar_pointer_vector(list).data()); + + if (split) { + list = sort_band_widgets(self, nbands, self->settings_right, sort_by_freq); + + gtk_string_list_splice(self->string_list_right, 0, g_list_model_get_n_items(G_LIST_MODEL(self->string_list_right)), + util::make_gchar_pointer_vector(list).data()); + } +} + +void on_sort_bands(EqualizerBox* self, GtkButton* btn) { + self->data->equalizer->sort_bands(); +} + +template +void setup_listview(EqualizerBox* self) { + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect(factory, "setup", + G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, EqualizerBox* self) { + auto* band_box = ui::equalizer_band_box::create(); + + gtk_list_item_set_activatable(item, 0); + gtk_list_item_set_child(item, GTK_WIDGET(band_box)); + + g_object_set_data(G_OBJECT(item), "band-box", band_box); + + if constexpr (channel == Channel::left) { + ui::equalizer_band_box::setup(band_box, self->settings_left); + } else if constexpr (channel == Channel::right) { + ui::equalizer_band_box::setup(band_box, self->settings_right); + } + }), + self); + + g_signal_connect( + factory, "bind", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, EqualizerBox* self) { + auto* band_box = + static_cast(g_object_get_data(G_OBJECT(item), "band-box")); + + auto* child_item = gtk_list_item_get_item(item); + auto* band_id_str = gtk_string_object_get_string(GTK_STRING_OBJECT(child_item)); + + int band_id = 0; + + util::str_to_num(band_id_str, band_id); + + ui::equalizer_band_box::bind(band_box, band_id); + }), + self); + + if constexpr (channel == Channel::left) { + gtk_list_view_set_factory(self->listview_left, factory); + } else if constexpr (channel == Channel::right) { + gtk_list_view_set_factory(self->listview_right, factory); + } + + g_object_unref(factory); +} + +void setup(EqualizerBox* self, + std::shared_ptr equalizer, + const std::string& schema_path, + app::Application* application) { + self->data->equalizer = equalizer; + + self->data->application = application; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::equalizer::id, schema_path.c_str()); + + self->settings_left = + g_settings_new_with_path(tags::schema::equalizer::channel_id, (schema_path + "leftchannel/").c_str()); + + self->settings_right = + g_settings_new_with_path(tags::schema::equalizer::channel_id, (schema_path + "rightchannel/").c_str()); + + equalizer->set_post_messages(true); + + setup_listview(self); + setup_listview(self); + + build_all_bands(self); + + self->data->connections.push_back(equalizer->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(equalizer->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->equalizer->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "num-bands", gtk_spin_button_get_adjustment(self->nbands), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "split-channels", self->split_channels, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "mode", self->mode); + + g_settings_bind(self->settings, "balance", gtk_spin_button_get_adjustment(self->balance), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "pitch-left", gtk_spin_button_get_adjustment(self->pitch_left), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "pitch-right", gtk_spin_button_get_adjustment(self->pitch_right), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::num-bands", + G_CALLBACK(+[](GSettings* settings, char* key, EqualizerBox* self) { build_all_bands(self); }), self)); + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::split-channels", G_CALLBACK(+[](GSettings* settings, char* key, EqualizerBox* self) { + gtk_stack_set_visible_child_name(self->stack, "page_left_channel"); + + build_all_bands(self); + }), + self)); +} + +void dispose(GObject* object) { + auto* self = EE_EQUALIZER_BOX(object); + + self->data->equalizer->set_post_messages(false); + + self->data->equalizer->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + g_object_unref(self->settings_left); + g_object_unref(self->settings_right); + + util::debug("disposed"); + + G_OBJECT_CLASS(equalizer_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_EQUALIZER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(equalizer_box_parent_class)->finalize(object); +} + +void equalizer_box_class_init(EqualizerBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::equalizer_ui); + + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, toast_overlay); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, stack); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, listview_left); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, listview_right); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, string_list_left); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, string_list_right); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, nbands); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, mode); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, split_channels); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, balance); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, pitch_left); + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, pitch_right); + + gtk_widget_class_bind_template_child(widget_class, EqualizerBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); + gtk_widget_class_bind_template_callback(widget_class, on_flat_response); + gtk_widget_class_bind_template_callback(widget_class, on_calculate_frequencies); + gtk_widget_class_bind_template_callback(widget_class, on_sort_bands); + gtk_widget_class_bind_template_callback(widget_class, on_import_apo_preset_clicked); + gtk_widget_class_bind_template_callback(widget_class, on_import_geq_preset_clicked); +} + +void equalizer_box_init(EqualizerBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"%">(self->balance); + + prepare_spinbuttons<"st">(self->pitch_left, self->pitch_right); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> EqualizerBox* { + return static_cast(g_object_new(EE_TYPE_EQUALIZER_BOX, nullptr)); +} + +} // namespace ui::equalizer_box diff --git a/src/exciter.cpp b/src/exciter.cpp new file mode 100644 index 0000000..85bca7b --- /dev/null +++ b/src/exciter.cpp @@ -0,0 +1,115 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "exciter.hpp" + +Exciter::Exciter(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::exciter, tags::plugin_package::calf, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://calf.sourceforge.net/plugins/Exciter"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://calf.sourceforge.net/plugins/Exciter is not installed"); + } + + lv2_wrapper->bind_key_double_db<"amount", "amount">(settings); + + lv2_wrapper->bind_key_double<"drive", "harmonics">(settings); + + lv2_wrapper->bind_key_double<"freq", "scope">(settings); + + lv2_wrapper->bind_key_double<"ceil", "ceil">(settings); + + lv2_wrapper->bind_key_double<"blend", "blend">(settings); + + lv2_wrapper->bind_key_bool<"ceil_active", "ceil-active">(settings); + + lv2_wrapper->bind_key_bool<"listen", "listen">(settings); + + setup_input_output_gain(); +} + +Exciter::~Exciter() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Exciter::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Exciter::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + /// harmonics needed as double for levelbar widget ui, so we convert it here + + harmonics_port_value = static_cast(lv2_wrapper->get_control_port_value("meter_drive")); + + if (!post_messages) { + return; + } + + harmonics.emit(harmonics_port_value); + + notify(); + } + } +} + +auto Exciter::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/exciter_preset.cpp b/src/exciter_preset.cpp new file mode 100644 index 0000000..15fa05f --- /dev/null +++ b/src/exciter_preset.cpp @@ -0,0 +1,69 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "exciter_preset.hpp" + +ExciterPreset::ExciterPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::exciter::id, + tags::schema::exciter::input_path, + tags::schema::exciter::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::exciter).append("#").append(util::to_string(index)); +} + +void ExciterPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["amount"] = g_settings_get_double(settings, "amount"); + + json[section][instance_name]["harmonics"] = g_settings_get_double(settings, "harmonics"); + + json[section][instance_name]["scope"] = g_settings_get_double(settings, "scope"); + + json[section][instance_name]["ceil"] = g_settings_get_double(settings, "ceil"); + + json[section][instance_name]["blend"] = g_settings_get_double(settings, "blend"); + + json[section][instance_name]["ceil-active"] = g_settings_get_boolean(settings, "ceil-active") != 0; +} + +void ExciterPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "amount", "amount"); + + update_key(json.at(section).at(instance_name), settings, "harmonics", "harmonics"); + + update_key(json.at(section).at(instance_name), settings, "scope", "scope"); + + update_key(json.at(section).at(instance_name), settings, "ceil", "ceil"); + + update_key(json.at(section).at(instance_name), settings, "blend", "blend"); + + update_key(json.at(section).at(instance_name), settings, "ceil-active", "ceil-active"); +} diff --git a/src/exciter_ui.cpp b/src/exciter_ui.cpp new file mode 100644 index 0000000..eeb04a9 --- /dev/null +++ b/src/exciter_ui.cpp @@ -0,0 +1,228 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "exciter_ui.hpp" + +namespace ui::exciter_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr exciter; + + std::vector connections; + + std::vector gconnections; +}; + +struct _ExciterBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkLevelBar* harmonics_levelbar; + + GtkLabel* harmonics_levelbar_label; + + GtkSpinButton *ceil, *amount, *harmonics, *scope; + + GtkScale* blend; + + GtkToggleButton *ceil_active, *listen; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ExciterBox, exciter_box, GTK_TYPE_BOX) + +void on_reset(ExciterBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(ExciterBox* self, std::shared_ptr exciter, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->exciter = exciter; + + self->settings = g_settings_new_with_path(tags::schema::exciter::id, schema_path.c_str()); + + exciter->set_post_messages(true); + + self->data->connections.push_back(exciter->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(exciter->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(exciter->harmonics.connect([=](const double value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LEVEL_BAR(self->harmonics_levelbar) || !GTK_IS_LABEL(self->harmonics_levelbar_label)) { + return; + } + + gtk_level_bar_set_value(self->harmonics_levelbar, value); + gtk_label_set_text(self->harmonics_levelbar_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->exciter->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "amount", gtk_spin_button_get_adjustment(self->amount), "value", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "harmonics", gtk_spin_button_get_adjustment(self->harmonics), "value", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "scope", gtk_spin_button_get_adjustment(self->scope), "value", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "ceil", gtk_spin_button_get_adjustment(self->ceil), "value", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "blend", gtk_range_get_adjustment(GTK_RANGE(self->blend)), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "listen", self->listen, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "ceil-active", self->ceil_active, "active", G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_EXCITER_BOX(object); + + self->data->exciter->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(exciter_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_EXCITER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(exciter_box_parent_class)->finalize(object); +} + +void exciter_box_class_init(ExciterBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::exciter_ui); + + gtk_widget_class_bind_template_child(widget_class, ExciterBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, ExciterBox, harmonics_levelbar_label); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, harmonics_levelbar); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, ceil); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, amount); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, harmonics); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, scope); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, blend); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, ceil_active); + gtk_widget_class_bind_template_child(widget_class, ExciterBox, listen); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void exciter_box_init(ExciterBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"dB">(self->amount); + + prepare_spinbuttons<"Hz">(self->scope, self->ceil); + + prepare_spinbuttons<"">(self->harmonics); + + prepare_scales<"">(self->blend); +} + +auto create() -> ExciterBox* { + return static_cast(g_object_new(EE_TYPE_EXCITER_BOX, nullptr)); +} + +} // namespace ui::exciter_box diff --git a/src/expander.cpp b/src/expander.cpp new file mode 100644 index 0000000..ec2f218 --- /dev/null +++ b/src/expander.cpp @@ -0,0 +1,231 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "expander.hpp" + +Expander::Expander(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::expander, tags::plugin_package::lsp, schema, schema_path, pipe_manager, true) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/sc_expander_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/sc_expander_stereo is not installed"); + } + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-type", + G_CALLBACK(+[](GSettings* settings, const char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-input-device", + G_CALLBACK(+[](GSettings* settings, const char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + lv2_wrapper->bind_key_enum<"em", "mode">(settings); + + lv2_wrapper->bind_key_enum<"sci", "sidechain-type">(settings); + + lv2_wrapper->bind_key_enum<"scm", "sidechain-mode">(settings); + + lv2_wrapper->bind_key_enum<"scs", "sidechain-source">(settings); + + lv2_wrapper->bind_key_enum<"sscs", "stereo-split-source">(settings); + + lv2_wrapper->bind_key_enum<"shpm", "hpf-mode">(settings); + + lv2_wrapper->bind_key_enum<"slpm", "lpf-mode">(settings); + + lv2_wrapper->bind_key_bool<"ssplit", "stereo-split">(settings); + + lv2_wrapper->bind_key_bool<"scl", "sidechain-listen">(settings); + + lv2_wrapper->bind_key_double<"at", "attack">(settings); + + lv2_wrapper->bind_key_double<"rt", "release">(settings); + + lv2_wrapper->bind_key_double<"er", "ratio">(settings); + + lv2_wrapper->bind_key_double<"scr", "sidechain-reactivity">(settings); + + lv2_wrapper->bind_key_double<"sla", "sidechain-lookahead">(settings); + + lv2_wrapper->bind_key_double<"shpf", "hpf-frequency">(settings); + + lv2_wrapper->bind_key_double<"slpf", "lpf-frequency">(settings); + + lv2_wrapper->bind_key_double_db<"al", "threshold">(settings); + + lv2_wrapper->bind_key_double_db<"kn", "knee">(settings); + + lv2_wrapper->bind_key_double_db<"mk", "makeup">(settings); + + lv2_wrapper->bind_key_double_db<"scp", "sidechain-preamp">(settings); + + // The following controls can assume -inf + lv2_wrapper->bind_key_double_db<"rrl", "release-threshold", false>(settings); + + lv2_wrapper->bind_key_double_db<"cdr", "dry", false>(settings); + + lv2_wrapper->bind_key_double_db<"cwt", "wet", false>(settings); + + setup_input_output_gain(); +} + +Expander::~Expander() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Expander::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Expander::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out, probe_left, probe_right); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + reduction_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("rlm_l") + lv2_wrapper->get_control_port_value("rlm_r")); + + sidechain_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("slm_l") + lv2_wrapper->get_control_port_value("slm_r")); + + curve_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("clm_l") + lv2_wrapper->get_control_port_value("clm_r")); + + envelope_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("elm_l") + lv2_wrapper->get_control_port_value("elm_r")); + + reduction.emit(reduction_port_value); + sidechain.emit(sidechain_port_value); + curve.emit(curve_port_value); + envelope.emit(envelope_port_value); + + notify(); + } + } +} + +void Expander::update_sidechain_links(const std::string& key) { + if (util::gsettings_get_string(settings, "sidechain-type") != "External") { + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + return; + } + + const auto device_name = util::gsettings_get_string(settings, "sidechain-input-device"); + + NodeInfo input_device = pm->ee_source_node; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == device_name) { + input_device = node; + + break; + } + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + for (const auto& link : pm->link_nodes(input_device.id, get_node_id(), true)) { + list_proxies.push_back(link); + } +} + +void Expander::update_probe_links() { + update_sidechain_links(""); +} + +auto Expander::get_latency_seconds() -> float { + return this->latency_value; +} diff --git a/src/expander_preset.cpp b/src/expander_preset.cpp new file mode 100644 index 0000000..3f6c453 --- /dev/null +++ b/src/expander_preset.cpp @@ -0,0 +1,136 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "expander_preset.hpp" + +ExpanderPreset::ExpanderPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::expander::id, + tags::schema::expander::input_path, + tags::schema::expander::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::expander).append("#").append(util::to_string(index)); +} + +void ExpanderPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["dry"] = g_settings_get_double(settings, "dry"); + + json[section][instance_name]["wet"] = g_settings_get_double(settings, "wet"); + + json[section][instance_name]["mode"] = util::gsettings_get_string(settings, "mode"); + + json[section][instance_name]["attack"] = g_settings_get_double(settings, "attack"); + + json[section][instance_name]["release"] = g_settings_get_double(settings, "release"); + + json[section][instance_name]["release-threshold"] = g_settings_get_double(settings, "release-threshold"); + + json[section][instance_name]["threshold"] = g_settings_get_double(settings, "threshold"); + + json[section][instance_name]["ratio"] = g_settings_get_double(settings, "ratio"); + + json[section][instance_name]["knee"] = g_settings_get_double(settings, "knee"); + + json[section][instance_name]["makeup"] = g_settings_get_double(settings, "makeup"); + + json[section][instance_name]["stereo-split"] = g_settings_get_boolean(settings, "stereo-split") != 0; + + json[section][instance_name]["sidechain"]["type"] = util::gsettings_get_string(settings, "sidechain-type"); + + json[section][instance_name]["sidechain"]["mode"] = util::gsettings_get_string(settings, "sidechain-mode"); + + json[section][instance_name]["sidechain"]["source"] = util::gsettings_get_string(settings, "sidechain-source"); + + json[section][instance_name]["sidechain"]["stereo-split-source"] = + util::gsettings_get_string(settings, "stereo-split-source"); + + json[section][instance_name]["sidechain"]["preamp"] = g_settings_get_double(settings, "sidechain-preamp"); + + json[section][instance_name]["sidechain"]["reactivity"] = g_settings_get_double(settings, "sidechain-reactivity"); + + json[section][instance_name]["sidechain"]["lookahead"] = g_settings_get_double(settings, "sidechain-lookahead"); + + json[section][instance_name]["hpf-mode"] = util::gsettings_get_string(settings, "hpf-mode"); + + json[section][instance_name]["hpf-frequency"] = g_settings_get_double(settings, "hpf-frequency"); + + json[section][instance_name]["lpf-mode"] = util::gsettings_get_string(settings, "lpf-mode"); + + json[section][instance_name]["lpf-frequency"] = g_settings_get_double(settings, "lpf-frequency"); +} + +void ExpanderPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "dry", "dry"); + + update_key(json.at(section).at(instance_name), settings, "wet", "wet"); + + update_key(json.at(section).at(instance_name), settings, "mode", "mode"); + + update_key(json.at(section).at(instance_name), settings, "attack", "attack"); + + update_key(json.at(section).at(instance_name), settings, "release", "release"); + + update_key(json.at(section).at(instance_name), settings, "release-threshold", "release-threshold"); + + update_key(json.at(section).at(instance_name), settings, "threshold", "threshold"); + + update_key(json.at(section).at(instance_name), settings, "ratio", "ratio"); + + update_key(json.at(section).at(instance_name), settings, "knee", "knee"); + + update_key(json.at(section).at(instance_name), settings, "makeup", "makeup"); + + update_key(json.at(section).at(instance_name), settings, "stereo-split", "stereo-split"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-type", "type"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-mode", "mode"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "stereo-split-source", + "stereo-split-source"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-source", "source"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-preamp", "preamp"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-reactivity", + "reactivity"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-lookahead", "lookahead"); + + update_key(json.at(section).at(instance_name), settings, "hpf-mode", "hpf-mode"); + + update_key(json.at(section).at(instance_name), settings, "hpf-frequency", "hpf-frequency"); + + update_key(json.at(section).at(instance_name), settings, "lpf-mode", "lpf-mode"); + + update_key(json.at(section).at(instance_name), settings, "lpf-frequency", "lpf-frequency"); +} diff --git a/src/expander_ui.cpp b/src/expander_ui.cpp new file mode 100644 index 0000000..d17123d --- /dev/null +++ b/src/expander_ui.cpp @@ -0,0 +1,443 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "expander_ui.hpp" + +namespace ui::expander_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr expander; + + std::vector connections; + + std::vector gconnections; +}; + +struct _ExpanderBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkLabel *gain_label, *sidechain_label, *curve_label, *envelope_label; + + GtkSpinButton *attack, *release, *release_threshold, *threshold, *knee, *ratio, *makeup, *dry, *wet, *preamp, + *reactivity, *lookahead, *hpf_freq, *lpf_freq; + + GtkToggleButton *listen, *show_native_ui; + + GtkCheckButton* stereo_split; + + GtkDropDown *expander_mode, *sidechain_type, *sidechain_mode, *sidechain_source, *stereo_split_source, *lpf_mode, + *hpf_mode, *dropdown_input_devices; + + GListStore* input_devices_model; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ExpanderBox, expander_box, GTK_TYPE_BOX) + +void on_reset(ExpanderBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(ExpanderBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->expander->show_native_ui(); + } else { + self->data->expander->close_native_ui(); + } +} + +auto set_dropdown_sensitive(ExpanderBox* self, const guint selected_id) -> gboolean { + // Sensitive on External Device selected + return (selected_id == 1U) ? 1 : 0; +} + +void setup_dropdown_input_device(ExpanderBox* self) { + auto* selection = gtk_single_selection_new(G_LIST_MODEL(self->input_devices_model)); + + g_signal_connect(self->dropdown_input_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, ExpanderBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->settings, "sidechain-input-device", holder->info->name.c_str()); + } + }), + self); + + gtk_drop_down_set_model(self->dropdown_input_devices, G_LIST_MODEL(self->input_devices_model)); + + g_object_unref(selection); +} + +void setup(ExpanderBox* self, std::shared_ptr expander, const std::string& schema_path, PipeManager* pm) { + self->data->expander = expander; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::expander::id, schema_path.c_str()); + + expander->set_post_messages(true); + + setup_dropdown_input_device(self); + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == tags::pipewire::ee_sink_name || node.name == tags::pipewire::ee_source_name) { + continue; + } + + if (node.media_class == tags::pipewire::media_class::source || + node.media_class == tags::pipewire::media_class::virtual_source || + node.media_role == tags::pipewire::media_role::dsp) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + } + } + + self->data->connections.push_back(expander->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(expander->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(expander->reduction.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->gain_label)) { + return; + } + + gtk_label_set_text(self->gain_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(expander->envelope.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->envelope_label)) { + return; + } + + gtk_label_set_text(self->envelope_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(expander->sidechain.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->sidechain_label)) { + return; + } + + gtk_label_set_text(self->sidechain_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(expander->curve.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->curve_label)) { + return; + } + + gtk_label_set_text(self->curve_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(pm->source_added.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->source_removed.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->input_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->expander->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "dry", gtk_spin_button_get_adjustment(self->dry), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet", gtk_spin_button_get_adjustment(self->wet), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "attack", gtk_spin_button_get_adjustment(self->attack), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "knee", gtk_spin_button_get_adjustment(self->knee), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "makeup", gtk_spin_button_get_adjustment(self->makeup), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "ratio", gtk_spin_button_get_adjustment(self->ratio), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "release", gtk_spin_button_get_adjustment(self->release), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "threshold", gtk_spin_button_get_adjustment(self->threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-preamp", gtk_spin_button_get_adjustment(self->preamp), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-reactivity", gtk_spin_button_get_adjustment(self->reactivity), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-lookahead", gtk_spin_button_get_adjustment(self->lookahead), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "release-threshold", gtk_spin_button_get_adjustment(self->release_threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "hpf-frequency", gtk_spin_button_get_adjustment(self->hpf_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "lpf-frequency", gtk_spin_button_get_adjustment(self->lpf_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-listen", self->listen, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "mode", self->expander_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-type", self->sidechain_type); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-mode", self->sidechain_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-source", self->sidechain_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "stereo-split-source", self->stereo_split_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "hpf-mode", self->hpf_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "lpf-mode", self->lpf_mode); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); + + // bind source dropdowns sensitive property to split-stereo gsettings boolean + + g_settings_bind(self->settings, "stereo-split", self->sidechain_source, "sensitive", + static_cast(G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN)); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split_source, "sensitive", G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_EXPANDER_BOX(object); + + self->data->expander->set_post_messages(false); + + self->data->expander->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(expander_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_EXPANDER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(expander_box_parent_class)->finalize(object); +} + +void expander_box_class_init(ExpanderBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::expander_ui); + + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, gain_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, sidechain_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, curve_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, envelope_label); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, attack); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, release); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, release_threshold); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, threshold); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, knee); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, ratio); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, makeup); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, dry); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, wet); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, preamp); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, reactivity); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, lookahead); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, hpf_freq); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, lpf_freq); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, expander_mode); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, sidechain_type); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, sidechain_mode); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, sidechain_source); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, stereo_split_source); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, stereo_split); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, lpf_mode); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, hpf_mode); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, listen); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, dropdown_input_devices); + gtk_widget_class_bind_template_child(widget_class, ExpanderBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); + gtk_widget_class_bind_template_callback(widget_class, set_dropdown_sensitive); +} + +void expander_box_init(ExpanderBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + + prepare_spinbuttons<"dB">(self->threshold, self->knee, self->makeup, self->preamp); + + prepare_spinbuttons<"Hz">(self->hpf_freq, self->lpf_freq); + + prepare_spinbuttons<"ms">(self->attack, self->release, self->lookahead, self->reactivity); + + prepare_spinbuttons<"">(self->ratio); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->release_threshold, self->dry, self->wet); +} + +auto create() -> ExpanderBox* { + return static_cast(g_object_new(EE_TYPE_EXPANDER_BOX, nullptr)); +} + +} // namespace ui::expander_box diff --git a/src/filter.cpp b/src/filter.cpp new file mode 100644 index 0000000..145668a --- /dev/null +++ b/src/filter.cpp @@ -0,0 +1,121 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "filter.hpp" + +Filter::Filter(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::filter, tags::plugin_package::lsp, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/filter_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/sc_gate_stereo is not installed"); + } + + lv2_wrapper->bind_key_double<"f", "frequency">(settings); + + lv2_wrapper->bind_key_double<"w", "width">(settings); + + lv2_wrapper->bind_key_double<"q", "quality">(settings); + + lv2_wrapper->bind_key_double<"bal", "balance">(settings); + + lv2_wrapper->bind_key_double_db<"g", "gain">(settings); + + lv2_wrapper->bind_key_enum<"ft", "type">(settings); + + lv2_wrapper->bind_key_enum<"fm", "mode">(settings); + + lv2_wrapper->bind_key_enum<"mode", "equal-mode">(settings); + + lv2_wrapper->bind_key_enum<"s", "slope">(settings); + + setup_input_output_gain(); + + // g_timeout_add_seconds(1, GSourceFunc(+[](Filter* self) { + // if (!self->lv2_wrapper->has_ui()) { + // self->lv2_wrapper->load_ui(); + // } else { + // self->lv2_wrapper->notify_ui(); + // self->lv2_wrapper->update_ui(); + // } + + // return 1; + // }), + // this); +} + +Filter::~Filter() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Filter::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Filter::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto Filter::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/filter_preset.cpp b/src/filter_preset.cpp new file mode 100644 index 0000000..9767c19 --- /dev/null +++ b/src/filter_preset.cpp @@ -0,0 +1,81 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "filter_preset.hpp" + +FilterPreset::FilterPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::filter::id, + tags::schema::filter::input_path, + tags::schema::filter::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::filter).append("#").append(util::to_string(index)); +} + +void FilterPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["frequency"] = g_settings_get_double(settings, "frequency"); + + json[section][instance_name]["width"] = g_settings_get_double(settings, "width"); + + json[section][instance_name]["gain"] = g_settings_get_double(settings, "gain"); + + json[section][instance_name]["quality"] = g_settings_get_double(settings, "quality"); + + json[section][instance_name]["balance"] = g_settings_get_double(settings, "balance"); + + json[section][instance_name]["type"] = util::gsettings_get_string(settings, "type"); + + json[section][instance_name]["mode"] = util::gsettings_get_string(settings, "mode"); + + json[section][instance_name]["equal-mode"] = util::gsettings_get_string(settings, "equal-mode"); + + json[section][instance_name]["slope"] = util::gsettings_get_string(settings, "slope"); +} + +void FilterPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "frequency", "frequency"); + + update_key(json.at(section).at(instance_name), settings, "width", "width"); + + update_key(json.at(section).at(instance_name), settings, "gain", "gain"); + + update_key(json.at(section).at(instance_name), settings, "quality", "quality"); + + update_key(json.at(section).at(instance_name), settings, "balance", "balance"); + + update_key(json.at(section).at(instance_name), settings, "type", "type"); + + update_key(json.at(section).at(instance_name), settings, "mode", "mode"); + + update_key(json.at(section).at(instance_name), settings, "equal-mode", "equal-mode"); + + update_key(json.at(section).at(instance_name), settings, "slope", "slope"); +} diff --git a/src/filter_ui.cpp b/src/filter_ui.cpp new file mode 100644 index 0000000..02b7a41 --- /dev/null +++ b/src/filter_ui.cpp @@ -0,0 +1,231 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "filter_ui.hpp" + +namespace ui::filter_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr filter; + + std::vector connections; + + std::vector gconnections; +}; + +struct _FilterBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkDropDown *mode, *equalizer_mode, *type, *slope; + + GtkSpinButton *frequency, *width, *gain, *quality, *balance; + + GtkToggleButton* show_native_ui; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(FilterBox, filter_box, GTK_TYPE_BOX) + +void on_reset(FilterBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(FilterBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->filter->show_native_ui(); + } else { + self->data->filter->close_native_ui(); + } +} + +void setup(FilterBox* self, std::shared_ptr filter, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->filter = filter; + + self->settings = g_settings_new_with_path(tags::schema::filter::id, schema_path.c_str()); + + filter->set_post_messages(true); + + self->data->connections.push_back(filter->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(filter->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->filter->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "frequency", gtk_spin_button_get_adjustment(self->frequency), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "width", gtk_spin_button_get_adjustment(self->width), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "gain", gtk_spin_button_get_adjustment(self->gain), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "quality", gtk_spin_button_get_adjustment(self->quality), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "balance", gtk_spin_button_get_adjustment(self->balance), "value", + G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "type", self->type); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "mode", self->mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "equal-mode", self->equalizer_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "slope", self->slope); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_FILTER_BOX(object); + + self->data->filter->set_post_messages(false); + + self->data->filter->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(filter_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_FILTER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(filter_box_parent_class)->finalize(object); +} + +void filter_box_class_init(FilterBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::filter_ui); + + gtk_widget_class_bind_template_child(widget_class, FilterBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, FilterBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, FilterBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, FilterBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, FilterBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, FilterBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, FilterBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, FilterBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, FilterBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, FilterBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, FilterBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, FilterBox, type); + gtk_widget_class_bind_template_child(widget_class, FilterBox, mode); + gtk_widget_class_bind_template_child(widget_class, FilterBox, equalizer_mode); + gtk_widget_class_bind_template_child(widget_class, FilterBox, slope); + gtk_widget_class_bind_template_child(widget_class, FilterBox, frequency); + gtk_widget_class_bind_template_child(widget_class, FilterBox, width); + gtk_widget_class_bind_template_child(widget_class, FilterBox, gain); + gtk_widget_class_bind_template_child(widget_class, FilterBox, quality); + gtk_widget_class_bind_template_child(widget_class, FilterBox, balance); + + gtk_widget_class_bind_template_child(widget_class, FilterBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); +} + +void filter_box_init(FilterBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"Hz">(self->frequency); + prepare_spinbuttons<"dB">(self->gain); + prepare_spinbuttons<"">(self->width, self->quality); + prepare_spinbuttons<"%">(self->balance); +} + +auto create() -> FilterBox* { + return static_cast(g_object_new(EE_TYPE_FILTER_BOX, nullptr)); +} + +} // namespace ui::filter_box diff --git a/src/fir_filter_bandpass.cpp b/src/fir_filter_bandpass.cpp new file mode 100644 index 0000000..83bd1f9 --- /dev/null +++ b/src/fir_filter_bandpass.cpp @@ -0,0 +1,54 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "fir_filter_bandpass.hpp" + +FirFilterBandpass::FirFilterBandpass(std::string tag) : FirFilterBase(std::move(tag)) {} + +FirFilterBandpass::~FirFilterBandpass() = default; + +void FirFilterBandpass::setup() { + const auto lowpass_kernel = create_lowpass_kernel(max_frequency, transition_band); + + // high-pass kernel + + auto highpass_kernel = create_lowpass_kernel(min_frequency, transition_band); + + std::ranges::for_each(highpass_kernel, [](auto& v) { v *= -1.0F; }); + + highpass_kernel[(highpass_kernel.size() - 1U) / 2U] += 1.0F; + + kernel.resize(highpass_kernel.size()); + + /* + Creating a bandpass from a band reject through spectral inversion https://www.dspguide.com/ch16/4.htm + */ + + for (size_t n = 0U; n < kernel.size(); n++) { + kernel[n] = lowpass_kernel[n] + highpass_kernel[n]; + } + + std::ranges::for_each(kernel, [](auto& v) { v *= -1.0F; }); + + kernel[(kernel.size() - 1U) / 2U] += 1.0F; + + delay = 0.5F * static_cast(kernel.size() - 1U) / static_cast(rate); + + setup_zita(); +} diff --git a/src/fir_filter_base.cpp b/src/fir_filter_base.cpp new file mode 100644 index 0000000..fafa4e1 --- /dev/null +++ b/src/fir_filter_base.cpp @@ -0,0 +1,210 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "fir_filter_base.hpp" + +namespace { + +constexpr auto CONVPROC_SCHEDULER_PRIORITY = 0; + +constexpr auto CONVPROC_SCHEDULER_CLASS = SCHED_FIFO; + +} // namespace + +FirFilterBase::FirFilterBase(std::string tag) : log_tag(std::move(tag)) {} + +FirFilterBase::~FirFilterBase() { + zita_ready = false; + + if (conv != nullptr) { + conv->stop_process(); + + conv->cleanup(); + + delete conv; + } +} + +void FirFilterBase::set_rate(const uint& value) { + rate = value; +} + +void FirFilterBase::set_n_samples(const uint& value) { + n_samples = value; +} + +void FirFilterBase::set_min_frequency(const float& value) { + min_frequency = value; +} + +void FirFilterBase::set_max_frequency(const float& value) { + max_frequency = value; +} + +void FirFilterBase::set_transition_band(const float& value) { + transition_band = value; +} + +void FirFilterBase::setup() {} + +auto FirFilterBase::create_lowpass_kernel(const float& cutoff, const float& transition_band) const + -> std::vector { + std::vector output; + + if (rate == 0) { + return output; + } + + /* + transition band frequency as a fraction of the sample rate + */ + + const float b = transition_band / static_cast(rate); + + /* + The kernel size must be odd: M + 1 where M is even. This is done so it can be symmetric around the main lobe + https://www.dspguide.com/ch16/1.htm + + The kernel size is related to the transition bandwidth M = 4/BW + */ + + auto M = static_cast(std::ceil(4.0F / b)); + + M = (M % 2U == 0U) ? M : M + 1U; // checking if M is even + + output.resize(M + 1U); + + /* + cutoff frequency as a fraction of the sample rate + */ + + const float fc = cutoff / static_cast(rate); + + float sum = 0.0F; + + for (size_t n = 0U; n < output.size(); n++) { + /* + windowed-sinc kernel https://www.dspguide.com/ch16/1.htm + */ + + if (n == M / 2U) { + output[n] = 2.0F * std::numbers::pi_v * fc; + } else { + output[n] = std::sin(2.0F * std::numbers::pi_v * fc * static_cast(n - static_cast(M / 2U))) / + static_cast(n - static_cast(M / 2U)); + } + + /* + Blackman window https://www.dspguide.com/ch16/1.htm + */ + + const float w = 0.42F - + 0.5F * std::cos(2.0F * std::numbers::pi_v * static_cast(n) / static_cast(M)) + + 0.08F * std::cos(4.0F * std::numbers::pi_v * static_cast(n) / static_cast(M)); + + output[n] *= w; + + sum += output[n]; + } + + /* + Normalizing so that we have unit gain at zero frequency + */ + + std::ranges::for_each(output, [&](auto& v) { v /= sum; }); + + return output; +} + +void FirFilterBase::setup_zita() { + zita_ready = false; + + if (n_samples == 0U || kernel.empty()) { + return; + } + + if (conv != nullptr) { + conv->stop_process(); + + conv->cleanup(); + + delete conv; + } + + conv = new Convproc(); + + conv->set_options(0); + + int ret = conv->configure(2, 2, kernel.size(), n_samples, n_samples, n_samples, 0.0F /*density*/); + + if (ret != 0) { + util::warning(log_tag + "can't initialise zita-convolver engine: " + util::to_string(ret, "")); + + return; + } + + ret = conv->impdata_create(0, 0, 1, kernel.data(), 0, static_cast(kernel.size())); + + if (ret != 0) { + util::warning(log_tag + "left impdata_create failed: " + util::to_string(ret, "")); + + return; + } + + ret = conv->impdata_create(1, 1, 1, kernel.data(), 0, static_cast(kernel.size())); + + if (ret != 0) { + util::warning(log_tag + "right impdata_create failed: " + util::to_string(ret, "")); + + return; + } + + ret = conv->start_process(CONVPROC_SCHEDULER_PRIORITY, CONVPROC_SCHEDULER_CLASS); + + if (ret != 0) { + util::warning(log_tag + "start_process failed: " + util::to_string(ret, "")); + + conv->stop_process(); + conv->cleanup(); + + return; + } + + // conv->print(); + + zita_ready = true; +} + +void FirFilterBase::direct_conv(const std::vector& a, const std::vector& b, std::vector& c) { + const uint M = (c.size() + 1U) / 2U; + + for (uint n = 0U; n < c.size(); n++) { + c[n] = 0.0F; + + for (uint m = 0U; m < M; m++) { + if (n > m && n - m < M) { + c[n] += a[n - m] * b[m]; + } + } + } +} + +auto FirFilterBase::get_delay() const -> float { + return delay; +} diff --git a/src/fir_filter_highpass.cpp b/src/fir_filter_highpass.cpp new file mode 100644 index 0000000..2027568 --- /dev/null +++ b/src/fir_filter_highpass.cpp @@ -0,0 +1,36 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "fir_filter_highpass.hpp" + +FirFilterHighpass::FirFilterHighpass(std::string tag) : FirFilterBase(std::move(tag)) {} + +FirFilterHighpass::~FirFilterHighpass() = default; + +void FirFilterHighpass::setup() { + kernel = create_lowpass_kernel(min_frequency, transition_band); + + std::ranges::for_each(kernel, [](auto& v) { v *= -1.0F; }); + + kernel[(kernel.size() - 1U) / 2U] += 1.0F; + + delay = 0.5F * static_cast(kernel.size() - 1U) / static_cast(rate); + + setup_zita(); +} diff --git a/src/fir_filter_lowpass.cpp b/src/fir_filter_lowpass.cpp new file mode 100644 index 0000000..5866afc --- /dev/null +++ b/src/fir_filter_lowpass.cpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "fir_filter_lowpass.hpp" + +FirFilterLowpass::FirFilterLowpass(std::string tag) : FirFilterBase(std::move(tag)) {} + +FirFilterLowpass::~FirFilterLowpass() = default; + +void FirFilterLowpass::setup() { + kernel = create_lowpass_kernel(max_frequency, transition_band); + + delay = 0.5F * static_cast(kernel.size() - 1U) / static_cast(rate); + + setup_zita(); +} diff --git a/src/gate.cpp b/src/gate.cpp new file mode 100644 index 0000000..4a9b532 --- /dev/null +++ b/src/gate.cpp @@ -0,0 +1,239 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "gate.hpp" + +Gate::Gate(const std::string& tag, const std::string& schema, const std::string& schema_path, PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::gate, tags::plugin_package::lsp, schema, schema_path, pipe_manager, true) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/sc_gate_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/sc_gate_stereo is not installed"); + } + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-input", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-input-device", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + lv2_wrapper->bind_key_enum<"sci", "sidechain-input">(settings); + + lv2_wrapper->bind_key_enum<"scm", "sidechain-mode">(settings); + + lv2_wrapper->bind_key_enum<"scs", "sidechain-source">(settings); + + lv2_wrapper->bind_key_enum<"sscs", "stereo-split-source">(settings); + + lv2_wrapper->bind_key_enum<"shpm", "hpf-mode">(settings); + + lv2_wrapper->bind_key_enum<"slpm", "lpf-mode">(settings); + + lv2_wrapper->bind_key_bool<"ssplit", "stereo-split">(settings); + + lv2_wrapper->bind_key_bool<"scl", "sidechain-listen">(settings); + + lv2_wrapper->bind_key_double<"at", "attack">(settings); + + lv2_wrapper->bind_key_double<"rt", "release">(settings); + + lv2_wrapper->bind_key_double<"scr", "sidechain-reactivity">(settings); + + lv2_wrapper->bind_key_double<"sla", "sidechain-lookahead">(settings); + + lv2_wrapper->bind_key_double<"shpf", "hpf-frequency">(settings); + + lv2_wrapper->bind_key_double<"slpf", "lpf-frequency">(settings); + + lv2_wrapper->bind_key_double_db<"gt", "curve-threshold">(settings); + + lv2_wrapper->bind_key_double_db<"gz", "curve-zone">(settings); + + lv2_wrapper->bind_key_bool<"gh", "hysteresis">(settings); + + lv2_wrapper->bind_key_double_db<"ht", "hysteresis-threshold">(settings); + + lv2_wrapper->bind_key_double_db<"hz", "hysteresis-zone">(settings); + + lv2_wrapper->bind_key_double_db<"gr", "reduction">(settings); + + lv2_wrapper->bind_key_double_db<"mk", "makeup">(settings); + + lv2_wrapper->bind_key_double_db<"scp", "sidechain-preamp">(settings); + + // The following controls can assume -inf + lv2_wrapper->bind_key_double_db<"cdr", "dry", false>(settings); + + lv2_wrapper->bind_key_double_db<"cwt", "wet", false>(settings); + + setup_input_output_gain(); +} + +Gate::~Gate() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Gate::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Gate::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out, probe_left, probe_right); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + attack_zone_start_port_value = lv2_wrapper->get_control_port_value("gzs"); + attack_threshold_port_value = lv2_wrapper->get_control_port_value("gt"); + release_zone_start_port_value = lv2_wrapper->get_control_port_value("hts"); + release_threshold_port_value = lv2_wrapper->get_control_port_value("hzs"); + + reduction_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("rlm_l") + lv2_wrapper->get_control_port_value("rlm_r")); + + sidechain_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("slm_l") + lv2_wrapper->get_control_port_value("slm_r")); + + curve_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("clm_l") + lv2_wrapper->get_control_port_value("clm_r")); + + envelope_port_value = + 0.5F * (lv2_wrapper->get_control_port_value("elm_l") + lv2_wrapper->get_control_port_value("elm_r")); + + attack_zone_start.emit(attack_zone_start_port_value); + attack_threshold.emit(attack_threshold_port_value); + release_zone_start.emit(release_zone_start_port_value); + release_threshold.emit(release_threshold_port_value); + reduction.emit(reduction_port_value); + sidechain.emit(sidechain_port_value); + curve.emit(curve_port_value); + envelope.emit(envelope_port_value); + + notify(); + } + } +} + +void Gate::update_sidechain_links(const std::string& key) { + if (util::gsettings_get_string(settings, "sidechain-input") != "External") { + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + return; + } + + const auto device_name = util::gsettings_get_string(settings, "sidechain-input-device"); + + NodeInfo input_device = pm->ee_source_node; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == device_name) { + input_device = node; + + break; + } + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + for (const auto& link : pm->link_nodes(input_device.id, get_node_id(), true)) { + list_proxies.push_back(link); + } +} + +void Gate::update_probe_links() { + update_sidechain_links(""); +} + +auto Gate::get_latency_seconds() -> float { + return this->latency_value; +} diff --git a/src/gate_preset.cpp b/src/gate_preset.cpp new file mode 100644 index 0000000..572b957 --- /dev/null +++ b/src/gate_preset.cpp @@ -0,0 +1,140 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "gate_preset.hpp" + +GatePreset::GatePreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::gate::id, + tags::schema::gate::input_path, + tags::schema::gate::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::gate).append("#").append(util::to_string(index)); +} + +void GatePreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["dry"] = g_settings_get_double(settings, "dry"); + + json[section][instance_name]["wet"] = g_settings_get_double(settings, "wet"); + + json[section][instance_name]["attack"] = g_settings_get_double(settings, "attack"); + + json[section][instance_name]["release"] = g_settings_get_double(settings, "release"); + + json[section][instance_name]["curve-threshold"] = g_settings_get_double(settings, "curve-threshold"); + + json[section][instance_name]["curve-zone"] = g_settings_get_double(settings, "curve-zone"); + + json[section][instance_name]["hysteresis"] = g_settings_get_boolean(settings, "hysteresis") != 0; + + json[section][instance_name]["hysteresis-threshold"] = g_settings_get_double(settings, "hysteresis-threshold"); + + json[section][instance_name]["hysteresis-zone"] = g_settings_get_double(settings, "hysteresis-zone"); + + json[section][instance_name]["reduction"] = g_settings_get_double(settings, "reduction"); + + json[section][instance_name]["makeup"] = g_settings_get_double(settings, "makeup"); + + json[section][instance_name]["stereo-split"] = g_settings_get_boolean(settings, "stereo-split") != 0; + + json[section][instance_name]["sidechain"]["input"] = util::gsettings_get_string(settings, "sidechain-input"); + + json[section][instance_name]["sidechain"]["mode"] = util::gsettings_get_string(settings, "sidechain-mode"); + + json[section][instance_name]["sidechain"]["source"] = util::gsettings_get_string(settings, "sidechain-source"); + + json[section][instance_name]["sidechain"]["stereo-split-source"] = + util::gsettings_get_string(settings, "stereo-split-source"); + + json[section][instance_name]["sidechain"]["preamp"] = g_settings_get_double(settings, "sidechain-preamp"); + + json[section][instance_name]["sidechain"]["reactivity"] = g_settings_get_double(settings, "sidechain-reactivity"); + + json[section][instance_name]["sidechain"]["lookahead"] = g_settings_get_double(settings, "sidechain-lookahead"); + + json[section][instance_name]["hpf-mode"] = util::gsettings_get_string(settings, "hpf-mode"); + + json[section][instance_name]["hpf-frequency"] = g_settings_get_double(settings, "hpf-frequency"); + + json[section][instance_name]["lpf-mode"] = util::gsettings_get_string(settings, "lpf-mode"); + + json[section][instance_name]["lpf-frequency"] = g_settings_get_double(settings, "lpf-frequency"); +} + +void GatePreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "dry", "dry"); + + update_key(json.at(section).at(instance_name), settings, "wet", "wet"); + + update_key(json.at(section).at(instance_name), settings, "attack", "attack"); + + update_key(json.at(section).at(instance_name), settings, "release", "release"); + + update_key(json.at(section).at(instance_name), settings, "curve-threshold", "curve-threshold"); + + update_key(json.at(section).at(instance_name), settings, "curve-zone", "curve-zone"); + + update_key(json.at(section).at(instance_name), settings, "hysteresis", "hysteresis"); + + update_key(json.at(section).at(instance_name), settings, "hysteresis-threshold", "hysteresis-threshold"); + + update_key(json.at(section).at(instance_name), settings, "hysteresis-zone", "hysteresis-zone"); + + update_key(json.at(section).at(instance_name), settings, "reduction", "reduction"); + + update_key(json.at(section).at(instance_name), settings, "makeup", "makeup"); + + update_key(json.at(section).at(instance_name), settings, "stereo-split", "stereo-split"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-input", "input"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-mode", "mode"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "stereo-split-source", + "stereo-split-source"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-source", "source"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-preamp", "preamp"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-reactivity", + "reactivity"); + + update_key(json.at(section).at(instance_name).at("sidechain"), settings, "sidechain-lookahead", "lookahead"); + + update_key(json.at(section).at(instance_name), settings, "hpf-mode", "hpf-mode"); + + update_key(json.at(section).at(instance_name), settings, "hpf-frequency", "hpf-frequency"); + + update_key(json.at(section).at(instance_name), settings, "lpf-mode", "lpf-mode"); + + update_key(json.at(section).at(instance_name), settings, "lpf-frequency", "lpf-frequency"); +} diff --git a/src/gate_ui.cpp b/src/gate_ui.cpp new file mode 100644 index 0000000..bd31143 --- /dev/null +++ b/src/gate_ui.cpp @@ -0,0 +1,514 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "gate_ui.hpp" + +namespace ui::gate_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr gate; + + std::vector connections; + + std::vector gconnections; +}; + +struct _GateBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkLabel *attack_zone_start_label, *attack_threshold_label, *release_zone_start_label, *release_threshold_label; + + GtkLabel *gain_label, *sidechain_label, *curve_label, *envelope_label; + + GtkToggleButton *hysteresis, *listen, *show_native_ui; + + GtkCheckButton* stereo_split; + + GtkSpinButton *attack, *release, *curve_threshold, *curve_zone, *hysteresis_threshold, *hysteresis_zone, *dry, *wet, + *reduction, *makeup, *preamp, *reactivity, *lookahead, *hpf_freq, *lpf_freq; + + GtkDropDown *sidechain_source, *stereo_split_source, *sidechain_mode, *dropdown_input_devices, *sidechain_input, + *lpf_mode, *hpf_mode; + + GListStore* input_devices_model; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(GateBox, gate_box, GTK_TYPE_BOX) + +void on_reset(GateBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(GateBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->gate->show_native_ui(); + } else { + self->data->gate->close_native_ui(); + } +} + +auto set_dropdown_sensitive(GateBox* self, const guint selected_id) -> gboolean { + // Sensitive on External Device selected + return (selected_id == 0U) ? 0 : 1; +} + +void setup_dropdown_input_device(GateBox* self) { + auto* selection = gtk_single_selection_new(G_LIST_MODEL(self->input_devices_model)); + + g_signal_connect(self->dropdown_input_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, GateBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->settings, "sidechain-input-device", holder->info->name.c_str()); + } + }), + self); + + gtk_drop_down_set_model(self->dropdown_input_devices, G_LIST_MODEL(self->input_devices_model)); + + g_object_unref(selection); +} + +void setup(GateBox* self, std::shared_ptr gate, const std::string& schema_path, PipeManager* pm) { + self->data->gate = gate; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::gate::id, schema_path.c_str()); + + gate->set_post_messages(true); + + setup_dropdown_input_device(self); + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == tags::pipewire::ee_sink_name || node.name == tags::pipewire::ee_source_name) { + continue; + } + + if (node.media_class == tags::pipewire::media_class::source || + node.media_class == tags::pipewire::media_class::virtual_source || + node.media_role == tags::pipewire::media_role::dsp) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + } + } + + self->data->connections.push_back(gate->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(gate->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(gate->attack_zone_start.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->attack_zone_start_label)) { + return; + } + + gtk_label_set_text(self->attack_zone_start_label, + fmt::format(ui::get_user_locale(), "{0:.1Lf}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(gate->attack_threshold.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->attack_threshold_label)) { + return; + } + + gtk_label_set_text(self->attack_threshold_label, + fmt::format(ui::get_user_locale(), "{0:.1Lf}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(gate->release_zone_start.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->release_zone_start_label)) { + return; + } + + gtk_label_set_text(self->release_zone_start_label, + fmt::format(ui::get_user_locale(), "{0:.1Lf}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(gate->release_threshold.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->release_threshold_label)) { + return; + } + + gtk_label_set_text(self->release_threshold_label, + fmt::format(ui::get_user_locale(), "{0:.1Lf}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(gate->reduction.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->gain_label)) { + return; + } + + gtk_label_set_text(self->gain_label, fmt::format("{0:.0Lf}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(gate->envelope.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->envelope_label)) { + return; + } + + gtk_label_set_text(self->envelope_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(gate->sidechain.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->sidechain_label)) { + return; + } + + gtk_label_set_text(self->sidechain_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(gate->curve.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->curve_label)) { + return; + } + + gtk_label_set_text(self->curve_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(pm->source_added.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->source_removed.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->input_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->gate->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "dry", gtk_spin_button_get_adjustment(self->dry), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet", gtk_spin_button_get_adjustment(self->wet), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "attack", gtk_spin_button_get_adjustment(self->attack), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "release", gtk_spin_button_get_adjustment(self->release), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "curve-threshold", gtk_spin_button_get_adjustment(self->curve_threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "curve-zone", gtk_spin_button_get_adjustment(self->curve_zone), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "hysteresis", self->hysteresis, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "hysteresis-threshold", gtk_spin_button_get_adjustment(self->hysteresis_threshold), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "hysteresis-zone", gtk_spin_button_get_adjustment(self->hysteresis_zone), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "reduction", gtk_spin_button_get_adjustment(self->reduction), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "makeup", gtk_spin_button_get_adjustment(self->makeup), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-preamp", gtk_spin_button_get_adjustment(self->preamp), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-reactivity", gtk_spin_button_get_adjustment(self->reactivity), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-lookahead", gtk_spin_button_get_adjustment(self->lookahead), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "hpf-frequency", gtk_spin_button_get_adjustment(self->hpf_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "lpf-frequency", gtk_spin_button_get_adjustment(self->lpf_freq), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sidechain-listen", self->listen, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-input", self->sidechain_input); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-mode", self->sidechain_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "sidechain-source", self->sidechain_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "stereo-split-source", self->stereo_split_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "hpf-mode", self->hpf_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "lpf-mode", self->lpf_mode); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); + + // bind source dropdowns sensitive property to split-stereo gsettings boolean + + g_settings_bind(self->settings, "stereo-split", self->sidechain_source, "sensitive", + static_cast(G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN)); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split_source, "sensitive", G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_GATE_BOX(object); + + self->data->gate->set_post_messages(false); + + self->data->gate->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(gate_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_GATE_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(gate_box_parent_class)->finalize(object); +} + +void gate_box_class_init(GateBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::gate_ui); + + gtk_widget_class_bind_template_child(widget_class, GateBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, GateBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, GateBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, GateBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, GateBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, GateBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, GateBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, GateBox, attack_zone_start_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, attack_threshold_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, release_zone_start_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, release_threshold_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, gain_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, sidechain_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, curve_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, envelope_label); + gtk_widget_class_bind_template_child(widget_class, GateBox, attack); + gtk_widget_class_bind_template_child(widget_class, GateBox, release); + gtk_widget_class_bind_template_child(widget_class, GateBox, curve_threshold); + gtk_widget_class_bind_template_child(widget_class, GateBox, curve_zone); + gtk_widget_class_bind_template_child(widget_class, GateBox, hysteresis); + gtk_widget_class_bind_template_child(widget_class, GateBox, hysteresis_threshold); + gtk_widget_class_bind_template_child(widget_class, GateBox, hysteresis_zone); + gtk_widget_class_bind_template_child(widget_class, GateBox, dry); + gtk_widget_class_bind_template_child(widget_class, GateBox, wet); + gtk_widget_class_bind_template_child(widget_class, GateBox, reduction); + gtk_widget_class_bind_template_child(widget_class, GateBox, makeup); + gtk_widget_class_bind_template_child(widget_class, GateBox, preamp); + gtk_widget_class_bind_template_child(widget_class, GateBox, reactivity); + gtk_widget_class_bind_template_child(widget_class, GateBox, lookahead); + gtk_widget_class_bind_template_child(widget_class, GateBox, hpf_freq); + gtk_widget_class_bind_template_child(widget_class, GateBox, lpf_freq); + gtk_widget_class_bind_template_child(widget_class, GateBox, sidechain_input); + gtk_widget_class_bind_template_child(widget_class, GateBox, sidechain_mode); + gtk_widget_class_bind_template_child(widget_class, GateBox, sidechain_source); + gtk_widget_class_bind_template_child(widget_class, GateBox, stereo_split_source); + gtk_widget_class_bind_template_child(widget_class, GateBox, stereo_split); + gtk_widget_class_bind_template_child(widget_class, GateBox, lpf_mode); + gtk_widget_class_bind_template_child(widget_class, GateBox, hpf_mode); + gtk_widget_class_bind_template_child(widget_class, GateBox, listen); + gtk_widget_class_bind_template_child(widget_class, GateBox, dropdown_input_devices); + + gtk_widget_class_bind_template_child(widget_class, GateBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); + gtk_widget_class_bind_template_callback(widget_class, set_dropdown_sensitive); +} + +void gate_box_init(GateBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + + prepare_spinbuttons<"dB">(self->curve_threshold, self->curve_zone, self->hysteresis_threshold, self->hysteresis_zone, + self->reduction, self->makeup, self->preamp); + + prepare_spinbuttons<"Hz">(self->hpf_freq, self->lpf_freq); + + prepare_spinbuttons<"ms">(self->attack, self->release, self->lookahead, self->reactivity); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->dry, self->wet); +} + +auto create() -> GateBox* { + return static_cast(g_object_new(EE_TYPE_GATE_BOX, nullptr)); +} + +} // namespace ui::gate_box diff --git a/src/ladspa_wrapper.cpp b/src/ladspa_wrapper.cpp new file mode 100644 index 0000000..9e30bba --- /dev/null +++ b/src/ladspa_wrapper.cpp @@ -0,0 +1,790 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "ladspa_wrapper.hpp" + +namespace ladspa { + +using namespace std::string_literals; + +static inline const char* get_ladspa_path() { + const char* path = std::getenv("LADSPA_PATH"); + + if (path == nullptr || path[0] == '\0') { + path = "/usr/local/lib/ladspa/:" LIB_DIR "/ladspa/:/usr/lib/ladspa/"; + } + + return path; +} + +struct dlhandle { + dlhandle(void* handle) : dl_handle(handle) {} + + ~dlhandle() { + if (dl_handle != nullptr) { + dlclose(dl_handle); + } + } + + dlhandle(const dlhandle&) = delete; + auto operator=(const dlhandle&) -> dlhandle& = delete; + dlhandle(dlhandle&& other) noexcept : dl_handle(std::exchange(other.dl_handle, nullptr)) {} + auto operator=(dlhandle&& other) noexcept -> dlhandle& { + std::swap(dl_handle, other.dl_handle); + return *this; + } + + void disable() { dl_handle = nullptr; } + void* dl_handle; +}; + +static inline bool validate_ports(const LADSPA_Descriptor* descriptor) { + unsigned long count_input = 0UL; + unsigned long count_output = 0UL; + + for (unsigned long i = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[i])) { + if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[i])) { + return false; + } + } else if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[i])) { + if (LADSPA_IS_PORT_INPUT(descriptor->PortDescriptors[i])) { + if (++count_input > 4UL) { + return false; + } + } else if (LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[i])) { + if (++count_output > 2UL) { + return false; + } + } else { + return false; + } + } + } + + return true; +} + +LadspaWrapper::LadspaWrapper(const std::string& plugin_filename, const std::string& plugin_label) + : plugin_name(plugin_label) { + const char* ladspa_path = get_ladspa_path(); + const char* p = nullptr; + + do { + p = std::strchr(ladspa_path, ':'); + + if (!p) { + p = std::strchr(ladspa_path, '\0'); + } + + std::string path(ladspa_path, p - ladspa_path); + + if (*p == ':') { + p++; + } + + if (path.empty() || path[path.length() - 1] != '/') { + path.push_back('/'); + } + + path.append(plugin_filename); + + void* dl_handle = dlopen(path.c_str(), RTLD_NOW | RTLD_LOCAL); + + if (dl_handle == nullptr) { + continue; + } + + dlhandle h(dl_handle); + + auto func = (LADSPA_Descriptor_Function)dlsym(dl_handle, "ladspa_descriptor"); + + if (func == nullptr) { + continue; + } + + unsigned long i = 0UL; + + const LADSPA_Descriptor* descriptor = nullptr; + + do { + descriptor = func(i); + if (descriptor == nullptr) { + break; + } + + if (std::strcmp(descriptor->Label, plugin_label.c_str()) == 0) { + break; + } + } while (i++ < std::numeric_limits::max()); + + if (descriptor != nullptr) { + if (descriptor->instantiate != nullptr && descriptor->connect_port != nullptr && descriptor->run != nullptr && + validate_ports(descriptor)) { + unsigned long count = 0UL; + + for (unsigned long i = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[i])) { + count++; + } + } + + auto* control_ports = new LADSPA_Data[count](); + auto* control_ports_initialized = new bool[count](); + + h.disable(); + + this->dl_handle = dl_handle; + this->descriptor = descriptor; + this->found = true; + this->control_ports = control_ports; + this->control_ports_initialized = control_ports_initialized; + + for (unsigned long i = 0UL, j = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[i])) { + map_cp_name_to_idx.insert(std::make_pair(descriptor->PortNames[i], j++)); + } + } + } + break; + } + } while (*(ladspa_path = p) != '\0'); +} + +LadspaWrapper::~LadspaWrapper() { + if (active) { + deactivate(); + } + + LADSPA_Handle instance = std::exchange(this->instance, nullptr); + + if (instance != nullptr && descriptor->cleanup != nullptr) { + descriptor->cleanup(instance); + } + + if (control_ports_initialized) { + delete[] std::exchange(control_ports_initialized, nullptr); + } + + if (control_ports) { + delete[] std::exchange(control_ports, nullptr); + } + + if (dl_handle != nullptr) { + dlclose(std::exchange(dl_handle, nullptr)); + } +} + +struct ladspahandle { + ladspahandle(LADSPA_Handle instance, void (*cleanup)(LADSPA_Handle)) : instance(instance), cleanup(cleanup) {} + + ~ladspahandle() { + if (instance != nullptr) { + cleanup(instance); + } + } + + ladspahandle(const ladspahandle&) = delete; + + auto operator=(const ladspahandle&) -> ladspahandle& = delete; + + ladspahandle(ladspahandle&& other) noexcept + : instance(std::exchange(other.instance, nullptr)), cleanup(other.cleanup) {} + + auto operator=(ladspahandle&& other) noexcept -> ladspahandle& { + std::swap(instance, other.instance); + std::swap(cleanup, other.cleanup); + + return *this; + } + + void disable() { instance = nullptr; } + + void* instance; + + void (*cleanup)(LADSPA_Handle); +}; + +static inline void get_port_bounds(const LADSPA_Descriptor* descriptor, + unsigned long port, + uint rate, + LADSPA_Data& min, + LADSPA_Data& max) { + min = -std::numeric_limits::infinity(); + max = std::numeric_limits::infinity(); + + const LADSPA_PortRangeHint* hint = &descriptor->PortRangeHints[port]; + + if (LADSPA_IS_HINT_BOUNDED_BELOW(hint->HintDescriptor)) { + min = hint->LowerBound; + + if (LADSPA_IS_HINT_SAMPLE_RATE(hint->HintDescriptor)) { + min *= rate; + } + } + + if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint->HintDescriptor)) { + max = hint->UpperBound; + + if (LADSPA_IS_HINT_SAMPLE_RATE(hint->HintDescriptor)) { + min *= rate; + } + } + + if (LADSPA_IS_HINT_TOGGLED(hint->HintDescriptor)) { + min = 0.0F; + max = 1.0F; + } +} + +static inline LADSPA_Data get_port_default_raw(const LADSPA_Descriptor* descriptor, unsigned long port, uint rate) { + const LADSPA_PortRangeHint* hint = &descriptor->PortRangeHints[port]; + if (LADSPA_IS_HINT_HAS_DEFAULT(hint->HintDescriptor)) { + if (LADSPA_IS_HINT_DEFAULT_0(hint->HintDescriptor)) { + return 0.0F; + + } else if (LADSPA_IS_HINT_DEFAULT_1(hint->HintDescriptor)) { + return 1.0F; + + } else if (LADSPA_IS_HINT_DEFAULT_100(hint->HintDescriptor)) { + return 100.0F; + + } else if (LADSPA_IS_HINT_DEFAULT_440(hint->HintDescriptor)) { + return 440.0F; + + } else { + LADSPA_Data min = 0.0F; + LADSPA_Data max = 0.0F; + + get_port_bounds(descriptor, port, rate, min, max); + + if (LADSPA_IS_HINT_DEFAULT_MINIMUM(hint->HintDescriptor)) { + return min; + } else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(hint->HintDescriptor)) { + return max; + } else if (LADSPA_IS_HINT_LOGARITHMIC(hint->HintDescriptor)) { + if (LADSPA_IS_HINT_DEFAULT_LOW(hint->HintDescriptor)) { + return std::exp(std::log(min) * 0.75 + std::log(max) * 0.25); + } else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hint->HintDescriptor)) { + return std::exp(std::log(min) * 0.5 + std::log(max) * 0.5); + } else if (LADSPA_IS_HINT_DEFAULT_HIGH(hint->HintDescriptor)) { + return std::exp(std::log(min) * 0.25 + std::log(max) * 0.75); + } + } else { + if (LADSPA_IS_HINT_DEFAULT_LOW(hint->HintDescriptor)) { + return min * 0.75F + max * 0.25F; + } else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hint->HintDescriptor)) { + return min * 0.5F + max * 0.5F; + } else if (LADSPA_IS_HINT_DEFAULT_HIGH(hint->HintDescriptor)) { + return min * 0.25F + max * 0.75F; + } + } + } + } + + return 0.0F; +} + +static inline LADSPA_Data clamp_port_value(const LADSPA_Descriptor* descriptor, + unsigned long port, + uint rate, + LADSPA_Data val) { + LADSPA_Data min = 0.0F; + LADSPA_Data max = 0.0F; + + get_port_bounds(descriptor, port, rate, min, max); + + if (val < min) { + val = min; + } + + if (val > max) { + val = max; + } + + return val; +} + +static inline LADSPA_Data get_port_default(const LADSPA_Descriptor* descriptor, unsigned long port, uint rate) { + LADSPA_Data val = get_port_default_raw(descriptor, port, rate); + + return clamp_port_value(descriptor, port, rate, val); +} + +static inline void scale_control_ports(const LADSPA_Descriptor* descriptor, + LADSPA_Data* control_ports, + bool* control_ports_initialized, + uint old_rate, + uint rate) { + for (unsigned long i = 0UL, j = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[i])) { + if (!control_ports_initialized[j]) { + control_ports[j] = get_port_default(descriptor, i, rate); + control_ports_initialized[j] = true; + } else if (old_rate != 0U) { + const LADSPA_PortRangeHint* hint = &descriptor->PortRangeHints[i]; + + if (LADSPA_IS_HINT_SAMPLE_RATE(hint->HintDescriptor)) { + LADSPA_Data val = control_ports[j] * rate / old_rate; + control_ports[j] = clamp_port_value(descriptor, i, rate, val); + } + } + + j++; + } + } +} + +auto LadspaWrapper::create_instance(uint rate) -> bool { + LADSPA_Handle new_instance = descriptor->instantiate(descriptor, rate); + + if (new_instance == nullptr) { + return false; + } + + ladspahandle h(new_instance, descriptor->cleanup); + + scale_control_ports(descriptor, control_ports, control_ports_initialized, this->rate, rate); + + for (unsigned long i = 0UL, j = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[i])) { + descriptor->connect_port(new_instance, i, &control_ports[j++]); + } + } + + if (active) { + deactivate(); + } + + if (instance != nullptr && descriptor->cleanup != nullptr) { + descriptor->cleanup(instance); + } + + h.disable(); + + this->instance = new_instance; + this->rate = rate; + + activate(); + + return true; +} + +static inline int stricmp(const char* str1, const char* str2) { + char c1 = 0; + char c2 = 0; + + do { + c1 = *str1; + c2 = *str2; + + if (c1 != c2) { + if (c1 >= 'A' && c1 <= 'Z') { + c1 -= 'A'; + } + + if (c2 >= 'A' && c2 <= 'Z') { + c2 -= 'A'; + } + + if (c1 != c2) { + break; + } + } + } while (c1 != '\0'); + return (int)c1 - c2; +} + +template +static inline bool striendswith(const char* str, const char (&end)[N]) { + std::size_t len = std::strlen(str); + return len < (N - 1) && stricmp(&str[len - (N - 1)], end) == 0; +} + +void LadspaWrapper::connect_data_ports(const std::span& left_in, + const std::span& right_in, + const std::span& left_out, + const std::span& right_out) { + if (instance == nullptr) { + return; + } + + unsigned long left_in_idx = -1L; + unsigned long right_in_idx = -1L; + unsigned long first_in_idx = -1L; + unsigned long second_in_idx = -1L; + unsigned long left_out_idx = -1L; + unsigned long right_out_idx = -1L; + unsigned long first_out_idx = -1L; + unsigned long second_out_idx = -1L; + + int count_input = 0; + int count_output = 0; + + for (unsigned long i = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[i])) { + if (LADSPA_IS_PORT_INPUT(descriptor->PortDescriptors[i])) { + if (striendswith(descriptor->PortNames[i], " L") || striendswith(descriptor->PortNames[i], " (L)")) { + left_in_idx = i; + } else if (striendswith(descriptor->PortNames[i], " R") || striendswith(descriptor->PortNames[i], " (R)")) { + right_in_idx = i; + } + + if (count_input == 0) { + first_in_idx = i; + } else if (count_input == 1) { + second_in_idx = i; + } + + count_input++; + } else if (LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[i])) { + if (striendswith(descriptor->PortNames[i], " L") || striendswith(descriptor->PortNames[i], " (L)")) { + left_out_idx = i; + } else if (striendswith(descriptor->PortNames[i], " R") || striendswith(descriptor->PortNames[i], " (R)")) { + right_out_idx = i; + } + + if (count_output == 0) { + first_out_idx = i; + } else if (count_output == 1) { + second_out_idx = i; + } + + count_output++; + } + } + } + + if (left_in_idx == null_ul || right_in_idx == null_ul) { + left_in_idx = first_in_idx; + right_in_idx = second_in_idx; + } + if (left_in_idx != null_ul) { + descriptor->connect_port(instance, left_in_idx, const_cast(left_in.data())); + } + + if (right_in_idx != null_ul) { + descriptor->connect_port(instance, right_in_idx, const_cast(right_in.data())); + } + + if (left_out_idx == null_ul || right_out_idx == null_ul) { + left_out_idx = first_out_idx; + right_out_idx = second_out_idx; + } + if (left_out_idx != null_ul) { + descriptor->connect_port(instance, left_out_idx, left_out.data()); + } + + if (right_out_idx != null_ul) { + descriptor->connect_port(instance, right_out_idx, right_out.data()); + } +} + +static inline char* stristr(const char* haystack, const char* needle) { + size_t hlen = std::strlen(haystack); + size_t nlen = std::strlen(needle); + + while (nlen <= hlen) { + if (stricmp(haystack, needle) == 0) { + return (char*)haystack; + } + + haystack++; + hlen--; + } + return nullptr; +} + +void LadspaWrapper::connect_data_ports(const std::span& left_in, + const std::span& right_in, + const std::span& left_out, + const std::span& right_out, + const std::span& probe_left, + const std::span& probe_right) { + if (instance == nullptr) { + return; + } + + unsigned long left_in_idx = -1L; + unsigned long right_in_idx = -1L; + unsigned long first_in_idx = -1L; + unsigned long second_in_idx = -1L; + unsigned long probe_left_idx = -1L; + unsigned long probe_right_idx = -1L; + unsigned long third_in_idx = -1L; + unsigned long fourth_in_idx = -1L; + unsigned long left_out_idx = -1L; + unsigned long right_out_idx = -1L; + unsigned long first_out_idx = -1L; + unsigned long second_out_idx = -1L; + + int count_input = 0; + int count_output = 0; + + for (unsigned long i = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[i])) { + if (LADSPA_IS_PORT_INPUT(descriptor->PortDescriptors[i])) { + bool sc = stristr(descriptor->PortNames[i], "Probe") != nullptr || + stristr(descriptor->PortNames[i], "Sidechain") != nullptr; + if (striendswith(descriptor->PortNames[i], " L") || striendswith(descriptor->PortNames[i], " (L)")) { + if (sc) { + probe_left_idx = i; + } else { + left_in_idx = i; + } + } else if (striendswith(descriptor->PortNames[i], " R") || striendswith(descriptor->PortNames[i], " (R)")) { + if (sc) { + probe_right_idx = i; + } else { + right_in_idx = i; + } + } + + if (count_input == 0) { + first_in_idx = i; + } else if (count_input == 1) { + second_in_idx = i; + } else if (count_input == 2) { + third_in_idx = i; + } else if (count_input == 3) { + fourth_in_idx = i; + } + + count_input++; + } else if (LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[i])) { + if (striendswith(descriptor->PortNames[i], " L") || striendswith(descriptor->PortNames[i], " (L)")) { + left_out_idx = i; + } else if (striendswith(descriptor->PortNames[i], " R") || striendswith(descriptor->PortNames[i], " (R)")) { + right_out_idx = i; + } + + if (count_output == 0) { + first_out_idx = i; + } else if (count_output == 1) { + second_out_idx = i; + } + + count_output++; + } + } + } + + if (left_in_idx == null_ul || right_in_idx == null_ul) { + left_in_idx = first_in_idx; + right_in_idx = second_in_idx; + } + if (left_in_idx != null_ul) { + descriptor->connect_port(instance, left_in_idx, const_cast(left_in.data())); + } + + if (right_in_idx != null_ul) { + descriptor->connect_port(instance, right_in_idx, const_cast(left_in.data())); + } + + if (probe_left_idx == null_ul || probe_right_idx == null_ul) { + if (left_in_idx == first_in_idx) { + if (right_in_idx == second_in_idx) { + probe_left_idx = third_in_idx; + } else { + probe_left_idx = second_in_idx; + } + } else if (right_in_idx == first_in_idx) { + if (left_in_idx == second_in_idx) { + probe_left_idx = third_in_idx; + } else { + probe_left_idx = second_in_idx; + } + } else { + probe_left_idx = first_in_idx; + } + if (left_in_idx == second_in_idx) { + if (right_in_idx == third_in_idx) { + probe_right_idx = fourth_in_idx; + } else { + probe_right_idx = third_in_idx; + } + } else if (right_in_idx == second_in_idx) { + if (left_in_idx == third_in_idx) { + probe_right_idx = fourth_in_idx; + } else { + probe_right_idx = third_in_idx; + } + } else { + probe_right_idx = second_in_idx; + } + } + if (probe_left_idx != null_ul) { + descriptor->connect_port(instance, probe_left_idx, const_cast(probe_left.data())); + } + + if (probe_right_idx != null_ul) { + descriptor->connect_port(instance, probe_right_idx, const_cast(probe_right.data())); + } + + if (left_out_idx == null_ul || right_out_idx == null_ul) { + left_out_idx = first_out_idx; + right_out_idx = second_out_idx; + } + if (left_out_idx != null_ul) { + descriptor->connect_port(instance, left_out_idx, left_out.data()); + } + + if (right_out_idx != null_ul) { + descriptor->connect_port(instance, right_out_idx, left_out.data()); + } +} + +void LadspaWrapper::activate() { + if (!active && descriptor->activate != nullptr) { + descriptor->activate(instance); + } + + active = true; +} + +void LadspaWrapper::deactivate() { + if (active && descriptor->activate != nullptr && descriptor->deactivate != nullptr) { + descriptor->deactivate(instance); + } + + active = false; +} + +void LadspaWrapper::run() const { + assert(active); + assert(instance); + + descriptor->run(instance, n_samples); +} + +auto LadspaWrapper::get_control_port_count() const -> uint { + uint count = 0U; + + for (unsigned long i = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[i])) { + count++; + } + } + + return count; +} + +static inline unsigned long cp_to_port_idx(const LADSPA_Descriptor* descriptor, uint index) { + for (unsigned long i = 0UL; i < descriptor->PortCount; i++) { + if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[i])) { + if (index-- == 0U) { + return i; + } + } + } + + return (unsigned long)-1L; +} + +auto LadspaWrapper::get_control_port_name(uint index) const -> std::string { + const unsigned long i = cp_to_port_idx(descriptor, index); + + if (i == null_ul) { + return {}; + } + + return descriptor->PortNames[i]; +} + +auto LadspaWrapper::is_control_port_output(uint index) const -> bool { + const unsigned long i = cp_to_port_idx(descriptor, index); + + if (i == null_ul) { + return false; + } + + return LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[i]); +} + +auto LadspaWrapper::get_control_port_range(uint index) const -> std::tuple { + const unsigned long i = cp_to_port_idx(descriptor, index); + + if (i == null_ul) { + return std::make_tuple(0.0F, 0.0F); + } + + LADSPA_Data min = 0.0F; + LADSPA_Data max = 0.0F; + + get_port_bounds(descriptor, i, rate, min, max); + + return std::make_tuple(min, max); +} + +auto LadspaWrapper::get_control_port_default(uint index) const -> float { + const unsigned long i = cp_to_port_idx(descriptor, index); + + if (i == null_ul) { + return 0.0F; + } + + return get_port_default(descriptor, i, rate); +} + +auto LadspaWrapper::get_control_port_value(uint index) const -> float { + assert(cp_to_port_idx(descriptor, index) != null_ul); + assert(control_ports_initialized[index]); + + return control_ports[index]; +} + +auto LadspaWrapper::get_control_port_value(const std::string& symbol) const -> float { + auto iter = map_cp_name_to_idx.find(symbol); + + if (iter == map_cp_name_to_idx.end()) { + util::warning(plugin_name + " port symbol not found: " + symbol); + + return 0.0F; + } + + return get_control_port_value(static_cast(iter->second)); +} + +auto LadspaWrapper::set_control_port_value_clamp(uint index, float value) -> float { + const unsigned long i = cp_to_port_idx(descriptor, index); + + assert(i != null_ul); + + // If the value is out of bounds, get a new clamped one in LADSPA_Data (float) + value = clamp_port_value(descriptor, i, rate, value); + + control_ports[index] = value; + control_ports_initialized[index] = true; + + return value; +} + +auto LadspaWrapper::set_control_port_value_clamp(const std::string& symbol, float value) -> float { + auto iter = map_cp_name_to_idx.find(symbol); + + if (iter == map_cp_name_to_idx.end()) { + util::warning(plugin_name + " port symbol not found: " + symbol); + + return value; + } + + return set_control_port_value_clamp(static_cast(iter->second), value); +} + +} // namespace ladspa diff --git a/src/level_meter.cpp b/src/level_meter.cpp new file mode 100644 index 0000000..24e7e81 --- /dev/null +++ b/src/level_meter.cpp @@ -0,0 +1,184 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "level_meter.hpp" + +LevelMeter::LevelMeter(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, + tags::plugin_name::level_meter, + tags::plugin_package::ebur128, + schema, + schema_path, + pipe_manager) {} + +LevelMeter::~LevelMeter() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + for (auto& t : mythreads) { + t.join(); + } + + mythreads.clear(); + + std::scoped_lock lock(data_mutex); + + if (ebur_state != nullptr) { + ebur128_destroy(&ebur_state); + } + + util::debug(log_tag + name + " destroyed"); +} + +auto LevelMeter::init_ebur128() -> bool { + if (n_samples == 0 || rate == 0) { + return false; + } + + if (ebur_state != nullptr) { + ebur128_destroy(&ebur_state); + + ebur_state = nullptr; + } + + ebur_state = ebur128_init( + 2U, rate, EBUR128_MODE_S | EBUR128_MODE_I | EBUR128_MODE_LRA | EBUR128_MODE_TRUE_PEAK | EBUR128_MODE_HISTOGRAM); + + ebur128_set_channel(ebur_state, 0U, EBUR128_LEFT); + ebur128_set_channel(ebur_state, 1U, EBUR128_RIGHT); + + return ebur_state != nullptr; +} + +void LevelMeter::setup() { + if (2U * static_cast(n_samples) != data.size()) { + data.resize(static_cast(n_samples) * 2U); + } + + if (rate != old_rate) { + data_mutex.lock(); + + ebur128_ready = false; + + data_mutex.unlock(); + + mythreads.emplace_back([this]() { // Using emplace_back here makes sense + if (ebur128_ready) { + return; + } + + auto status = true; + + old_rate = rate; + + status = init_ebur128(); + + data_mutex.lock(); + + ebur128_ready = status; + + data_mutex.unlock(); + }); + } +} + +void LevelMeter::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + if (bypass || !ebur128_ready) { + return; + } + + for (size_t n = 0U; n < n_samples; n++) { + data[2U * n] = left_in[n]; + data[2U * n + 1U] = right_in[n]; + } + + ebur128_add_frames_float(ebur_state, data.data(), n_samples); + + if (EBUR128_SUCCESS != ebur128_loudness_momentary(ebur_state, &momentary)) { + momentary = 0.0; + } + + if (EBUR128_SUCCESS != ebur128_loudness_shortterm(ebur_state, &shortterm)) { + shortterm = 0.0; + } + + if (EBUR128_SUCCESS != ebur128_loudness_global(ebur_state, &global)) { + global = 0.0; + } + + if (EBUR128_SUCCESS != ebur128_relative_threshold(ebur_state, &relative)) { + relative = 0.0; + } + + if (EBUR128_SUCCESS != ebur128_loudness_range(ebur_state, &range)) { + range = 0.0; + } + + if (EBUR128_SUCCESS != ebur128_true_peak(ebur_state, 0U, &true_peak_L)) { + true_peak_L = 0.0; + } + + if (EBUR128_SUCCESS != ebur128_true_peak(ebur_state, 1U, &true_peak_R)) { + true_peak_R = 0.0; + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + results.emit(momentary, shortterm, global, relative, range, true_peak_L, true_peak_R); + + notify(); + } + } +} + +auto LevelMeter::get_latency_seconds() -> float { + return 0.0F; +} + +void LevelMeter::reset_history() { + mythreads.emplace_back([this]() { // Using emplace_back here makes sense + data_mutex.lock(); + + ebur128_ready = false; + + data_mutex.unlock(); + + auto status = init_ebur128(); + + data_mutex.lock(); + + ebur128_ready = status; + + data_mutex.unlock(); + }); +} diff --git a/src/level_meter_preset.cpp b/src/level_meter_preset.cpp new file mode 100644 index 0000000..cd854d8 --- /dev/null +++ b/src/level_meter_preset.cpp @@ -0,0 +1,37 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "level_meter_preset.hpp" + +LevelMeterPreset::LevelMeterPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::level_meter::id, + tags::schema::level_meter::input_path, + tags::schema::level_meter::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::level_meter).append("#").append(util::to_string(index)); +} + +void LevelMeterPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; +} + +void LevelMeterPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); +} diff --git a/src/level_meter_ui.cpp b/src/level_meter_ui.cpp new file mode 100644 index 0000000..96ff697 --- /dev/null +++ b/src/level_meter_ui.cpp @@ -0,0 +1,212 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "level_meter_ui.hpp" + +namespace ui::level_meter_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr level_meter; + + std::vector connections; + + std::vector gconnections; +}; + +struct _LevelMeterBox { + GtkBox parent_instance; + + GtkLevelBar *input_level_left, *input_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *plugin_credit; + + GtkLevelBar *m_level, *s_level, *i_level, *r_level, *lra_level; + + GtkLabel *m_label, *s_label, *i_label, *r_label, *lra_label, *true_peak_left_label, *true_peak_right_label; + + GtkButton* reset_history; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(LevelMeterBox, level_meter_box, GTK_TYPE_BOX) + +void on_reset_history(LevelMeterBox* self, GtkButton* btn) { + // Since there's no reason why someone would want to activate the reset-history + // through a third party tool, we do not bind this action to a gsettings key + // like it's done in the AutoGain. + + self->data->level_meter->reset_history(); +} + +void setup(LevelMeterBox* self, std::shared_ptr level_meter, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->level_meter = level_meter; + + self->settings = g_settings_new_with_path(tags::schema::level_meter::id, schema_path.c_str()); + + level_meter->set_post_messages(true); + + self->data->connections.push_back(level_meter->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(level_meter->results.connect( + [=](const double momentary, const double shortterm, const double integrated, const double relative, + const double range, const double true_peak_L, const double true_peak_R) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LEVEL_BAR(self->m_level) || !GTK_IS_LABEL(self->m_label) || !GTK_IS_LEVEL_BAR(self->s_level) || + !GTK_IS_LABEL(self->s_label) || !GTK_IS_LEVEL_BAR(self->i_level) || !GTK_IS_LABEL(self->i_label) || + !GTK_IS_LEVEL_BAR(self->r_level) || !GTK_IS_LABEL(self->r_label) || !GTK_IS_LEVEL_BAR(self->lra_level) || + !GTK_IS_LABEL(self->lra_label) || !GTK_IS_LABEL(self->true_peak_left_label) || + !GTK_IS_LABEL(self->true_peak_right_label)) { + return; + } + + gtk_label_set_text(self->true_peak_left_label, + fmt::format("{0:.0f} dB", util::linear_to_db(true_peak_L)).c_str()); + gtk_label_set_text(self->true_peak_right_label, + fmt::format("{0:.0f} dB", util::linear_to_db(true_peak_R)).c_str()); + + gtk_level_bar_set_value(self->m_level, util::db_to_linear(momentary)); + gtk_label_set_text(self->m_label, fmt::format("{0:.0f} LUFS", momentary).c_str()); + + gtk_level_bar_set_value(self->s_level, util::db_to_linear(shortterm)); + gtk_label_set_text(self->s_label, fmt::format("{0:.0f} LUFS", shortterm).c_str()); + + gtk_level_bar_set_value(self->i_level, util::db_to_linear(integrated)); + gtk_label_set_text(self->i_label, fmt::format("{0:.0f} LUFS", integrated).c_str()); + + gtk_level_bar_set_value(self->r_level, util::db_to_linear(relative)); + gtk_label_set_text(self->r_label, fmt::format("{0:.0f} LUFS", relative).c_str()); + + gtk_level_bar_set_value(self->lra_level, util::db_to_linear(range)); + gtk_label_set_text(self->lra_label, fmt::format("{0:.0f} LU", range).c_str()); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->level_meter->package).c_str()); +} + +void dispose(GObject* object) { + auto* self = EE_LEVEL_METER_BOX(object); + + self->data->level_meter->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(level_meter_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_LEVEL_METER_BOX(object); + + delete self->data; + + util::debug("finalize"); + + G_OBJECT_CLASS(level_meter_box_parent_class)->finalize(object); +} + +void level_meter_box_class_init(LevelMeterBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::level_meter_ui); + + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, reset_history); + + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, m_level); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, s_level); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, i_level); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, r_level); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, lra_level); + + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, m_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, s_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, i_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, r_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, lra_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, true_peak_left_label); + gtk_widget_class_bind_template_child(widget_class, LevelMeterBox, true_peak_right_label); + + gtk_widget_class_bind_template_callback(widget_class, on_reset_history); +} + +void level_meter_box_init(LevelMeterBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); +} + +auto create() -> LevelMeterBox* { + return static_cast(g_object_new(EE_TYPE_LEVEL_METER_BOX, nullptr)); +} + +} // namespace ui::level_meter_box diff --git a/src/libportal.cpp b/src/libportal.cpp new file mode 100644 index 0000000..acdb7dd --- /dev/null +++ b/src/libportal.cpp @@ -0,0 +1,224 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "libportal.hpp" +#include "preferences_general.hpp" + +namespace { + +bool resetting_shutdown = false, resetting_autostart = false; + +GSettings* settings = nullptr; + +GtkSwitch *enable_autostart = nullptr, *shutdown_on_window_close = nullptr; + +} // namespace + +namespace libportal { + +using namespace std::string_literals; + +XdpPortal* portal = nullptr; + +void on_request_background_called(GObject* source, GAsyncResult* result, gpointer widgets_ptr) { + if (enable_autostart == nullptr || shutdown_on_window_close == nullptr) { + util::error("Programming error. When using libportal its pointers to our settings widgets must be initialized."); + } + + g_autoptr(GError) error = nullptr; + + // libportal check if portal request worked + + if (xdp_portal_request_background_finish(portal, result, &error) == 0) { + // NOLINTNEXTLINE(cppcoreguidelines-init-variables) + std::string reason; + // NOLINTNEXTLINE(cppcoreguidelines-init-variables) + std::string explanation; + + if (error != nullptr) { + // 19 seemingly corresponds to the "cancelled" error which actually means the permission is in a revoked state. + if (error->code == 19) { + reason = "Background access has been denied"; + explanation = "Please allow Easy Effects to ask again with flatpak permission-reset "s + tags::app::id; + } else { + reason = "Unknown error"; + explanation = "Please verify your system has a XDG Background Portal implementation running and working."; + } + } else { + reason = "Unknown error"; + explanation = "No explanation could be provided, error was null"; + } + + util::debug(std::string("a background request failed: ") + + ((error) != nullptr ? error->message : "unknown reason")); + util::warning(reason); + util::warning(explanation); + + // TODO find a bettery way of getting the preferences window + // it shouldn't be possible to open the preferences window without the top level window open, + // so the index 1 should correspond with the preferences window + ui::show_simple_message_dialog(GTK_WIDGET(g_list_model_get_item(gtk_window_get_toplevels(), 1)), + "Unable to get background access: " + reason, explanation); + + // if autostart is wrongly enabled (we got an error when talking to the portal), we must reset it + if (static_cast(gtk_switch_get_active(enable_autostart)) || + static_cast(gtk_switch_get_state(enable_autostart))) { + resetting_autostart = true; + + util::warning(std::string("due to error, setting autostart state and switch to false")); + + gtk_switch_set_state(enable_autostart, 0); + gtk_switch_set_active(enable_autostart, 0); + } + // if running in the background (which happens if we don't shutdown on window close) is wrongly enabled (we got an + // error when talking to the portal), we must reset it + if (!static_cast(gtk_switch_get_active(shutdown_on_window_close)) || + !static_cast(gtk_switch_get_state(shutdown_on_window_close))) { + resetting_shutdown = true; + + util::warning(std::string("due to error, setting shutdown on window close state and switch to true")); + + gtk_switch_set_state(shutdown_on_window_close, 1); + gtk_switch_set_active(shutdown_on_window_close, 1); + } + + resetting_autostart = false; + resetting_shutdown = false; + + return; + } + + gtk_switch_set_state(enable_autostart, gtk_switch_get_active(enable_autostart)); + + gtk_switch_set_state(shutdown_on_window_close, gtk_switch_get_active(shutdown_on_window_close)); + + resetting_autostart = false; + resetting_shutdown = false; + + util::debug("a background request successfully completed"); +} + +// generic portal update function +void update_background_portal(const bool& use_autostart) { + // clang-tidy doesn't seem to understand this is actually being inited. + // NOLINTNEXTLINE(cppcoreguidelines-init-variables) + XdpBackgroundFlags background_flags = XDP_BACKGROUND_FLAG_NONE; + + g_autoptr(GPtrArray) command_line = nullptr; + + if (use_autostart) { + command_line = g_ptr_array_new_with_free_func(g_free); + + g_ptr_array_add(command_line, g_strdup("easyeffects")); + g_ptr_array_add(command_line, g_strdup("--gapplication-service")); + + background_flags = XDP_BACKGROUND_FLAG_AUTOSTART; + } + + auto* reason = g_strdup("Easy Effects Background Access"); + + // libportal portal request + xdp_portal_request_background(portal, nullptr, reason, command_line, background_flags, nullptr, + on_request_background_called, nullptr); + g_free(reason); +} + +void on_enable_autostart(GtkSwitch* obj, gboolean state, gpointer user_data) { + // this callback could be triggered when the settings are reset by other code due to an error calling the portal, in + // that case we must not call the portal again. + if (!resetting_autostart) { + state == 1 ? util::debug("requesting autostart file since autostart is enabled") + : util::debug("not requesting autostart file since autostart is disabled"); + + update_background_portal(state != 0); + } +} + +void on_shutdown_on_window_close(GtkSwitch* btn, gboolean state, gpointer user_data) { + // this callback could be triggered when the settings are reset by other code due to an error calling the portal, in + // that case we must not call the portal again. + if (!resetting_shutdown) { + if (gtk_switch_get_active(enable_autostart) != 0) { + const auto* msg = (state == 0) ? "requesting both background access and autostart file since autostart is enabled" + : "requesting autostart access since autostart enabled"; + + util::debug(msg); + + update_background_portal(true); + } else { + if (state == 0) { + util::debug("requesting only background access, not creating autostart file"); + + update_background_portal(false); + } else { + util::debug("not requesting any access since enabling shutdown on window close"); + + gtk_switch_set_state(shutdown_on_window_close, gtk_switch_get_active(shutdown_on_window_close)); + } + } + } +} + +void init(GtkSwitch* g_enable_autostart, GtkSwitch* g_shutdown_on_window_close) { + enable_autostart = g_enable_autostart; + shutdown_on_window_close = g_shutdown_on_window_close; + + if (enable_autostart == nullptr || shutdown_on_window_close == nullptr) { + util::error("Programming error. When using libportal its pointers to our settings widgets must be initialized."); + } + + if (portal == nullptr) { + portal = xdp_portal_new(); + } + + settings = g_settings_new("com.github.wwmm.easyeffects.libportal"); + + ui::gsettings_bind_widget(settings, "enable-autostart", g_enable_autostart); + + g_signal_connect(enable_autostart, "state-set", G_CALLBACK(on_enable_autostart), nullptr); + g_signal_connect(shutdown_on_window_close, "state-set", G_CALLBACK(on_shutdown_on_window_close), nullptr); + + // sanity checks in case switch(es) was somehow already set previously. + // give extra info for debugging purposes + // the only the case where we must not ask the portal for access is if autostart is disabled and shutdown on window + // close is disabled + + auto enable_autostart_state = gtk_switch_get_active(enable_autostart); + auto shutdown_on_window_close_state = gtk_switch_get_active(shutdown_on_window_close); + + if ((enable_autostart_state == 0) && (shutdown_on_window_close_state == 0)) { + util::debug(std::string("doing portal sanity check, autostart and shutdown switches are disabled")); + + update_background_portal(false); + } else if ((enable_autostart_state != 0) && (shutdown_on_window_close_state != 0)) { + util::debug(std::string("doing portal sanity check, autostart and shutdown switches are enabled")); + + update_background_portal(true); + } else if ((enable_autostart_state != 0) && (shutdown_on_window_close_state == 0)) { + util::debug(std::string("doing portal sanity check, autostart switch is enabled and shutdown switch is disabled")); + + update_background_portal(true); + } else { + util::debug( + std::string("not doing portal sanity check, autostart switch should be disabled and shutdown switch should be " + "enabled so no background portal access is needed")); + } +} + +} // namespace libportal diff --git a/src/limiter.cpp b/src/limiter.cpp new file mode 100644 index 0000000..86b37b8 --- /dev/null +++ b/src/limiter.cpp @@ -0,0 +1,207 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "limiter.hpp" + +Limiter::Limiter(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::limiter, tags::plugin_package::lsp, schema, schema_path, pipe_manager, true) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/sc_limiter_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/sc_limiter_stereo is not installed"); + } + + gconnections.push_back(g_signal_connect(settings, "changed::external-sidechain", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-input-device", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + lv2_wrapper->bind_key_enum<"mode", "mode">(settings); + + lv2_wrapper->bind_key_enum<"ovs", "oversampling">(settings); + + lv2_wrapper->bind_key_enum<"dith", "dithering">(settings); + + lv2_wrapper->bind_key_double<"lk", "lookahead">(settings); + + lv2_wrapper->bind_key_double<"at", "attack">(settings); + + lv2_wrapper->bind_key_double<"rt", "release">(settings); + + lv2_wrapper->bind_key_double_db<"th", "threshold">(settings); + + lv2_wrapper->bind_key_bool<"boost", "gain-boost">(settings); + + lv2_wrapper->bind_key_double_db<"scp", "sidechain-preamp">(settings); + + lv2_wrapper->bind_key_double<"slink", "stereo-link">(settings); + + lv2_wrapper->bind_key_bool<"alr", "alr">(settings); + + lv2_wrapper->bind_key_double<"alr_at", "alr-attack">(settings); + + lv2_wrapper->bind_key_double<"alr_rt", "alr-release">(settings); + + lv2_wrapper->bind_key_double_db<"knee", "alr-knee">(settings); + + lv2_wrapper->bind_key_bool<"extsc", "external-sidechain">(settings); + + setup_input_output_gain(); +} + +Limiter::~Limiter() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Limiter::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Limiter::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out, probe_left, probe_right); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + gain_l_port_value = lv2_wrapper->get_control_port_value("grlm_l"); + gain_r_port_value = lv2_wrapper->get_control_port_value("grlm_r"); + sidechain_l_port_value = lv2_wrapper->get_control_port_value("sclm_l"); + sidechain_r_port_value = lv2_wrapper->get_control_port_value("sclm_r"); + + gain_left.emit(gain_l_port_value); + gain_right.emit(gain_r_port_value); + sidechain_left.emit(sidechain_l_port_value); + sidechain_right.emit(sidechain_r_port_value); + + notify(); + } + } +} + +void Limiter::update_sidechain_links(const std::string& key) { + if (g_settings_get_boolean(settings, "external-sidechain") == 0) { + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + return; + } + + const auto device_name = util::gsettings_get_string(settings, "sidechain-input-device"); + + NodeInfo input_device = pm->ee_source_node; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == device_name) { + input_device = node; + + break; + } + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + for (const auto& link : pm->link_nodes(input_device.id, get_node_id(), true)) { + list_proxies.push_back(link); + } +} + +void Limiter::update_probe_links() { + update_sidechain_links(""); +} + +auto Limiter::get_latency_seconds() -> float { + return this->latency_value; +} diff --git a/src/limiter_preset.cpp b/src/limiter_preset.cpp new file mode 100644 index 0000000..07df4de --- /dev/null +++ b/src/limiter_preset.cpp @@ -0,0 +1,105 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "limiter_preset.hpp" + +LimiterPreset::LimiterPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::limiter::id, + tags::schema::limiter::input_path, + tags::schema::limiter::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::limiter).append("#").append(util::to_string(index)); +} + +void LimiterPreset::save(nlohmann::json& json) { + json[section][instance_name]["mode"] = util::gsettings_get_string(settings, "mode"); + + json[section][instance_name]["oversampling"] = util::gsettings_get_string(settings, "oversampling"); + + json[section][instance_name]["dithering"] = util::gsettings_get_string(settings, "dithering"); + + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["lookahead"] = g_settings_get_double(settings, "lookahead"); + + json[section][instance_name]["attack"] = g_settings_get_double(settings, "attack"); + + json[section][instance_name]["release"] = g_settings_get_double(settings, "release"); + + json[section][instance_name]["threshold"] = g_settings_get_double(settings, "threshold"); + + json[section][instance_name]["sidechain-preamp"] = g_settings_get_double(settings, "sidechain-preamp"); + + json[section][instance_name]["stereo-link"] = g_settings_get_double(settings, "stereo-link"); + + json[section][instance_name]["alr-attack"] = g_settings_get_double(settings, "alr-attack"); + + json[section][instance_name]["alr-release"] = g_settings_get_double(settings, "alr-release"); + + json[section][instance_name]["alr-knee"] = g_settings_get_double(settings, "alr-knee"); + + json[section][instance_name]["alr"] = g_settings_get_boolean(settings, "alr") != 0; + + json[section][instance_name]["gain-boost"] = g_settings_get_boolean(settings, "gain-boost") != 0; + + json[section][instance_name]["external-sidechain"] = g_settings_get_boolean(settings, "external-sidechain") != 0; +} + +void LimiterPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "mode", "mode"); + + update_key(json.at(section).at(instance_name), settings, "oversampling", "oversampling"); + + update_key(json.at(section).at(instance_name), settings, "dithering", "dithering"); + + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "lookahead", "lookahead"); + + update_key(json.at(section).at(instance_name), settings, "attack", "attack"); + + update_key(json.at(section).at(instance_name), settings, "release", "release"); + + update_key(json.at(section).at(instance_name), settings, "threshold", "threshold"); + + update_key(json.at(section).at(instance_name), settings, "sidechain-preamp", "sidechain-preamp"); + + update_key(json.at(section).at(instance_name), settings, "stereo-link", "stereo-link"); + + update_key(json.at(section).at(instance_name), settings, "alr-attack", "alr-attack"); + + update_key(json.at(section).at(instance_name), settings, "alr-release", "alr-release"); + + update_key(json.at(section).at(instance_name), settings, "alr-knee", "alr-knee"); + + update_key(json.at(section).at(instance_name), settings, "alr", "alr"); + + update_key(json.at(section).at(instance_name), settings, "gain-boost", "gain-boost"); + + update_key(json.at(section).at(instance_name), settings, "external-sidechain", "external-sidechain"); +} diff --git a/src/limiter_ui.cpp b/src/limiter_ui.cpp new file mode 100644 index 0000000..5299958 --- /dev/null +++ b/src/limiter_ui.cpp @@ -0,0 +1,400 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "limiter_ui.hpp" + +namespace ui::limiter_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr limiter; + + std::vector connections; + + std::vector gconnections; +}; + +struct _LimiterBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkDropDown *mode, *oversampling, *dither; + + GtkDropDown* dropdown_input_devices; + + GtkLabel *gain_left, *gain_right, *sidechain_left, *sidechain_right; + + GtkSpinButton *sc_preamp, *lookahead, *attack, *release, *threshold, *stereo_link, *alr_attack, *alr_release, + *alr_knee; + + GtkCheckButton* gain_boost; + + GtkToggleButton *alr, *external_sidechain, *show_native_ui; + + GListStore* input_devices_model; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(LimiterBox, limiter_box, GTK_TYPE_BOX) + +void on_reset(LimiterBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(LimiterBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->limiter->show_native_ui(); + } else { + self->data->limiter->close_native_ui(); + } +} + +void setup_dropdown_input_device(LimiterBox* self) { + auto* selection = gtk_single_selection_new(G_LIST_MODEL(self->input_devices_model)); + + g_signal_connect(self->dropdown_input_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, LimiterBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->settings, "sidechain-input-device", holder->info->name.c_str()); + } + }), + self); + + gtk_drop_down_set_model(self->dropdown_input_devices, G_LIST_MODEL(self->input_devices_model)); + + g_object_unref(selection); +} + +void setup(LimiterBox* self, std::shared_ptr limiter, const std::string& schema_path, PipeManager* pm) { + self->data->limiter = limiter; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::limiter::id, schema_path.c_str()); + + limiter->set_post_messages(true); + + setup_dropdown_input_device(self); + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == tags::pipewire::ee_sink_name || node.name == tags::pipewire::ee_source_name) { + continue; + } + + if (node.media_class == tags::pipewire::media_class::source || + node.media_class == tags::pipewire::media_class::virtual_source || + node.media_role == tags::pipewire::media_role::dsp) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + } + } + + self->data->connections.push_back(limiter->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(limiter->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(limiter->gain_left.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->gain_left)) { + return; + } + + gtk_label_set_text(self->gain_left, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(limiter->gain_right.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->gain_right)) { + return; + } + + gtk_label_set_text(self->gain_right, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(limiter->sidechain_left.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->sidechain_left)) { + return; + } + + gtk_label_set_text(self->sidechain_left, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(limiter->sidechain_right.connect([=](const float value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LABEL(self->sidechain_right)) { + return; + } + + gtk_label_set_text(self->sidechain_right, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); + }); + })); + + self->data->connections.push_back(pm->source_added.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->source_removed.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->input_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->limiter->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "sidechain-preamp", gtk_spin_button_get_adjustment(self->sc_preamp), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "lookahead", gtk_spin_button_get_adjustment(self->lookahead), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "attack", gtk_spin_button_get_adjustment(self->attack), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "release", gtk_spin_button_get_adjustment(self->release), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "threshold", gtk_spin_button_get_adjustment(self->threshold), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-link", gtk_spin_button_get_adjustment(self->stereo_link), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "alr-attack", gtk_spin_button_get_adjustment(self->alr_attack), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "alr-release", gtk_spin_button_get_adjustment(self->alr_release), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "alr-knee", gtk_spin_button_get_adjustment(self->alr_knee), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "gain-boost", self->gain_boost, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "external-sidechain", self->external_sidechain, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "alr", self->alr, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "mode", self->mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "oversampling", self->oversampling); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "dithering", self->dither); +} + +void dispose(GObject* object) { + auto* self = EE_LIMITER_BOX(object); + + self->data->limiter->set_post_messages(false); + + self->data->limiter->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(limiter_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_LIMITER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(limiter_box_parent_class)->finalize(object); +} + +void limiter_box_class_init(LimiterBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::limiter_ui); + + gtk_widget_class_bind_template_child(widget_class, LimiterBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, LimiterBox, mode); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, oversampling); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, dither); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, sc_preamp); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, lookahead); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, attack); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, release); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, threshold); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, stereo_link); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, alr_attack); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, alr_release); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, alr_knee); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, alr); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, external_sidechain); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, gain_boost); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, gain_left); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, gain_right); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, sidechain_left); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, sidechain_right); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, dropdown_input_devices); + gtk_widget_class_bind_template_child(widget_class, LimiterBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); +} + +void limiter_box_init(LimiterBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"dB">(self->sc_preamp, self->threshold, self->alr_knee); + + prepare_spinbuttons<"ms">(self->lookahead, self->attack, self->release, self->alr_attack, self->alr_release); + + prepare_spinbuttons<"%">(self->stereo_link); +} + +auto create() -> LimiterBox* { + return static_cast(g_object_new(EE_TYPE_LIMITER_BOX, nullptr)); +} + +} // namespace ui::limiter_box diff --git a/src/loudness.cpp b/src/loudness.cpp new file mode 100644 index 0000000..c0a4c44 --- /dev/null +++ b/src/loudness.cpp @@ -0,0 +1,125 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "loudness.hpp" + +Loudness::Loudness(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::loudness, tags::plugin_package::lsp, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/loud_comp_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/loud_comp_stereo is not installed"); + } + + lv2_wrapper->bind_key_enum<"std", "std">(settings); + + lv2_wrapper->bind_key_enum<"fft", "fft">(settings); + + lv2_wrapper->bind_key_double<"volume", "volume">(settings); + + lv2_wrapper->bind_key_bool<"hclip", "clipping">(settings); + + lv2_wrapper->bind_key_double<"hcrange", "clipping-range">(settings); + + setup_input_output_gain(); +} + +Loudness::~Loudness() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Loudness::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Loudness::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto Loudness::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/loudness_preset.cpp b/src/loudness_preset.cpp new file mode 100644 index 0000000..cf97832 --- /dev/null +++ b/src/loudness_preset.cpp @@ -0,0 +1,65 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "loudness_preset.hpp" + +LoudnessPreset::LoudnessPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::loudness::id, + tags::schema::loudness::input_path, + tags::schema::loudness::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::loudness).append("#").append(util::to_string(index)); +} + +void LoudnessPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["fft"] = util::gsettings_get_string(settings, "fft"); + + json[section][instance_name]["std"] = util::gsettings_get_string(settings, "std"); + + json[section][instance_name]["volume"] = g_settings_get_double(settings, "volume"); + + json[section][instance_name]["clipping"] = g_settings_get_boolean(settings, "clipping") != 0; + + json[section][instance_name]["clipping-range"] = g_settings_get_double(settings, "clipping-range"); +} + +void LoudnessPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "fft", "fft"); + + update_key(json.at(section).at(instance_name), settings, "std", "std"); + + update_key(json.at(section).at(instance_name), settings, "volume", "volume"); + + update_key(json.at(section).at(instance_name), settings, "clipping", "clipping"); + + update_key(json.at(section).at(instance_name), settings, "clipping-range", "clipping-range"); +} diff --git a/src/loudness_ui.cpp b/src/loudness_ui.cpp new file mode 100644 index 0000000..8874db9 --- /dev/null +++ b/src/loudness_ui.cpp @@ -0,0 +1,216 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "loudness_ui.hpp" + +namespace ui::loudness_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr loudness; + + std::vector connections; + + std::vector gconnections; +}; + +struct _LoudnessBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkDropDown *fft_size, *standard; + + GtkSwitch* clipping; + + GtkSpinButton *volume, *clipping_range; + + GtkToggleButton* show_native_ui; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(LoudnessBox, loudness_box, GTK_TYPE_BOX) + +void on_reset(LoudnessBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(LoudnessBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->loudness->show_native_ui(); + } else { + self->data->loudness->close_native_ui(); + } +} + +void setup(LoudnessBox* self, std::shared_ptr loudness, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->loudness = loudness; + + self->settings = g_settings_new_with_path(tags::schema::loudness::id, schema_path.c_str()); + + loudness->set_post_messages(true); + + self->data->connections.push_back(loudness->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(loudness->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->loudness->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "fft", self->fft_size); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "std", self->standard); + + g_settings_bind(self->settings, "volume", gtk_spin_button_get_adjustment(self->volume), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "clipping", self->clipping, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "clipping-range", gtk_spin_button_get_adjustment(self->clipping_range), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_LOUDNESS_BOX(object); + + self->data->loudness->set_post_messages(false); + + self->data->loudness->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(loudness_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_LOUDNESS_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(loudness_box_parent_class)->finalize(object); +} + +void loudness_box_class_init(LoudnessBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::loudness_ui); + + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, volume); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, standard); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, fft_size); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, clipping); + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, clipping_range); + + gtk_widget_class_bind_template_child(widget_class, LoudnessBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); +} + +void loudness_box_init(LoudnessBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"dB">(self->volume, self->clipping_range); +} + +auto create() -> LoudnessBox* { + return static_cast(g_object_new(EE_TYPE_LOUDNESS_BOX, nullptr)); +} + +} // namespace ui::loudness_box diff --git a/src/lv2_wrapper.cpp b/src/lv2_wrapper.cpp new file mode 100644 index 0000000..97b42a2 --- /dev/null +++ b/src/lv2_wrapper.cpp @@ -0,0 +1,690 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "lv2_wrapper.hpp" + +namespace lv2 { + +constexpr auto min_quantum = 32; +constexpr auto max_quantum = 8192; + +using namespace std::string_literals; + +auto lv2_printf(LV2_Log_Handle handle, LV2_URID type, const char* format, ...) -> int { + va_list args; + + va_start(args, format); + + int r = std::vprintf(format, args); + + va_end(args); + + return r; +} + +Lv2Wrapper::Lv2Wrapper(const std::string& plugin_uri) : plugin_uri(plugin_uri), world(lilv_world_new()) { + if (world == nullptr) { + util::warning("failed to initialized the world"); + + return; + } + + auto* const uri = lilv_new_uri(world, plugin_uri.c_str()); + + if (uri == nullptr) { + util::warning("Invalid plugin URI: " + plugin_uri); + + return; + } + + lilv_world_load_all(world); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + + plugin = lilv_plugins_get_by_uri(plugins, uri); + + lilv_node_free(uri); + + if (plugin == nullptr) { + util::warning("Could not find the plugin: " + plugin_uri); + + return; + } + + found_plugin = true; + + check_required_features(); + + create_ports(); +} + +Lv2Wrapper::~Lv2Wrapper() { + if (instance != nullptr) { + lilv_instance_deactivate(instance); + lilv_instance_free(instance); + + instance = nullptr; + } + + if (world != nullptr) { + lilv_world_free(world); + } +} + +void Lv2Wrapper::check_required_features() { + LilvNodes* required_features = lilv_plugin_get_required_features(plugin); + + if (required_features != nullptr) { + for (auto* i = lilv_nodes_begin(required_features); !lilv_nodes_is_end(required_features, i); + i = lilv_nodes_next(required_features, i)) { + const LilvNode* required_feature = lilv_nodes_get(required_features, i); + + const char* required_feature_uri = lilv_node_as_uri(required_feature); + + util::debug(plugin_uri + " requires feature: " + required_feature_uri); + } + + lilv_nodes_free(required_features); + } +} + +void Lv2Wrapper::create_ports() { + n_ports = lilv_plugin_get_num_ports(plugin); + + ports.resize(n_ports); + + // Get min, max and default values for all ports + + std::vector values(n_ports); + std::vector minimum(n_ports); + std::vector maximum(n_ports); + + lilv_plugin_get_port_ranges_float(plugin, minimum.data(), maximum.data(), values.data()); + + LilvNode* lv2_InputPort = lilv_new_uri(world, LV2_CORE__InputPort); + LilvNode* lv2_OutputPort = lilv_new_uri(world, LV2_CORE__OutputPort); + LilvNode* lv2_AudioPort = lilv_new_uri(world, LV2_CORE__AudioPort); + LilvNode* lv2_ControlPort = lilv_new_uri(world, LV2_CORE__ControlPort); + LilvNode* lv2_AtomPort = lilv_new_uri(world, LV2_ATOM__AtomPort); + LilvNode* lv2_connectionOptional = lilv_new_uri(world, LV2_CORE__connectionOptional); + + for (uint n = 0U; n < n_ports; n++) { + auto* port = &ports[n]; + + const auto* lilv_port = lilv_plugin_get_port_by_index(plugin, n); + + auto* port_name = lilv_port_get_name(plugin, lilv_port); + + port->index = n; + port->name = lilv_node_as_string(port_name); + port->symbol = lilv_node_as_string(lilv_port_get_symbol(plugin, lilv_port)); + port->optional = lilv_port_has_property(plugin, lilv_port, lv2_connectionOptional); + + // Save port default value + if (!std::isnan(values[n])) { + port->value = values[n]; + } + // Save minimum and maximum values + if (!std::isnan(minimum[n])) { + port->min = minimum[n]; + } + if (!std::isnan(maximum[n])) { + port->max = maximum[n]; + } + + // util::warning("port name: " + port->name); + // util::warning("port symbol: " + port->symbol); + + if (lilv_port_is_a(plugin, lilv_port, lv2_InputPort)) { + port->is_input = true; + } else if (!lilv_port_is_a(plugin, lilv_port, lv2_OutputPort) && !port->optional) { + util::warning("Port " + port->name + " is neither input nor output!"); + } + + if (lilv_port_is_a(plugin, lilv_port, lv2_ControlPort)) { + port->type = TYPE_CONTROL; + } else if (lilv_port_is_a(plugin, lilv_port, lv2_AtomPort)) { + port->type = TYPE_ATOM; + + // util::warning("port name: " + port->name); + } else if (lilv_port_is_a(plugin, lilv_port, lv2_AudioPort)) { + port->type = TYPE_AUDIO; + + n_audio_in = (port->is_input) ? n_audio_in + 1 : n_audio_in; + n_audio_out = (!port->is_input) ? n_audio_out + 1 : n_audio_out; + } else if (!port->optional) { + util::warning("Port " + port->name + " has un unsupported type!"); + } + + lilv_node_free(port_name); + } + + // util::warning("n audio_in ports: " + util::to_string(n_audio_in)); + // util::warning("n audio_out ports: " + util::to_string(n_audio_out)); + + lilv_node_free(lv2_connectionOptional); + lilv_node_free(lv2_ControlPort); + lilv_node_free(lv2_AtomPort); + lilv_node_free(lv2_AudioPort); + lilv_node_free(lv2_OutputPort); + lilv_node_free(lv2_InputPort); +} + +auto Lv2Wrapper::create_instance(const uint& rate) -> bool { + this->rate = rate; + + if (instance != nullptr) { + deactivate(); + + lilv_instance_free(instance); + + instance = nullptr; + } + + LV2_Log_Log lv2_log = {this, &lv2_printf, [](LV2_Log_Handle handle, LV2_URID type, const char* fmt, va_list ap) { + return std::vprintf(fmt, ap); + }}; + + LV2_URID_Map lv2_map = {this, [](LV2_URID_Map_Handle handle, const char* uri) { + auto* lw = static_cast(handle); + + return lw->map_urid(uri); + }}; + + LV2_URID_Unmap lv2_unmap = {this, [](LV2_URID_Unmap_Handle handle, LV2_URID urid) { + auto* lw = static_cast(handle); + + return lw->map_urid_to_uri[urid].c_str(); + }}; + + const LV2_Feature lv2_log_feature = {LV2_LOG__log, &lv2_log}; + + const LV2_Feature lv2_map_feature = {LV2_URID__map, &lv2_map}; + + const LV2_Feature lv2_unmap_feature = {LV2_URID__unmap, &lv2_unmap}; + + auto options = std::to_array( + {{LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_PARAMETERS__sampleRate), sizeof(float), map_urid(LV2_ATOM__Float), &rate}, + {LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_BUF_SIZE__minBlockLength), sizeof(int32_t), map_urid(LV2_ATOM__Int), + &min_quantum}, + {LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_BUF_SIZE__maxBlockLength), sizeof(int32_t), map_urid(LV2_ATOM__Int), + &max_quantum}, + {LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_BUF_SIZE__nominalBlockLength), sizeof(int32_t), map_urid(LV2_ATOM__Int), + &n_samples}, + {LV2_OPTIONS_INSTANCE, 0, 0, 0, 0, nullptr}}); + + LV2_Feature feature_options = {.URI = LV2_OPTIONS__options, .data = options.data()}; + + const auto features = std::to_array( + {&lv2_log_feature, &lv2_map_feature, &lv2_unmap_feature, &feature_options, static_features.data(), nullptr}); + + instance = lilv_plugin_instantiate(plugin, rate, features.data()); + + if (instance == nullptr) { + util::warning("failed to instantiate " + plugin_uri); + + return false; + } + + connect_control_ports(); + + activate(); + + return true; +} + +void Lv2Wrapper::connect_control_ports() { + for (auto& p : ports) { + if (p.type == PortType::TYPE_CONTROL) { + lilv_instance_connect_port(instance, p.index, &p.value); + } + } +} + +void Lv2Wrapper::connect_data_ports(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (instance == nullptr) { + return; + } + + int count_input = 0; + int count_output = 0; + + for (const auto& p : ports) { + if (p.type == PortType::TYPE_AUDIO) { + if (p.is_input) { + if (count_input == 0) { + lilv_instance_connect_port(instance, p.index, left_in.data()); + } else if (count_input == 1) { + lilv_instance_connect_port(instance, p.index, right_in.data()); + } + + count_input++; + } else { + if (count_output == 0) { + lilv_instance_connect_port(instance, p.index, left_out.data()); + } else if (count_output == 1) { + lilv_instance_connect_port(instance, p.index, right_out.data()); + } + + count_output++; + } + } + } +} + +void Lv2Wrapper::connect_data_ports(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + if (instance == nullptr) { + return; + } + + int count_input = 0; + int count_output = 0; + + for (const auto& p : ports) { + if (p.type == PortType::TYPE_AUDIO) { + if (p.is_input) { + if (count_input == 0) { + lilv_instance_connect_port(instance, p.index, left_in.data()); + } else if (count_input == 1) { + lilv_instance_connect_port(instance, p.index, right_in.data()); + } else if (count_input == 2) { + lilv_instance_connect_port(instance, p.index, probe_left.data()); + } else if (count_input == 3) { + lilv_instance_connect_port(instance, p.index, probe_right.data()); + } + + count_input++; + } else { + if (count_output == 0) { + lilv_instance_connect_port(instance, p.index, left_out.data()); + } else if (count_output == 1) { + lilv_instance_connect_port(instance, p.index, right_out.data()); + } + + count_output++; + } + } + } +} + +void Lv2Wrapper::set_n_samples(const uint& value) { + this->n_samples = value; +} + +auto Lv2Wrapper::get_n_samples() const -> uint { + return this->n_samples; +} + +auto Lv2Wrapper::get_rate() const -> uint { + return this->rate; +} + +void Lv2Wrapper::activate() { + lilv_instance_activate(instance); +} + +void Lv2Wrapper::run() const { + if (instance != nullptr) { + lilv_instance_run(instance, n_samples); + } +} + +void Lv2Wrapper::deactivate() { + lilv_instance_deactivate(instance); +} + +void Lv2Wrapper::set_control_port_value(const std::string& symbol, const float& value) { + auto found = false; + + for (auto& p : ports) { + if (p.type == PortType::TYPE_CONTROL && p.symbol == symbol) { + if (!p.is_input) { + util::warning(plugin_uri + " port " + symbol + " is not an input!"); + + return; + } + + ui_port_event(p.index, value); + + // Check port bounds + if (value < p.min) { + // util::warning(plugin_uri + ": value " + util::to_string(value) + " is out of minimum limit for port " + + // p.symbol + " (" + p.name + ")"); + + p.value = p.min; + } else if (value > p.max) { + // util::warning(plugin_uri + ": value " + util::to_string(value) + " is out of maximum limit for port " + + // p.symbol + " (" + p.name + ")"); + + p.value = p.max; + } else { + p.value = value; + } + + found = true; + + break; + } + } + + if (!found) { + util::warning(plugin_uri + " port symbol not found: " + symbol); + } +} +auto Lv2Wrapper::get_control_port_value(const std::string& symbol) -> float { + for (const auto& p : ports) { + if (p.type == PortType::TYPE_CONTROL && p.symbol == symbol) { + return p.value; + } + } + + util::warning(plugin_uri + " port symbol not found: " + symbol); + + return 0.0F; +} + +auto Lv2Wrapper::has_instance() -> bool { + return instance != nullptr; +} + +auto Lv2Wrapper::map_urid(const std::string& uri) -> LV2_URID { + if (map_uri_to_urid.contains(uri)) { + return map_uri_to_urid[uri]; + } + + const auto hash = std::hash{}(uri); + + map_uri_to_urid[uri] = hash; + + map_urid_to_uri[hash] = uri; + + return static_cast(hash); +} + +void Lv2Wrapper::load_ui() { + // preparing the thread that loads the native ui and updates it over time + + std::thread ui_updater([=, this]() { + { + std::scoped_lock lku(ui_mutex); + + if (instance == nullptr) { + return; + } + + LilvUIs* uis = lilv_plugin_get_uis(plugin); + + if (uis == nullptr) { + return; + } + + /* + Code based on: + + https://github.com/moddevices/mod-host/blob/f36bce78eed80f4f7194c923afd4dcae2c80bc79/src/effects.c#L8203 + https://github.com/zrythm/zrythm/blob/1bc89335ca42b83ce759fd4cd0fd518e43b7983d/src/plugins/lv2/lv2_ui.c#L394 + */ + + LILV_FOREACH(uis, u, uis) { + const LilvUI* ui = lilv_uis_get(uis, u); + + std::string ui_uri = lilv_node_as_uri(lilv_ui_get_uri(ui)); + + util::debug(plugin_uri + " ui uri: "s + ui_uri); + + const LilvNode* binary_node = lilv_ui_get_binary_uri(ui); + const LilvNode* bundle_node = lilv_ui_get_bundle_uri(ui); + + { + auto path = lilv_file_uri_parse(lilv_node_as_uri(binary_node), nullptr); + + libhandle = dlopen(path, RTLD_NOW); + + lilv_free(path); + } + + if (libhandle == nullptr) { + continue; + } + + auto descfn = reinterpret_cast(dlsym(libhandle, "lv2ui_descriptor")); + + if (descfn == nullptr) { + dlclose(libhandle); + + continue; + } + + const LV2UI_Show_Interface* show_iface = nullptr; + + uint32_t index = 0U; + + while ((ui_descriptor = descfn(index++)) != nullptr) { + if (ui_descriptor->extension_data == nullptr || ui_descriptor->URI != ui_uri) { + continue; + } + + idle_iface = static_cast(ui_descriptor->extension_data(LV2_UI__idleInterface)); + show_iface = static_cast(ui_descriptor->extension_data(LV2_UI__showInterface)); + + if (idle_iface == nullptr) { + continue; + } + + // initializing features + + LV2_Log_Log lv2_log = { + this, &lv2_printf, + [](LV2_Log_Handle handle, LV2_URID type, const char* fmt, va_list ap) { return std::vprintf(fmt, ap); }}; + + LV2_URID_Map lv2_map = {this, [](LV2_URID_Map_Handle handle, const char* uri) { + auto* lw = static_cast(handle); + + return lw->map_urid(uri); + }}; + + LV2_URID_Unmap lv2_unmap = {this, [](LV2_URID_Unmap_Handle handle, LV2_URID urid) { + auto* lw = static_cast(handle); + + return lw->map_urid_to_uri[urid].c_str(); + }}; + + const LV2_Feature lv2_log_feature = {LV2_LOG__log, &lv2_log}; + + const LV2_Feature lv2_map_feature = {LV2_URID__map, &lv2_map}; + + const LV2_Feature lv2_unmap_feature = {LV2_URID__unmap, &lv2_unmap}; + + auto options = + std::to_array({{LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_PARAMETERS__sampleRate), + sizeof(float), map_urid(LV2_ATOM__Float), &rate}, + {LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_BUF_SIZE__minBlockLength), + sizeof(int32_t), map_urid(LV2_ATOM__Int), &min_quantum}, + {LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_BUF_SIZE__maxBlockLength), + sizeof(int32_t), map_urid(LV2_ATOM__Int), &max_quantum}, + {LV2_OPTIONS_INSTANCE, 0, map_urid(LV2_BUF_SIZE__nominalBlockLength), + sizeof(int32_t), map_urid(LV2_ATOM__Int), &n_samples}, + {LV2_OPTIONS_INSTANCE, 0, 0, 0, 0, nullptr}}); + + LV2_Feature feature_options = {.URI = LV2_OPTIONS__options, .data = options.data()}; + + LV2_Extension_Data_Feature extension_data = {instance->lv2_descriptor->extension_data}; + + const LV2_Feature feature_dataAccess = {LV2_DATA_ACCESS_URI, &extension_data}; + + const LV2_Feature feature_instAccess = {LV2_INSTANCE_ACCESS_URI, instance->lv2_handle}; + + const LV2_Feature idle_feature = {LV2_UI__idleInterface, nullptr}; + + const LV2_Feature parent_feature = {LV2_UI__parent, nullptr}; + + const LV2_Feature fixed_size_feature = {LV2_UI__fixedSize, nullptr}; + + const LV2_Feature no_user_resize_feature = {LV2_UI__noUserResize, nullptr}; + + const LV2_Feature make_resident_feature = {LV2_UI_makeResident, nullptr}; + + const LV2_Feature make_soname_resident_feature = {LV2_UI_makeSONameResident, nullptr}; + + const auto features = std::to_array( + {&lv2_log_feature, &lv2_map_feature, &lv2_unmap_feature, &feature_options, static_features.data(), + &feature_dataAccess, &feature_instAccess, &idle_feature, &parent_feature, &fixed_size_feature, + &no_user_resize_feature, &make_resident_feature, &make_soname_resident_feature, nullptr}); + + LV2UI_Widget widget = nullptr; + + auto bundle_path = lilv_file_uri_parse(lilv_node_as_uri(bundle_node), nullptr); + + ui_handle = ui_descriptor->instantiate( + ui_descriptor, plugin_uri.c_str(), bundle_path, + +[](LV2UI_Controller controller, uint32_t port_index, uint32_t buffer_size, uint32_t port_protocol, + const void* buffer) { + auto self = static_cast(controller); + + for (auto& p : self->ports) { + if (p.index == port_index) { + // util::warning("The user clicked on port: " + p.name + " -> " + p.symbol); + + if (port_protocol == 0) { // port is a ui:floatProtocol + p.value = *static_cast(buffer); + } + } + } + }, + this, &widget, features.data()); + + lilv_free(bundle_path); + + if (ui_handle == nullptr) { + continue; + } + + util::debug("found ui handle for" + ui_uri); + + if (show_iface != nullptr) { + if (show_iface->show(ui_handle) != 0) { + util::warning("failed to show ui for " + ui_uri); + } + } + + break; + } + } + + lilv_uis_free(uis); + } + + // initilizing the ui with the current control values + + for (const auto& p : ports) { + if (p.type == PortType::TYPE_CONTROL) { + ui_descriptor->port_event(ui_handle, p.index, sizeof(float), 0, &p.value); + } + } + + while (has_ui()) { + { + std::scoped_lock lk(ui_mutex); + + notify_ui(); + update_ui(); + } + + std::this_thread::sleep_for(std::chrono::milliseconds(static_cast(1000.0 / ui_update_rate))); + } + }); + + ui_updater.detach(); +} + +void Lv2Wrapper::notify_ui() { + if (ui_descriptor == nullptr || ui_handle == nullptr) { + return; + } + + if (ui_descriptor->port_event == nullptr) { + return; + } + + for (const auto& p : ports) { + if (p.type == PortType::TYPE_CONTROL && !p.is_input) { + ui_descriptor->port_event(ui_handle, p.index, sizeof(float), 0, &p.value); + } + } +} + +void Lv2Wrapper::update_ui() { + if (idle_iface == nullptr || ui_handle == nullptr) { + return; + } + + idle_iface->idle(ui_handle); +} + +auto Lv2Wrapper::has_ui() -> bool { + return ui_handle != nullptr; +} + +void Lv2Wrapper::close_ui() { + std::scoped_lock lk(ui_mutex); + + if (ui_descriptor != nullptr && ui_handle != nullptr) { + ui_descriptor->cleanup(ui_handle); + } + + if (libhandle != nullptr) { + dlclose(libhandle); + } + + ui_handle = nullptr; + ui_descriptor = nullptr; + libhandle = nullptr; +} + +void Lv2Wrapper::set_ui_update_rate(const uint& value) { + ui_update_rate = value; +} + +void Lv2Wrapper::ui_port_event(const uint& port_index, const float& value) { + if (ui_descriptor == nullptr || ui_handle == nullptr) { + return; + } + + ui_descriptor->port_event(ui_handle, port_index, sizeof(float), 0, &value); +} + +void Lv2Wrapper::native_ui_to_gsettings() { + if (ui_descriptor == nullptr || ui_handle == nullptr) { // only write to the database if the native ui is being used + return; + } + + for (const auto& func : gsettings_sync_funcs) { + func(); + } +} + +} // namespace lv2 diff --git a/src/maximizer.cpp b/src/maximizer.cpp new file mode 100644 index 0000000..d1fcad5 --- /dev/null +++ b/src/maximizer.cpp @@ -0,0 +1,140 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "maximizer.hpp" + +Maximizer::Maximizer(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::maximizer, tags::plugin_package::zam, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("urn:zamaudio:ZaMaximX2"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "urn:zamaudio:ZaMaximX2 is not installed"); + } + + lv2_wrapper->bind_key_double<"thresh", "threshold">(settings); + + lv2_wrapper->bind_key_double<"ceil", "ceiling">(settings); + + lv2_wrapper->bind_key_double<"rel", "release">(settings); + + setup_input_output_gain(); + + // g_timeout_add_seconds(1, GSourceFunc(+[](Maximizer* self) { + // if (!self->lv2_wrapper->has_ui()) { + // self->lv2_wrapper->load_ui(); + // } else { + // self->lv2_wrapper->notify_ui(); + // self->lv2_wrapper->update_ui(); + // } + + // return 1; + // }), + // this); +} + +Maximizer::~Maximizer() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Maximizer::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Maximizer::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("lv2_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + // reduction needed as double for levelbar widget ui, so we convert it here + + reduction_port_value = static_cast(lv2_wrapper->get_control_port_value("gr")); + + reduction.emit(reduction_port_value); + + notify(); + } + } +} + +auto Maximizer::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/maximizer_preset.cpp b/src/maximizer_preset.cpp new file mode 100644 index 0000000..2e4fd9d --- /dev/null +++ b/src/maximizer_preset.cpp @@ -0,0 +1,57 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "maximizer_preset.hpp" + +MaximizerPreset::MaximizerPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::maximizer::id, + tags::schema::maximizer::input_path, + tags::schema::maximizer::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::maximizer).append("#").append(util::to_string(index)); +} + +void MaximizerPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["release"] = g_settings_get_double(settings, "release"); + + json[section][instance_name]["ceiling"] = g_settings_get_double(settings, "ceiling"); + + json[section][instance_name]["threshold"] = g_settings_get_double(settings, "threshold"); +} + +void MaximizerPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "release", "release"); + + update_key(json.at(section).at(instance_name), settings, "ceiling", "ceiling"); + + update_key(json.at(section).at(instance_name), settings, "threshold", "threshold"); +} diff --git a/src/maximizer_ui.cpp b/src/maximizer_ui.cpp new file mode 100644 index 0000000..6788f1a --- /dev/null +++ b/src/maximizer_ui.cpp @@ -0,0 +1,210 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "maximizer_ui.hpp" + +namespace ui::maximizer_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr maximizer; + + std::vector connections; + + std::vector gconnections; +}; + +struct _MaximizerBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkSpinButton *release, *threshold, *ceiling; + + GtkLevelBar* reduction_levelbar; + + GtkLabel* reduction_label; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(MaximizerBox, maximizer_box, GTK_TYPE_BOX) + +void on_reset(MaximizerBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(MaximizerBox* self, std::shared_ptr maximizer, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->maximizer = maximizer; + + self->settings = g_settings_new_with_path(tags::schema::maximizer::id, schema_path.c_str()); + + maximizer->set_post_messages(true); + + self->data->connections.push_back(maximizer->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(maximizer->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(maximizer->reduction.connect([=](const double value) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + if (!GTK_IS_LEVEL_BAR(self->reduction_levelbar) || !GTK_IS_LABEL(self->reduction_label)) { + return; + } + + gtk_level_bar_set_value(self->reduction_levelbar, value); + gtk_label_set_text(self->reduction_label, fmt::format("{0:.0f}", value).c_str()); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->maximizer->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "ceiling", gtk_spin_button_get_adjustment(self->ceiling), "value", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "release", gtk_spin_button_get_adjustment(self->release), "value", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "threshold", gtk_spin_button_get_adjustment(self->threshold), "value", + G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_MAXIMIZER_BOX(object); + + self->data->maximizer->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(maximizer_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_MAXIMIZER_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(maximizer_box_parent_class)->finalize(object); +} + +void maximizer_box_class_init(MaximizerBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::maximizer_ui); + + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, release); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, threshold); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, ceiling); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, reduction_levelbar); + gtk_widget_class_bind_template_child(widget_class, MaximizerBox, reduction_label); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void maximizer_box_init(MaximizerBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"dB">(self->threshold, self->ceiling); + + prepare_spinbuttons<"ms">(self->release); +} + +auto create() -> MaximizerBox* { + return static_cast(g_object_new(EE_TYPE_MAXIMIZER_BOX, nullptr)); +} + +} // namespace ui::maximizer_box diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..a12957d --- /dev/null +++ b/src/meson.build @@ -0,0 +1,203 @@ +easyeffects_sources = [ + 'easyeffects.cpp', + 'application.cpp', + 'application_ui.cpp', + 'apps_box.cpp', + 'app_info.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_impulses.cpp', + 'convolver_menu_combine.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', + 'echo_canceller.cpp', + 'echo_canceller_preset.cpp', + 'echo_canceller_ui.cpp', + 'effects_base.cpp', + 'effects_box.cpp', + 'equalizer_band_box.cpp', + 'equalizer.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_lowpass.cpp', + 'fir_filter_highpass.cpp', + 'gate.cpp', + 'gate_preset.cpp', + 'gate_ui.cpp', + 'ladspa_wrapper.cpp', + 'level_meter.cpp', + 'level_meter_preset.cpp', + 'level_meter_ui.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', + '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_menu.cpp', + 'presets_manager.cpp', + 'reverb.cpp', + 'reverb_preset.cpp', + 'reverb_ui.cpp', + 'resampler.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_output_effects.cpp', + 'stream_input_effects.cpp', + 'tags_plugin_name.cpp', + 'test_signals.cpp', + 'ui_helpers.cpp', + 'util.cpp', + gresources +] + +cc = meson.get_compiler('c') + +# apparantly this is not available as a standard dependency +have_ladspa = cc.has_header('ladspa.h') + +if not have_ladspa + error('Dependency "ladspa" not found, tried looking for ladspa.h') +endif + +cxx = meson.get_compiler('cpp') + +zita_convolver = cxx.find_library('zita-convolver', required: true) + +# always require these libraries if the respective meson option is enabled, so they can't be accidentally left out + +rnnoise = dependency('rnnoise', include_type: 'system', required: get_option('enable-rnnoise')) + +if get_option('enable-rnnoise') + add_project_arguments('-DENABLE_RNNOISE=1', language : 'cpp') +else + status += 'The RNNoise library is not being used. The calls to its functions will be disabled.' +endif + +libportal = dependency('libportal-gtk4', include_type: 'system', required: get_option('enable-libportal')) + +if get_option('enable-libportal') + add_project_arguments('-DENABLE_LIBPORTAL=1', language : 'cpp') + easyeffects_sources += 'libportal.cpp' + status += 'Using libportal to handle autostart files.' +endif + +if get_option('enable-libcpp-workarounds') + add_project_arguments('-DENABLE_LIBCPP_WORKAROUNDS=1', language : 'cpp') + status += 'Using libc++ workarounds.' +endif + +tbb = cxx.find_library('tbb', required: true) + +easyeffects_deps = [ + dependency('libpipewire-0.3', version: '>=0.3.58', include_type: 'system'), + dependency('glib-2.0', version: '>=2.56', include_type: 'system'), + dependency('gtk4', version: '>=4.10', include_type: 'system'), + dependency('libadwaita-1', version: '>=1.2.0', include_type: 'system'), + dependency('sigc++-3.0', version: '>=3.0.6', include_type: 'system'), + dependency('lilv-0', version: '>=0.22', include_type: 'system'), + dependency('lv2', version: '>=1.18.2', include_type: 'system'), + dependency('libbs2b', include_type: 'system'), + dependency('sndfile', include_type: 'system'), + dependency('fftw3f', include_type: 'system'), + dependency('fftw3', include_type: 'system'), + dependency('libebur128',version: '>=1.2.0', include_type: 'system'), + dependency('samplerate', include_type: 'system'), + dependency('soundtouch', include_type: 'system'), + dependency('speexdsp', include_type: 'system'), + dependency('nlohmann_json', include_type: 'system'), + dependency('fmt', version: '>=8.0.0', include_type: 'system'), + dependency('gsl', include_type: 'system'), + dependency('threads'), + tbb, + zita_convolver, + rnnoise, + libportal, + config_h +] + +executable( + meson.project_name(), + easyeffects_sources, + include_directories : [include_dir,config_h_dir], + dependencies : easyeffects_deps, + install: true, + link_args: link_args +) diff --git a/src/module_info_holder.cpp b/src/module_info_holder.cpp new file mode 100644 index 0000000..dff707b --- /dev/null +++ b/src/module_info_holder.cpp @@ -0,0 +1,123 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "module_info_holder.hpp" + +namespace ui::holders { + +enum { PROP_0, PROP_ID, PROP_NAME, PROP_DESCRIPTION, PROP_FILENAME }; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ModuleInfoHolder, module_info_holder, G_TYPE_OBJECT); + +void module_info_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec) { + auto* self = EE_MODULE_INFO_HOLDER(object); + + switch (prop_id) { + case PROP_ID: + self->info->id = g_value_get_uint(value); + break; + case PROP_NAME: + self->info->name = g_value_get_string(value); + break; + case PROP_DESCRIPTION: + self->info->description = g_value_get_string(value); + break; + case PROP_FILENAME: + self->info->filename = g_value_get_string(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +void module_info_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec) { + auto* self = EE_MODULE_INFO_HOLDER(object); + + switch (prop_id) { + case PROP_ID: + g_value_set_uint(value, self->info->id); + break; + case PROP_NAME: + g_value_set_string(value, self->info->name.c_str()); + break; + case PROP_DESCRIPTION: + g_value_set_string(value, self->info->description.c_str()); + break; + case PROP_FILENAME: + g_value_set_string(value, self->info->filename.c_str()); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +void module_info_holder_finalize(GObject* object) { + auto* self = EE_MODULE_INFO_HOLDER(object); + + self->info_updated.clear(); + + util::debug(util::to_string(self->info->id) + ", " + self->info->name + " finalized"); + + delete self->info; + + G_OBJECT_CLASS(module_info_holder_parent_class)->finalize(object); +} + +void module_info_holder_class_init(ModuleInfoHolderClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = module_info_holder_finalize; + object_class->set_property = module_info_set_property; + object_class->get_property = module_info_get_property; + + g_object_class_install_property( + object_class, PROP_ID, + g_param_spec_uint("id", "Id", "Id", G_MININT, G_MAXUINT, SPA_ID_INVALID, G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, PROP_NAME, + g_param_spec_string("name", "Name", "Name", nullptr, G_PARAM_READWRITE)); + + g_object_class_install_property( + object_class, PROP_DESCRIPTION, + g_param_spec_string("description", "Description", "Description", nullptr, G_PARAM_READWRITE)); + + g_object_class_install_property( + object_class, PROP_FILENAME, + g_param_spec_string("file-name", "File Name", "File Name", nullptr, G_PARAM_READWRITE)); +} + +void module_info_holder_init(ModuleInfoHolder* self) { + self->info = new ModuleInfo(); +} + +auto create(const ModuleInfo& info) -> ModuleInfoHolder* { + auto* holder = static_cast(g_object_new(EE_TYPE_MODULE_INFO_HOLDER, nullptr)); + + holder->info->id = info.id; + holder->info->name = info.name; + holder->info->description = info.description; + holder->info->filename = info.filename; + + return holder; +} + +} // namespace ui::holders diff --git a/src/multiband_compressor.cpp b/src/multiband_compressor.cpp new file mode 100644 index 0000000..58d6d7c --- /dev/null +++ b/src/multiband_compressor.cpp @@ -0,0 +1,206 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_compressor.hpp" + +MultibandCompressor::MultibandCompressor(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, + tags::plugin_name::multiband_compressor, + tags::plugin_package::lsp, + schema, + schema_path, + pipe_manager, + true) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/sc_mb_compressor_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/sc_mb_compressor_stereo is not installed"); + } + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-input-device", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + lv2_wrapper->bind_key_enum<"mode", "compressor-mode">(settings); + + lv2_wrapper->bind_key_enum<"envb", "envelope-boost">(settings); + + lv2_wrapper->bind_key_bool<"ssplit", "stereo-split">(settings); + + // The following controls can assume -inf + lv2_wrapper->bind_key_double_db<"g_dry", "dry", false>(settings); + + lv2_wrapper->bind_key_double_db<"g_wet", "wet", false>(settings); + + bind_bands(std::make_index_sequence()); + + setup_input_output_gain(); +} + +MultibandCompressor::~MultibandCompressor() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void MultibandCompressor::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void MultibandCompressor::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out, probe_left, probe_right); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + for (uint n = 0U; n < n_bands; n++) { + const auto nstr = util::to_string(n); + + frequency_range_end_port_array.at(n) = lv2_wrapper->get_control_port_value("fre_" + nstr); + + envelope_port_array.at(n) = 0.5F * (lv2_wrapper->get_control_port_value("elm_" + nstr + "l") + + lv2_wrapper->get_control_port_value("elm_" + nstr + "r")); + + curve_port_array.at(n) = 0.5F * (lv2_wrapper->get_control_port_value("clm_" + nstr + "l") + + lv2_wrapper->get_control_port_value("clm_" + nstr + "r")); + + reduction_port_array.at(n) = 0.5F * (lv2_wrapper->get_control_port_value("rlm_" + nstr + "l") + + lv2_wrapper->get_control_port_value("rlm_" + nstr + "r")); + } + + frequency_range.emit(frequency_range_end_port_array); + envelope.emit(envelope_port_array); + curve.emit(curve_port_array); + reduction.emit(reduction_port_array); + + notify(); + } + } +} + +void MultibandCompressor::update_sidechain_links(const std::string& key) { + auto external_sidechain_enabled = false; + + for (uint n = 0U; !external_sidechain_enabled && n < n_bands; n++) { + const auto nstr = util::to_string(n); + + external_sidechain_enabled = g_settings_get_boolean(settings, ("external-sidechain" + nstr).c_str()) != 0; + } + + if (!external_sidechain_enabled) { + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + return; + } + + const auto device_name = util::gsettings_get_string(settings, "sidechain-input-device"); + + NodeInfo input_device = pm->ee_source_node; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == device_name) { + input_device = node; + + break; + } + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + for (const auto& link : pm->link_nodes(input_device.id, get_node_id(), true)) { + list_proxies.push_back(link); + } +} + +void MultibandCompressor::update_probe_links() { + update_sidechain_links(""); +} + +auto MultibandCompressor::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/multiband_compressor_band_box.cpp b/src/multiband_compressor_band_box.cpp new file mode 100644 index 0000000..36b218b --- /dev/null +++ b/src/multiband_compressor_band_box.cpp @@ -0,0 +1,322 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_compressor_band_box.hpp" + +namespace ui::multiband_compressor_band_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + int index; + + std::vector gconnections; +}; + +struct _MultibandCompressorBandBox { + GtkBox parent_instance; + + GtkToggleButton *bypass, *mute, *solo, *external_sidechain; + + GtkLabel *end_label, *gain_label, *envelope_label, *curve_label; + + GtkSpinButton *split_frequency, *lowcut_filter_frequency, *highcut_filter_frequency, *attack_time, *attack_threshold, + *release_time, *release_threshold, *ratio, *knee, *makeup, *sidechain_preamp, *sidechain_reactivity, + *sidechain_lookahead, *boost_amount, *boost_threshold; + + GtkCheckButton *lowcut_filter, *highcut_filter; + + GtkDropDown *compression_mode, *sidechain_mode, *sidechain_source, *stereo_split_source; + + GtkBox* split_frequency_box; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(MultibandCompressorBandBox, multiband_compressor_band_box, GTK_TYPE_BOX) + +gboolean set_boost_threshold_sensitive(MultibandCompressorBandBox* self, const guint selected_id) { + switch (selected_id) { + case 0U: // Downward + case 2U: // Boosting + return 0; + + default: + break; + } + + return 1; +} + +gboolean set_boost_amount_sensitive(MultibandCompressorBandBox* self, const guint selected_id) { + switch (selected_id) { + case 0U: // Downward + case 1U: // Upward + return 0; + + default: + break; + } + + return 1; +} + +void set_end_label(MultibandCompressorBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->end_label)) { + return; + } + + gtk_label_set_text(self->end_label, fmt::format("{0:.0f}", value).c_str()); +} + +void set_envelope_label(MultibandCompressorBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->envelope_label)) { + return; + } + + gtk_label_set_text(self->envelope_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); +} + +void set_curve_label(MultibandCompressorBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->curve_label)) { + return; + } + + gtk_label_set_text(self->curve_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); +} + +void set_gain_label(MultibandCompressorBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->gain_label)) { + return; + } + + gtk_label_set_text(self->gain_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); +} + +void setup(MultibandCompressorBandBox* self, GSettings* settings, int index) { + self->data->index = index; + self->settings = settings; + + using namespace tags::multiband_compressor; + + if (index > 0) { + g_settings_bind(settings, band_split_frequency[index].data(), gtk_spin_button_get_adjustment(self->split_frequency), + "value", G_SETTINGS_BIND_DEFAULT); + } else { + // removing split frequency from band 0 + + for (auto* child = gtk_widget_get_last_child(GTK_WIDGET(self->split_frequency_box)); child != nullptr; + child = gtk_widget_get_last_child(GTK_WIDGET(self->split_frequency_box))) { + gtk_box_remove(self->split_frequency_box, child); + } + + auto* label = gtk_label_new("0 Hz"); + + gtk_widget_set_halign(GTK_WIDGET(label), GTK_ALIGN_CENTER); + + gtk_box_append(self->split_frequency_box, GTK_WIDGET(label)); + } + + ui::gsettings_bind_enum_to_combo_widget(self->settings, band_compression_mode[index].data(), self->compression_mode); + + g_settings_bind(self->settings, band_compressor_enable[index].data(), self->bypass, "active", + G_SETTINGS_BIND_INVERT_BOOLEAN); + + g_settings_bind(self->settings, band_mute[index].data(), self->mute, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_solo[index].data(), self->solo, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_lowcut_filter[index].data(), self->lowcut_filter, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_highcut_filter[index].data(), self->highcut_filter, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_external_sidechain[index].data(), self->external_sidechain, "active", + G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, band_sidechain_mode[index].data(), self->sidechain_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, band_sidechain_source[index].data(), self->sidechain_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, band_stereo_split_source[index].data(), + self->stereo_split_source); + + g_settings_bind(settings, band_lowcut_filter_frequency[index].data(), + gtk_spin_button_get_adjustment(self->lowcut_filter_frequency), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_highcut_filter_frequency[index].data(), + gtk_spin_button_get_adjustment(self->highcut_filter_frequency), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_attack_time[index].data(), gtk_spin_button_get_adjustment(self->attack_time), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_attack_threshold[index].data(), gtk_spin_button_get_adjustment(self->attack_threshold), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_release_time[index].data(), gtk_spin_button_get_adjustment(self->release_time), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_release_threshold[index].data(), + gtk_spin_button_get_adjustment(self->release_threshold), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_ratio[index].data(), gtk_spin_button_get_adjustment(self->ratio), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_knee[index].data(), gtk_spin_button_get_adjustment(self->knee), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_makeup[index].data(), gtk_spin_button_get_adjustment(self->makeup), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_sidechain_preamp[index].data(), gtk_spin_button_get_adjustment(self->sidechain_preamp), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_sidechain_reactivity[index].data(), + gtk_spin_button_get_adjustment(self->sidechain_reactivity), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_sidechain_lookahead[index].data(), + gtk_spin_button_get_adjustment(self->sidechain_lookahead), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_boost_amount[index].data(), gtk_spin_button_get_adjustment(self->boost_amount), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_boost_threshold[index].data(), gtk_spin_button_get_adjustment(self->boost_threshold), + "value", G_SETTINGS_BIND_DEFAULT); + + // bind source dropdowns sensitive property to split-stereo gsettings boolean + + g_settings_bind(self->settings, "stereo-split", self->sidechain_source, "sensitive", + static_cast(G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN)); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split_source, "sensitive", G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_MULTIBAND_COMPRESSOR_BAND_BOX(object); + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->gconnections.clear(); + + util::debug("index: " + util::to_string(self->data->index) + " disposed"); + + G_OBJECT_CLASS(multiband_compressor_band_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_MULTIBAND_COMPRESSOR_BAND_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(multiband_compressor_band_box_parent_class)->finalize(object); +} + +void multiband_compressor_band_box_class_init(MultibandCompressorBandBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::multiband_compressor_band_ui); + + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, bypass); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, mute); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, solo); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, external_sidechain); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, end_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, gain_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, envelope_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, curve_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, split_frequency); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, split_frequency_box); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, lowcut_filter); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, highcut_filter); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, lowcut_filter_frequency); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, highcut_filter_frequency); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, attack_time); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, attack_threshold); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, release_time); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, release_threshold); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, ratio); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, knee); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, makeup); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, sidechain_preamp); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, sidechain_reactivity); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, sidechain_lookahead); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, boost_amount); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, boost_threshold); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, compression_mode); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, sidechain_mode); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, sidechain_source); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBandBox, stereo_split_source); + + gtk_widget_class_bind_template_callback(widget_class, set_boost_amount_sensitive); + gtk_widget_class_bind_template_callback(widget_class, set_boost_threshold_sensitive); +} + +void multiband_compressor_band_box_init(MultibandCompressorBandBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"Hz">(self->lowcut_filter_frequency, self->highcut_filter_frequency, self->split_frequency); + + prepare_spinbuttons<"ms">(self->attack_time, self->release_time, self->sidechain_reactivity, + self->sidechain_lookahead); + + prepare_spinbuttons<"dB">(self->attack_threshold, self->knee, self->makeup, self->sidechain_preamp, + self->boost_amount, self->boost_threshold); + + prepare_spinbuttons<"">(self->ratio); + + // This spinbutton can assume -inf + prepare_spinbuttons<"dB", false>(self->release_threshold); +} + +auto create() -> MultibandCompressorBandBox* { + return static_cast(g_object_new(EE_TYPE_MULTIBAND_COMPRESSOR_BAND_BOX, nullptr)); +} + +} // namespace ui::multiband_compressor_band_box diff --git a/src/multiband_compressor_preset.cpp b/src/multiband_compressor_preset.cpp new file mode 100644 index 0000000..619adca --- /dev/null +++ b/src/multiband_compressor_preset.cpp @@ -0,0 +1,221 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_compressor_preset.hpp" + +MultibandCompressorPreset::MultibandCompressorPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::multiband_compressor::id, + tags::schema::multiband_compressor::input_path, + tags::schema::multiband_compressor::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::multiband_compressor).append("#").append(util::to_string(index)); +} + +void MultibandCompressorPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["dry"] = g_settings_get_double(settings, "dry"); + + json[section][instance_name]["wet"] = g_settings_get_double(settings, "wet"); + + json[section][instance_name]["compressor-mode"] = util::gsettings_get_string(settings, "compressor-mode"); + + json[section][instance_name]["envelope-boost"] = util::gsettings_get_string(settings, "envelope-boost"); + + json[section][instance_name]["stereo-split"] = g_settings_get_boolean(settings, "stereo-split") != 0; + + for (uint n = 0U; n < n_bands; n++) { + const auto nstr = util::to_string(n); + const auto bandn = "band" + nstr; + + if (n > 0U) { + json[section][instance_name][bandn]["enable-band"] = + g_settings_get_boolean(settings, ("enable-band" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["split-frequency"] = + g_settings_get_double(settings, ("split-frequency" + nstr).c_str()); + } + + json[section][instance_name][bandn]["compressor-enable"] = + g_settings_get_boolean(settings, ("compressor-enable" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["solo"] = g_settings_get_boolean(settings, ("solo" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["mute"] = g_settings_get_boolean(settings, ("mute" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["attack-threshold"] = + g_settings_get_double(settings, ("attack-threshold" + nstr).c_str()); + + json[section][instance_name][bandn]["attack-time"] = + g_settings_get_double(settings, ("attack-time" + nstr).c_str()); + + json[section][instance_name][bandn]["release-threshold"] = + g_settings_get_double(settings, ("release-threshold" + nstr).c_str()); + + json[section][instance_name][bandn]["release-time"] = + g_settings_get_double(settings, ("release-time" + nstr).c_str()); + + json[section][instance_name][bandn]["ratio"] = g_settings_get_double(settings, ("ratio" + nstr).c_str()); + + json[section][instance_name][bandn]["knee"] = g_settings_get_double(settings, ("knee" + nstr).c_str()); + + json[section][instance_name][bandn]["makeup"] = g_settings_get_double(settings, ("makeup" + nstr).c_str()); + + json[section][instance_name][bandn]["compression-mode"] = + util::gsettings_get_string(settings, ("compression-mode" + nstr).c_str()); + + json[section][instance_name][bandn]["external-sidechain"] = + g_settings_get_boolean(settings, ("external-sidechain" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["sidechain-mode"] = + util::gsettings_get_string(settings, ("sidechain-mode" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-source"] = + util::gsettings_get_string(settings, ("sidechain-source" + nstr).c_str()); + + json[section][instance_name][bandn]["stereo-split-source"] = + util::gsettings_get_string(settings, ("stereo-split-source" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-lookahead"] = + g_settings_get_double(settings, ("sidechain-lookahead" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-reactivity"] = + g_settings_get_double(settings, ("sidechain-reactivity" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-preamp"] = + g_settings_get_double(settings, ("sidechain-preamp" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-custom-lowcut-filter"] = + g_settings_get_boolean(settings, ("sidechain-custom-lowcut-filter" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["sidechain-custom-highcut-filter"] = + g_settings_get_boolean(settings, ("sidechain-custom-highcut-filter" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["sidechain-lowcut-frequency"] = + g_settings_get_double(settings, ("sidechain-lowcut-frequency" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-highcut-frequency"] = + g_settings_get_double(settings, ("sidechain-highcut-frequency" + nstr).c_str()); + + json[section][instance_name][bandn]["boost-threshold"] = + g_settings_get_double(settings, ("boost-threshold" + nstr).c_str()); + + json[section][instance_name][bandn]["boost-amount"] = + g_settings_get_double(settings, ("boost-amount" + nstr).c_str()); + } +} + +void MultibandCompressorPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "dry", "dry"); + + update_key(json.at(section).at(instance_name), settings, "wet", "wet"); + + update_key(json.at(section).at(instance_name), settings, "compressor-mode", "compressor-mode"); + + update_key(json.at(section).at(instance_name), settings, "envelope-boost", "envelope-boost"); + + update_key(json.at(section).at(instance_name), settings, "stereo-split", "stereo-split"); + + for (uint n = 0U; n < n_bands; n++) { + const auto nstr = util::to_string(n); + const auto bandn = "band" + nstr; + + if (n > 0U) { + update_key(json.at(section).at(instance_name).at(bandn), settings, "enable-band" + nstr, "enable-band"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "split-frequency" + nstr, + "split-frequency"); + } + + update_key(json.at(section).at(instance_name).at(bandn), settings, "compressor-enable" + nstr, + "compressor-enable"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "solo" + nstr, "solo"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "mute" + nstr, "mute"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "attack-threshold" + nstr, + "attack-threshold"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "attack-time" + nstr, "attack-time"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "release-threshold" + nstr, + "release-threshold"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "release-time" + nstr, "release-time"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "ratio" + nstr, "ratio"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "knee" + nstr, "knee"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "makeup" + nstr, "makeup"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "compression-mode" + nstr, + "compression-mode"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "external-sidechain" + nstr, + "external-sidechain"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-mode" + nstr, + "sidechain-mode"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-source" + nstr, + "sidechain-source"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "stereo-split-source" + nstr, + "stereo-split-source"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-lookahead" + nstr, + "sidechain-lookahead"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-reactivity" + nstr, + "sidechain-reactivity"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-preamp" + nstr, + "sidechain-preamp"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-custom-lowcut-filter" + nstr, + "sidechain-custom-lowcut-filter"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-custom-highcut-filter" + nstr, + "sidechain-custom-highcut-filter"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-lowcut-frequency" + nstr, + "sidechain-lowcut-frequency"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-highcut-frequency" + nstr, + "sidechain-highcut-frequency"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "boost-threshold" + nstr, + "boost-threshold"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "boost-amount" + nstr, "boost-amount"); + } +} diff --git a/src/multiband_compressor_ui.cpp b/src/multiband_compressor_ui.cpp new file mode 100644 index 0000000..8c9b136 --- /dev/null +++ b/src/multiband_compressor_ui.cpp @@ -0,0 +1,420 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_compressor_ui.hpp" + +namespace ui::multiband_compressor_box { + +using namespace std::string_literals; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr multiband_compressor; + + std::vector connections; + + std::vector gconnections; +}; + +struct _MultibandCompressorBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkStack* stack; + + GtkCheckButton *enable_band1, *enable_band2, *enable_band3, *enable_band4, *enable_band5, *enable_band6, + *enable_band7; + + GtkSpinButton *dry, *wet; + + GtkDropDown *compressor_mode, *envelope_boost; + + GtkDropDown* dropdown_input_devices; + + GtkToggleButton *show_native_ui, *stereo_split; + + GListStore* input_devices_model; + + GSettings* settings; + + std::array bands; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(MultibandCompressorBox, multiband_compressor_box, GTK_TYPE_BOX) + +void on_reset(MultibandCompressorBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(MultibandCompressorBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->multiband_compressor->show_native_ui(); + } else { + self->data->multiband_compressor->close_native_ui(); + } +} + +void on_listbox_row_selected(MultibandCompressorBox* self, GtkListBoxRow* row, GtkListBox* listbox) { + if (auto* selected_row = gtk_list_box_get_selected_row(listbox); selected_row != nullptr) { + if (auto index = gtk_list_box_row_get_index(selected_row); index != -1) { + gtk_stack_set_visible_child_name(self->stack, ("band" + util::to_string(index)).c_str()); + } + } +} + +void set_dropdown_input_devices_sensitivity(MultibandCompressorBox* self) { + for (uint n = 0U; n < tags::multiband_compressor::n_bands; n++) { + if (g_settings_get_boolean(self->settings, tags::multiband_compressor::band_external_sidechain[n].data()) != 0) { + gtk_widget_set_sensitive(GTK_WIDGET(self->dropdown_input_devices), 1); + + return; + } + } + + gtk_widget_set_sensitive(GTK_WIDGET(self->dropdown_input_devices), 0); +} + +void create_bands(MultibandCompressorBox* self) { + for (uint n = 0U; n < tags::multiband_compressor::n_bands; n++) { + auto* band_box = ui::multiband_compressor_band_box::create(); + + ui::multiband_compressor_band_box::setup(band_box, self->settings, n); + + gtk_stack_add_named(self->stack, GTK_WIDGET(band_box), ("band" + util::to_string(n)).c_str()); + + self->bands[n] = band_box; + + self->data->gconnections.push_back(g_signal_connect( + self->settings, ("changed::"s + tags::multiband_compressor::band_external_sidechain[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, MultibandCompressorBox* self) { + set_dropdown_input_devices_sensitivity(self); + }), + self)); + } +} + +void setup_dropdown_input_device(MultibandCompressorBox* self) { + auto* selection = gtk_single_selection_new(G_LIST_MODEL(self->input_devices_model)); + + g_signal_connect(self->dropdown_input_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, MultibandCompressorBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->settings, "sidechain-input-device", holder->info->name.c_str()); + } + }), + self); + + gtk_drop_down_set_model(self->dropdown_input_devices, G_LIST_MODEL(self->input_devices_model)); + + g_object_unref(selection); +} + +void setup(MultibandCompressorBox* self, + std::shared_ptr multiband_compressor, + const std::string& schema_path, + PipeManager* pm) { + self->data->multiband_compressor = multiband_compressor; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::multiband_compressor::id, schema_path.c_str()); + + multiband_compressor->set_post_messages(true); + + setup_dropdown_input_device(self); + + set_dropdown_input_devices_sensitivity(self); + + create_bands(self); + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == tags::pipewire::ee_sink_name || node.name == tags::pipewire::ee_source_name) { + continue; + } + + if (node.media_class == tags::pipewire::media_class::source || + node.media_class == tags::pipewire::media_class::virtual_source || + node.media_role == tags::pipewire::media_role::dsp) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + } + } + + self->data->connections.push_back(multiband_compressor->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back( + multiband_compressor->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(multiband_compressor->frequency_range.connect( + [=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_compressor_band_box::set_end_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back( + multiband_compressor->envelope.connect([=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_compressor_band_box::set_envelope_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back( + multiband_compressor->curve.connect([=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_compressor_band_box::set_curve_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back( + multiband_compressor->reduction.connect([=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_compressor_band_box::set_gain_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back(pm->source_added.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->source_removed.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->input_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + gtk_label_set_text(self->plugin_credit, + ui::get_plugin_credit_translated(self->data->multiband_compressor->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "dry", gtk_spin_button_get_adjustment(self->dry), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet", gtk_spin_button_get_adjustment(self->wet), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "compressor-mode", self->compressor_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "envelope-boost", self->envelope_boost); + + g_settings_bind(self->settings, "enable-band1", self->enable_band1, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band2", self->enable_band2, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band3", self->enable_band3, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band4", self->enable_band4, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band5", self->enable_band5, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band6", self->enable_band6, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band7", self->enable_band7, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_MULTIBAND_COMPRESSOR_BOX(object); + + self->data->multiband_compressor->set_post_messages(false); + + self->data->multiband_compressor->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(multiband_compressor_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_MULTIBAND_COMPRESSOR_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(multiband_compressor_box_parent_class)->finalize(object); +} + +void multiband_compressor_box_class_init(MultibandCompressorBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::multiband_compressor_ui); + + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, stack); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, enable_band1); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, enable_band2); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, enable_band3); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, enable_band4); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, enable_band5); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, enable_band6); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, enable_band7); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, dry); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, wet); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, stereo_split); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, compressor_mode); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, envelope_boost); + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, dropdown_input_devices); + + gtk_widget_class_bind_template_child(widget_class, MultibandCompressorBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); + gtk_widget_class_bind_template_callback(widget_class, on_listbox_row_selected); +} + +void multiband_compressor_box_init(MultibandCompressorBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->dry, self->wet); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> MultibandCompressorBox* { + return static_cast(g_object_new(EE_TYPE_MULTIBAND_COMPRESSOR_BOX, nullptr)); +} + +} // namespace ui::multiband_compressor_box diff --git a/src/multiband_gate.cpp b/src/multiband_gate.cpp new file mode 100644 index 0000000..d9513aa --- /dev/null +++ b/src/multiband_gate.cpp @@ -0,0 +1,206 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_gate.hpp" + +MultibandGate::MultibandGate(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, + tags::plugin_name::multiband_gate, + tags::plugin_package::lsp, + schema, + schema_path, + pipe_manager, + true) { + lv2_wrapper = std::make_unique("http://lsp-plug.in/plugins/lv2/sc_mb_gate_stereo"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://lsp-plug.in/plugins/lv2/sc_mb_gate_stereo is not installed"); + } + + gconnections.push_back(g_signal_connect(settings, "changed::sidechain-input-device", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->update_sidechain_links(key); + }), + this)); + + lv2_wrapper->bind_key_enum<"mode", "gate-mode">(settings); + + lv2_wrapper->bind_key_enum<"envb", "envelope-boost">(settings); + + lv2_wrapper->bind_key_bool<"ssplit", "stereo-split">(settings); + + // The following controls can assume -inf + lv2_wrapper->bind_key_double_db<"g_dry", "dry", false>(settings); + + lv2_wrapper->bind_key_double_db<"g_wet", "wet", false>(settings); + + bind_bands(std::make_index_sequence()); + + setup_input_output_gain(); +} + +MultibandGate::~MultibandGate() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void MultibandGate::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void MultibandGate::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out, probe_left, probe_right); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + /* + This plugin gives the latency in number of samples + */ + + const auto lv = static_cast(lv2_wrapper->get_control_port_value("out_latency")); + + if (latency_n_frames != lv) { + latency_n_frames = lv; + + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + for (uint n = 0U; n < n_bands; n++) { + const auto nstr = util::to_string(n); + + frequency_range_end_port_array.at(n) = lv2_wrapper->get_control_port_value("fre_" + nstr); + + envelope_port_array.at(n) = 0.5F * (lv2_wrapper->get_control_port_value("elm_" + nstr + "l") + + lv2_wrapper->get_control_port_value("elm_" + nstr + "r")); + + curve_port_array.at(n) = 0.5F * (lv2_wrapper->get_control_port_value("clm_" + nstr + "l") + + lv2_wrapper->get_control_port_value("clm_" + nstr + "r")); + + reduction_port_array.at(n) = 0.5F * (lv2_wrapper->get_control_port_value("rlm_" + nstr + "l") + + lv2_wrapper->get_control_port_value("rlm_" + nstr + "r")); + } + + frequency_range.emit(frequency_range_end_port_array); + envelope.emit(envelope_port_array); + curve.emit(curve_port_array); + reduction.emit(reduction_port_array); + + notify(); + } + } +} + +void MultibandGate::update_sidechain_links(const std::string& key) { + auto external_sidechain_enabled = false; + + for (uint n = 0U; !external_sidechain_enabled && n < n_bands; n++) { + const auto nstr = util::to_string(n); + + external_sidechain_enabled = g_settings_get_boolean(settings, ("external-sidechain" + nstr).c_str()) != 0; + } + + if (!external_sidechain_enabled) { + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + return; + } + + const auto device_name = util::gsettings_get_string(settings, "sidechain-input-device"); + + NodeInfo input_device = pm->ee_source_node; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == device_name) { + input_device = node; + + break; + } + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + for (const auto& link : pm->link_nodes(input_device.id, get_node_id(), true)) { + list_proxies.push_back(link); + } +} + +void MultibandGate::update_probe_links() { + update_sidechain_links(""); +} + +auto MultibandGate::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/multiband_gate_band_box.cpp b/src/multiband_gate_band_box.cpp new file mode 100644 index 0000000..5b809dd --- /dev/null +++ b/src/multiband_gate_band_box.cpp @@ -0,0 +1,284 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_gate_band_box.hpp" + +namespace ui::multiband_gate_band_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + int index; + + std::vector gconnections; +}; + +struct _MultibandGateBandBox { + GtkBox parent_instance; + + GtkToggleButton *bypass, *mute, *solo, *external_sidechain, *hysteresis; + + GtkLabel *end_label, *gain_label, *envelope_label, *curve_label; + + GtkSpinButton *split_frequency, *lowcut_filter_frequency, *highcut_filter_frequency, *attack_time, *release_time, + *hysteresis_threshold, *hysteresis_zone, *curve_threshold, *curve_zone, *reduction, *makeup, *sidechain_preamp, + *sidechain_reactivity, *sidechain_lookahead; + + GtkCheckButton *lowcut_filter, *highcut_filter; + + GtkDropDown *sidechain_mode, *sidechain_source, *stereo_split_source; + + GtkBox* split_frequency_box; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(MultibandGateBandBox, multiband_gate_band_box, GTK_TYPE_BOX) + +void set_end_label(MultibandGateBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->end_label)) { + return; + } + + gtk_label_set_text(self->end_label, fmt::format("{0:.0f}", value).c_str()); +} + +void set_envelope_label(MultibandGateBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->envelope_label)) { + return; + } + + gtk_label_set_text(self->envelope_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); +} + +void set_curve_label(MultibandGateBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->curve_label)) { + return; + } + + gtk_label_set_text(self->curve_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); +} + +void set_gain_label(MultibandGateBandBox* self, const float& value) { + if (!GTK_IS_WIDGET(self)) { + return; + } + + if (!GTK_IS_LABEL(self->gain_label)) { + return; + } + + gtk_label_set_text(self->gain_label, fmt::format("{0:.0f}", util::linear_to_db(value)).c_str()); +} + +void setup(MultibandGateBandBox* self, GSettings* settings, int index) { + self->data->index = index; + self->settings = settings; + + using namespace tags::multiband_gate; + + if (index > 0) { + g_settings_bind(settings, band_split_frequency[index].data(), gtk_spin_button_get_adjustment(self->split_frequency), + "value", G_SETTINGS_BIND_DEFAULT); + } else { + // removing split frequency from band 0 + + for (auto* child = gtk_widget_get_last_child(GTK_WIDGET(self->split_frequency_box)); child != nullptr; + child = gtk_widget_get_last_child(GTK_WIDGET(self->split_frequency_box))) { + gtk_box_remove(self->split_frequency_box, child); + } + + auto* label = gtk_label_new("0 Hz"); + + gtk_widget_set_halign(GTK_WIDGET(label), GTK_ALIGN_CENTER); + + gtk_box_append(self->split_frequency_box, GTK_WIDGET(label)); + } + + g_settings_bind(self->settings, band_gate_enable[index].data(), self->bypass, "active", + G_SETTINGS_BIND_INVERT_BOOLEAN); + + g_settings_bind(self->settings, band_mute[index].data(), self->mute, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_solo[index].data(), self->solo, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_lowcut_filter[index].data(), self->lowcut_filter, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_highcut_filter[index].data(), self->highcut_filter, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_external_sidechain[index].data(), self->external_sidechain, "active", + G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, band_sidechain_mode[index].data(), self->sidechain_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, band_sidechain_source[index].data(), self->sidechain_source); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, band_stereo_split_source[index].data(), + self->stereo_split_source); + + g_settings_bind(settings, band_lowcut_filter_frequency[index].data(), + gtk_spin_button_get_adjustment(self->lowcut_filter_frequency), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_highcut_filter_frequency[index].data(), + gtk_spin_button_get_adjustment(self->highcut_filter_frequency), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_attack_time[index].data(), gtk_spin_button_get_adjustment(self->attack_time), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_release_time[index].data(), gtk_spin_button_get_adjustment(self->release_time), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, band_hysteresis[index].data(), self->hysteresis, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_hysteresis_threshold[index].data(), + gtk_spin_button_get_adjustment(self->hysteresis_threshold), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_hysteresis_zone[index].data(), gtk_spin_button_get_adjustment(self->hysteresis_zone), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_curve_threshold[index].data(), gtk_spin_button_get_adjustment(self->curve_threshold), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_curve_zone[index].data(), gtk_spin_button_get_adjustment(self->curve_zone), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_reduction[index].data(), gtk_spin_button_get_adjustment(self->reduction), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_makeup[index].data(), gtk_spin_button_get_adjustment(self->makeup), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_sidechain_preamp[index].data(), gtk_spin_button_get_adjustment(self->sidechain_preamp), + "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_sidechain_reactivity[index].data(), + gtk_spin_button_get_adjustment(self->sidechain_reactivity), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(settings, band_sidechain_lookahead[index].data(), + gtk_spin_button_get_adjustment(self->sidechain_lookahead), "value", G_SETTINGS_BIND_DEFAULT); + + // bind source dropdowns sensitive property to split-stereo gsettings boolean + + g_settings_bind(self->settings, "stereo-split", self->sidechain_source, "sensitive", + static_cast(G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN)); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split_source, "sensitive", G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_MULTIBAND_GATE_BAND_BOX(object); + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->gconnections.clear(); + + util::debug("index: " + util::to_string(self->data->index) + " disposed"); + + G_OBJECT_CLASS(multiband_gate_band_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_MULTIBAND_GATE_BAND_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(multiband_gate_band_box_parent_class)->finalize(object); +} + +void multiband_gate_band_box_class_init(MultibandGateBandBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::multiband_gate_band_ui); + + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, bypass); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, mute); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, solo); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, external_sidechain); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, end_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, gain_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, envelope_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, curve_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, split_frequency); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, split_frequency_box); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, lowcut_filter); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, highcut_filter); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, lowcut_filter_frequency); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, highcut_filter_frequency); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, attack_time); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, release_time); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, hysteresis); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, hysteresis_threshold); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, hysteresis_zone); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, curve_threshold); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, curve_zone); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, reduction); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, makeup); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, sidechain_preamp); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, sidechain_reactivity); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, sidechain_lookahead); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, sidechain_mode); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, sidechain_source); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBandBox, stereo_split_source); +} + +void multiband_gate_band_box_init(MultibandGateBandBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_spinbuttons<"Hz">(self->lowcut_filter_frequency, self->highcut_filter_frequency, self->split_frequency); + + prepare_spinbuttons<"ms">(self->attack_time, self->release_time, self->sidechain_reactivity, + self->sidechain_lookahead); + + prepare_spinbuttons<"dB">(self->hysteresis_threshold, self->hysteresis_zone, self->curve_threshold, self->curve_zone, + self->reduction, self->makeup, self->sidechain_preamp); +} + +auto create() -> MultibandGateBandBox* { + return static_cast(g_object_new(EE_TYPE_MULTIBAND_GATE_BAND_BOX, nullptr)); +} + +} // namespace ui::multiband_gate_band_box diff --git a/src/multiband_gate_preset.cpp b/src/multiband_gate_preset.cpp new file mode 100644 index 0000000..e944260 --- /dev/null +++ b/src/multiband_gate_preset.cpp @@ -0,0 +1,214 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_gate_preset.hpp" + +MultibandGatePreset::MultibandGatePreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::multiband_gate::id, + tags::schema::multiband_gate::input_path, + tags::schema::multiband_gate::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::multiband_gate).append("#").append(util::to_string(index)); +} + +void MultibandGatePreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["dry"] = g_settings_get_double(settings, "dry"); + + json[section][instance_name]["wet"] = g_settings_get_double(settings, "wet"); + + json[section][instance_name]["gate-mode"] = util::gsettings_get_string(settings, "gate-mode"); + + json[section][instance_name]["envelope-boost"] = util::gsettings_get_string(settings, "envelope-boost"); + + json[section][instance_name]["stereo-split"] = g_settings_get_boolean(settings, "stereo-split") != 0; + + for (uint n = 0U; n < n_bands; n++) { + const auto nstr = util::to_string(n); + const auto bandn = "band" + nstr; + + if (n > 0U) { + json[section][instance_name][bandn]["enable-band"] = + g_settings_get_boolean(settings, ("enable-band" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["split-frequency"] = + g_settings_get_double(settings, ("split-frequency" + nstr).c_str()); + } + + json[section][instance_name][bandn]["gate-enable"] = + g_settings_get_boolean(settings, ("gate-enable" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["solo"] = g_settings_get_boolean(settings, ("solo" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["mute"] = g_settings_get_boolean(settings, ("mute" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["attack-time"] = + g_settings_get_double(settings, ("attack-time" + nstr).c_str()); + + json[section][instance_name][bandn]["release-time"] = + g_settings_get_double(settings, ("release-time" + nstr).c_str()); + + json[section][instance_name][bandn]["hysteresis"] = + g_settings_get_boolean(settings, ("hysteresis" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["hysteresis-threshold"] = + g_settings_get_double(settings, ("hysteresis-threshold" + nstr).c_str()); + + json[section][instance_name][bandn]["hysteresis-zone"] = + g_settings_get_double(settings, ("hysteresis-zone" + nstr).c_str()); + + json[section][instance_name][bandn]["curve-threshold"] = + g_settings_get_double(settings, ("curve-threshold" + nstr).c_str()); + + json[section][instance_name][bandn]["curve-zone"] = g_settings_get_double(settings, ("curve-zone" + nstr).c_str()); + + json[section][instance_name][bandn]["reduction"] = g_settings_get_double(settings, ("reduction" + nstr).c_str()); + + json[section][instance_name][bandn]["makeup"] = g_settings_get_double(settings, ("makeup" + nstr).c_str()); + + json[section][instance_name][bandn]["external-sidechain"] = + g_settings_get_boolean(settings, ("external-sidechain" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["sidechain-mode"] = + util::gsettings_get_string(settings, ("sidechain-mode" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-source"] = + util::gsettings_get_string(settings, ("sidechain-source" + nstr).c_str()); + + json[section][instance_name][bandn]["stereo-split-source"] = + util::gsettings_get_string(settings, ("stereo-split-source" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-lookahead"] = + g_settings_get_double(settings, ("sidechain-lookahead" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-reactivity"] = + g_settings_get_double(settings, ("sidechain-reactivity" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-preamp"] = + g_settings_get_double(settings, ("sidechain-preamp" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-custom-lowcut-filter"] = + g_settings_get_boolean(settings, ("sidechain-custom-lowcut-filter" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["sidechain-custom-highcut-filter"] = + g_settings_get_boolean(settings, ("sidechain-custom-highcut-filter" + nstr).c_str()) != 0; + + json[section][instance_name][bandn]["sidechain-lowcut-frequency"] = + g_settings_get_double(settings, ("sidechain-lowcut-frequency" + nstr).c_str()); + + json[section][instance_name][bandn]["sidechain-highcut-frequency"] = + g_settings_get_double(settings, ("sidechain-highcut-frequency" + nstr).c_str()); + } +} + +void MultibandGatePreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "dry", "dry"); + + update_key(json.at(section).at(instance_name), settings, "wet", "wet"); + + update_key(json.at(section).at(instance_name), settings, "gate-mode", "gate-mode"); + + update_key(json.at(section).at(instance_name), settings, "envelope-boost", "envelope-boost"); + + update_key(json.at(section).at(instance_name), settings, "stereo-split", "stereo-split"); + + for (uint n = 0U; n < n_bands; n++) { + const auto nstr = util::to_string(n); + const auto bandn = "band" + nstr; + + if (n > 0U) { + update_key(json.at(section).at(instance_name).at(bandn), settings, "enable-band" + nstr, "enable-band"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "split-frequency" + nstr, + "split-frequency"); + } + + update_key(json.at(section).at(instance_name).at(bandn), settings, "gate-enable" + nstr, "gate-enable"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "solo" + nstr, "solo"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "mute" + nstr, "mute"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "attack-time" + nstr, "attack-time"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "release-time" + nstr, "release-time"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "hysteresis" + nstr, "hysteresis"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "hysteresis-threshold" + nstr, + "hysteresis-threshold"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "hysteresis-zone" + nstr, + "hysteresis-zone"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "curve-threshold" + nstr, + "curve-threshold"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "curve-zone" + nstr, "curve-zone"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "reduction" + nstr, "reduction"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "makeup" + nstr, "makeup"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "external-sidechain" + nstr, + "external-sidechain"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-mode" + nstr, + "sidechain-mode"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-source" + nstr, + "sidechain-source"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "stereo-split-source" + nstr, + "stereo-split-source"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-lookahead" + nstr, + "sidechain-lookahead"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-reactivity" + nstr, + "sidechain-reactivity"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-preamp" + nstr, + "sidechain-preamp"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-custom-lowcut-filter" + nstr, + "sidechain-custom-lowcut-filter"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-custom-highcut-filter" + nstr, + "sidechain-custom-highcut-filter"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-lowcut-frequency" + nstr, + "sidechain-lowcut-frequency"); + + update_key(json.at(section).at(instance_name).at(bandn), settings, "sidechain-highcut-frequency" + nstr, + "sidechain-highcut-frequency"); + } +} diff --git a/src/multiband_gate_ui.cpp b/src/multiband_gate_ui.cpp new file mode 100644 index 0000000..9d82610 --- /dev/null +++ b/src/multiband_gate_ui.cpp @@ -0,0 +1,419 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "multiband_gate_ui.hpp" + +namespace ui::multiband_gate_box { + +using namespace std::string_literals; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr multiband_gate; + + std::vector connections; + + std::vector gconnections; +}; + +struct _MultibandGateBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkStack* stack; + + GtkCheckButton *enable_band1, *enable_band2, *enable_band3, *enable_band4, *enable_band5, *enable_band6, + *enable_band7; + + GtkSpinButton *dry, *wet; + + GtkDropDown *gate_mode, *envelope_boost; + + GtkDropDown* dropdown_input_devices; + + GtkToggleButton *show_native_ui, *stereo_split; + + GListStore* input_devices_model; + + GSettings* settings; + + std::array bands; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(MultibandGateBox, multiband_gate_box, GTK_TYPE_BOX) + +void on_reset(MultibandGateBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_show_native_window(MultibandGateBox* self, GtkToggleButton* btn) { + if (gtk_toggle_button_get_active(btn) != 0) { + self->data->multiband_gate->show_native_ui(); + } else { + self->data->multiband_gate->close_native_ui(); + } +} + +void on_listbox_row_selected(MultibandGateBox* self, GtkListBoxRow* row, GtkListBox* listbox) { + if (auto* selected_row = gtk_list_box_get_selected_row(listbox); selected_row != nullptr) { + if (auto index = gtk_list_box_row_get_index(selected_row); index != -1) { + gtk_stack_set_visible_child_name(self->stack, ("band" + util::to_string(index)).c_str()); + } + } +} + +void set_dropdown_input_devices_sensitivity(MultibandGateBox* self) { + for (uint n = 0U; n < tags::multiband_gate::n_bands; n++) { + if (g_settings_get_boolean(self->settings, tags::multiband_gate::band_external_sidechain[n].data()) != 0) { + gtk_widget_set_sensitive(GTK_WIDGET(self->dropdown_input_devices), 1); + + return; + } + } + + gtk_widget_set_sensitive(GTK_WIDGET(self->dropdown_input_devices), 0); +} + +void create_bands(MultibandGateBox* self) { + for (uint n = 0U; n < tags::multiband_gate::n_bands; n++) { + auto* band_box = ui::multiband_gate_band_box::create(); + + ui::multiband_gate_band_box::setup(band_box, self->settings, static_cast(n)); + + gtk_stack_add_named(self->stack, GTK_WIDGET(band_box), ("band" + util::to_string(n)).c_str()); + + self->bands[n] = band_box; + + self->data->gconnections.push_back(g_signal_connect( + self->settings, ("changed::"s + tags::multiband_gate::band_external_sidechain[n].data()).c_str(), + G_CALLBACK(+[](GSettings* settings, char* key, MultibandGateBox* self) { + set_dropdown_input_devices_sensitivity(self); + }), + self)); + } +} + +void setup_dropdown_input_device(MultibandGateBox* self) { + auto* selection = gtk_single_selection_new(G_LIST_MODEL(self->input_devices_model)); + + g_signal_connect(self->dropdown_input_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, MultibandGateBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->settings, "sidechain-input-device", holder->info->name.c_str()); + } + }), + self); + + gtk_drop_down_set_model(self->dropdown_input_devices, G_LIST_MODEL(self->input_devices_model)); + + g_object_unref(selection); +} + +void setup(MultibandGateBox* self, + std::shared_ptr multiband_gate, + const std::string& schema_path, + PipeManager* pm) { + self->data->multiband_gate = multiband_gate; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::multiband_gate::id, schema_path.c_str()); + + multiband_gate->set_post_messages(true); + + setup_dropdown_input_device(self); + + set_dropdown_input_devices_sensitivity(self); + + create_bands(self); + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == tags::pipewire::ee_sink_name || node.name == tags::pipewire::ee_source_name) { + continue; + } + + if (node.media_class == tags::pipewire::media_class::source || + node.media_class == tags::pipewire::media_class::virtual_source || + node.media_role == tags::pipewire::media_role::dsp) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + } + } + + self->data->connections.push_back(multiband_gate->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(multiband_gate->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + self->data->connections.push_back( + multiband_gate->frequency_range.connect([=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_gate_band_box::set_end_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back( + multiband_gate->envelope.connect([=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_gate_band_box::set_envelope_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back( + multiband_gate->curve.connect([=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_gate_band_box::set_curve_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back( + multiband_gate->reduction.connect([=](const std::array values) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + for (size_t n = 0U; n < values.size(); n++) { + ui::multiband_gate_band_box::set_gain_label(self->bands[n], values[n]); + } + }); + })); + + self->data->connections.push_back(pm->source_added.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->input_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->source_removed.connect([=](const NodeInfo info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->input_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + gtk_label_set_text(self->plugin_credit, + ui::get_plugin_credit_translated(self->data->multiband_gate->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "dry", gtk_spin_button_get_adjustment(self->dry), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet", gtk_spin_button_get_adjustment(self->wet), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-split", self->stereo_split, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "gate-mode", self->gate_mode); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "envelope-boost", self->envelope_boost); + + g_settings_bind(self->settings, "enable-band1", self->enable_band1, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band2", self->enable_band2, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band3", self->enable_band3, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band4", self->enable_band4, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band5", self->enable_band5, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band6", self->enable_band6, "active", G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->settings, "enable-band7", self->enable_band7, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(ui::get_global_app_settings(), "show-native-plugin-ui", self->show_native_ui, "visible", + G_SETTINGS_BIND_DEFAULT); +} + +void dispose(GObject* object) { + auto* self = EE_MULTIBAND_GATE_BOX(object); + + self->data->multiband_gate->set_post_messages(false); + + self->data->multiband_gate->close_native_ui(); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(multiband_gate_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_MULTIBAND_GATE_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(multiband_gate_box_parent_class)->finalize(object); +} + +void multiband_gate_box_class_init(MultibandGateBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::multiband_gate_ui); + + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, stack); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, enable_band1); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, enable_band2); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, enable_band3); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, enable_band4); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, enable_band5); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, enable_band6); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, enable_band7); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, dry); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, wet); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, stereo_split); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, gate_mode); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, envelope_boost); + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, dropdown_input_devices); + + gtk_widget_class_bind_template_child(widget_class, MultibandGateBox, show_native_ui); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_show_native_window); + gtk_widget_class_bind_template_callback(widget_class, on_listbox_row_selected); +} + +void multiband_gate_box_init(MultibandGateBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->dry, self->wet); + + prepare_scales<"dB">(self->input_gain, self->output_gain); +} + +auto create() -> MultibandGateBox* { + return static_cast(g_object_new(EE_TYPE_MULTIBAND_GATE_BOX, nullptr)); +} + +} // namespace ui::multiband_gate_box diff --git a/src/node_info_holder.cpp b/src/node_info_holder.cpp new file mode 100644 index 0000000..0e6c8f3 --- /dev/null +++ b/src/node_info_holder.cpp @@ -0,0 +1,161 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "node_info_holder.hpp" + +namespace ui::holders { + +using namespace std::string_literals; + +enum { PROP_0, PROP_SERIAL, PROP_ID, PROP_DEVICE_ID, PROP_NAME, PROP_MEDIA_CLASS, PROP_DESCRIPTION, PROP_ICON_NAME }; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(NodeInfoHolder, node_info_holder, G_TYPE_OBJECT); + +void node_info_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec) { + auto* self = EE_NODE_INFO_HOLDER(object); + + switch (prop_id) { + case PROP_SERIAL: + self->info->serial = g_value_get_uint64(value); + break; + case PROP_ID: + self->info->id = g_value_get_uint(value); + break; + case PROP_DEVICE_ID: + self->info->device_id = g_value_get_uint(value); + break; + case PROP_NAME: + self->info->name = g_value_get_string(value); + break; + case PROP_MEDIA_CLASS: + self->info->media_class = g_value_get_string(value); + break; + case PROP_DESCRIPTION: + self->info->description = g_value_get_string(value); + break; + case PROP_ICON_NAME: + self->icon_name = g_value_get_string(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +void node_info_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec) { + auto* self = EE_NODE_INFO_HOLDER(object); + + switch (prop_id) { + case PROP_SERIAL: + g_value_set_uint64(value, self->info->serial); + break; + case PROP_ID: + g_value_set_uint(value, self->info->id); + break; + case PROP_DEVICE_ID: + g_value_set_uint(value, self->info->device_id); + break; + case PROP_NAME: + g_value_set_string(value, self->info->name.c_str()); + break; + case PROP_MEDIA_CLASS: + g_value_set_string(value, self->info->media_class.c_str()); + break; + case PROP_DESCRIPTION: + g_value_set_string(value, self->info->description.c_str()); + break; + case PROP_ICON_NAME: + g_value_set_string(value, self->icon_name.c_str()); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +void node_info_holder_finalize(GObject* object) { + auto* self = EE_NODE_INFO_HOLDER(object); + + self->info_updated.clear(); + + util::debug(util::to_string(self->info->id) + ", " + self->info->name + " finalized"); + + delete self->info; + + G_OBJECT_CLASS(node_info_holder_parent_class)->finalize(object); +} + +void node_info_holder_class_init(NodeInfoHolderClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = node_info_holder_finalize; + object_class->set_property = node_info_set_property; + object_class->get_property = node_info_get_property; + + // Using G_MININT64 as minimum parameter causes + // assertion 'default_value >= minimum && default_value <= maximum' failed + g_object_class_install_property(object_class, PROP_SERIAL, + g_param_spec_uint64("serial", "Serial", "Serial", SPA_ID_INVALID, G_MAXUINT64, + SPA_ID_INVALID, G_PARAM_READWRITE)); + + g_object_class_install_property( + object_class, PROP_ID, + g_param_spec_uint("id", "Id", "Id", G_MININT, G_MAXUINT, SPA_ID_INVALID, G_PARAM_READWRITE)); + + g_object_class_install_property( + object_class, PROP_DEVICE_ID, + g_param_spec_uint("device-id", "Device Id", "Device Id", G_MININT, G_MAXUINT, SPA_ID_INVALID, G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, PROP_NAME, + g_param_spec_string("name", "Name", "Name", nullptr, G_PARAM_READWRITE)); + + g_object_class_install_property( + object_class, PROP_MEDIA_CLASS, + g_param_spec_string("media-class", "Media Class", "Media Class", nullptr, G_PARAM_READWRITE)); + + g_object_class_install_property( + object_class, PROP_DESCRIPTION, + g_param_spec_string("description", "Description", "Description", nullptr, G_PARAM_READWRITE)); + + g_object_class_install_property( + object_class, PROP_ICON_NAME, + g_param_spec_string("icon-name", "Icon Name", "Icon Name", nullptr, G_PARAM_READWRITE)); +} + +void node_info_holder_init(NodeInfoHolder* self) { + self->info = new NodeInfo(); +} + +auto create(const NodeInfo& info) -> NodeInfoHolder* { + auto* holder = static_cast(g_object_new(EE_TYPE_NODE_INFO_HOLDER, nullptr)); + + *holder->info = info; + + if (info.media_class == tags::pipewire::media_class::sink || info.name.starts_with("ee_soe")) { + holder->icon_name = "audio-speakers-symbolic"; + } else if (info.media_class == tags::pipewire::media_class::source || + info.media_class == tags::pipewire::media_class::virtual_source || info.name.starts_with("ee_sie")) { + holder->icon_name = "audio-input-microphone-symbolic"; + } + + return holder; +} + +} // namespace ui::holders diff --git a/src/output_level.cpp b/src/output_level.cpp new file mode 100644 index 0000000..2daaaef --- /dev/null +++ b/src/output_level.cpp @@ -0,0 +1,59 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "output_level.hpp" + +OutputLevel::OutputLevel(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, "output_level", tags::plugin_package::ee, schema, schema_path, pipe_manager) {} + +OutputLevel::~OutputLevel() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void OutputLevel::setup() { + util::debug(log_tag + name + ": PipeWire blocksize: " + util::to_string(n_samples, "")); + util::debug(log_tag + name + ": PipeWire sampling rate: " + util::to_string(rate, "")); +} + +void OutputLevel::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto OutputLevel::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/pipe_manager.cpp b/src/pipe_manager.cpp new file mode 100644 index 0000000..e86a6c5 --- /dev/null +++ b/src/pipe_manager.cpp @@ -0,0 +1,1855 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "pipe_manager.hpp" + +namespace { + +struct node_data { + pw_proxy* proxy = nullptr; + + spa_hook proxy_listener{}; + + spa_hook object_listener{}; + + PipeManager* pm = nullptr; + + NodeInfo* nd_info{}; +}; + +struct proxy_data { + pw_proxy* proxy = nullptr; + + spa_hook proxy_listener{}; + + spa_hook object_listener{}; + + PipeManager* pm = nullptr; + + uint id = SPA_ID_INVALID; + + uint64_t serial = SPA_ID_INVALID; +}; + +template +auto spa_dict_get_string(const spa_dict* props, const char* key, T& str) -> bool { + // If we will use string views in the future, this template could be useful. + if (const auto* s = spa_dict_lookup(props, key)) { + str = s; + + return true; + } + + return false; +} + +template +auto spa_dict_get_num(const spa_dict* props, const char* key, T& num) -> bool { + if (const auto* n = spa_dict_lookup(props, key)) { + return util::str_to_num(std::string(n), num); + } + + return false; +} + +auto spa_dict_get_bool(const spa_dict* props, const char* key, bool& b) -> bool { + // Returning bool is for conversion success state. + // The bool value is assigned to reference parameter. + if (const auto* v = spa_dict_lookup(props, key)) { + b = (g_strcmp0(v, "true") == 0); + + return true; + } + + return false; +} + +void on_removed_proxy(void* data) { + auto* const pd = static_cast(data); + + // NOLINTNEXTLINE(clang-analyzer-core.NullDereference) + if (pd->object_listener.link.next != nullptr || pd->object_listener.link.prev != nullptr) { + spa_hook_remove(&pd->object_listener); + } + + pw_proxy_destroy(pd->proxy); +} + +auto link_info_from_props(const spa_dict* props) -> LinkInfo { + LinkInfo info; + + spa_dict_get_num(props, PW_KEY_LINK_ID, info.id); + + spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, info.serial); + + spa_dict_get_string(props, PW_KEY_OBJECT_PATH, info.path); + + spa_dict_get_num(props, PW_KEY_LINK_INPUT_NODE, info.input_node_id); + + spa_dict_get_num(props, PW_KEY_LINK_INPUT_PORT, info.input_port_id); + + spa_dict_get_num(props, PW_KEY_LINK_OUTPUT_NODE, info.output_node_id); + + spa_dict_get_num(props, PW_KEY_LINK_OUTPUT_PORT, info.output_port_id); + + spa_dict_get_bool(props, PW_KEY_LINK_PASSIVE, info.passive); + + return info; +} + +auto port_info_from_props(const spa_dict* props) -> PortInfo { + PortInfo info; + + spa_dict_get_num(props, PW_KEY_PORT_ID, info.port_id); + + spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, info.serial); + + spa_dict_get_string(props, PW_KEY_PORT_NAME, info.name); + + spa_dict_get_num(props, PW_KEY_NODE_ID, info.node_id); + + spa_dict_get_string(props, PW_KEY_PORT_DIRECTION, info.direction); + + spa_dict_get_string(props, PW_KEY_AUDIO_CHANNEL, info.audio_channel); + + spa_dict_get_string(props, PW_KEY_AUDIO_FORMAT, info.format_dsp); + + spa_dict_get_bool(props, PW_KEY_PORT_PHYSICAL, info.physical); + + spa_dict_get_bool(props, PW_KEY_PORT_TERMINAL, info.terminal); + + spa_dict_get_bool(props, PW_KEY_PORT_MONITOR, info.monitor); + + return info; +} + +void on_removed_node_proxy(void* data) { + auto* const nd = static_cast(data); + + spa_hook_remove(&nd->object_listener); + + pw_proxy_destroy(nd->proxy); +} + +void on_destroy_node_proxy(void* data) { + auto* const nd = static_cast(data); + + auto* const pm = nd->pm; + + auto node_it = pm->node_map.find(nd->nd_info->serial); + + if (node_it == pm->node_map.end()) { + return; + } + + nd->nd_info->proxy = nullptr; + + node_it->second.proxy = nullptr; + + spa_hook_remove(&nd->proxy_listener); + + pm->node_map.erase(node_it); + + if (!PipeManager::exiting) { + if (nd->nd_info->media_class == tags::pipewire::media_class::source) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->source_removed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::sink) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->sink_removed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::output_stream) { + const auto serial = nd->nd_info->serial; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->stream_output_removed.emit(serial); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::input_stream) { + const auto serial = nd->nd_info->serial; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->stream_input_removed.emit(serial); + }); + } + } + + util::debug(nd->nd_info->media_class + " " + util::to_string(nd->nd_info->id) + " " + nd->nd_info->name + + " has been removed"); + + delete nd->nd_info; +} + +void on_node_info(void* object, const struct pw_node_info* info) { + if (PipeManager::exiting) { + return; + } + + auto* const nd = static_cast(object); + + auto* const pm = nd->pm; + + // Check if the node is inside our map + + auto node_it = pm->node_map.find(nd->nd_info->serial); + + if (node_it == pm->node_map.end()) { + return; + } + + // Check if the node has to be removed + + bool remove_node = false; + + // Exclude blocklisted App id. + // To be checked here because PW_KEY_APP_ID is not set in on_registry_global. + + if (const auto* app_id = spa_dict_lookup(info->props, PW_KEY_APP_ID)) { + if (std::ranges::find(pm->blocklist_app_id, app_id) != pm->blocklist_app_id.end()) { + remove_node = true; + } + } + + // Exclude capture streams. + // Even PW_KEY_STREAM_CAPTURE_SINK is not set in on_registry_global. + // Useful to exclude OBS recording streams. + + if (g_strcmp0(spa_dict_lookup(info->props, PW_KEY_STREAM_CAPTURE_SINK), "true") == 0 && + PipeManager::exclude_monitor_stream) { + remove_node = true; + } + + if (remove_node) { + nd->nd_info->proxy = nullptr; + + node_it->second.proxy = nullptr; + + spa_hook_remove(&nd->proxy_listener); + + pm->node_map.erase(node_it); + + if (nd->nd_info->media_class == tags::pipewire::media_class::source) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->source_removed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::sink) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->sink_removed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::output_stream) { + const auto serial = nd->nd_info->serial; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->stream_output_removed.emit(serial); + + pm->disconnect_stream(nd->nd_info->id); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::input_stream) { + const auto serial = nd->nd_info->serial; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->stream_input_removed.emit(serial); + + pm->disconnect_stream(nd->nd_info->id); + }); + } + + util::debug(nd->nd_info->media_class + " " + util::to_string(nd->nd_info->id) + " " + nd->nd_info->name + + " has been removed"); + + return; + } + + // Chech for node info updates + + auto app_info_ui_changed = false; + + if (info->state != nd->nd_info->state) { + nd->nd_info->state = info->state; + + app_info_ui_changed = true; + } + + nd->nd_info->n_input_ports = static_cast(info->n_input_ports); + nd->nd_info->n_output_ports = static_cast(info->n_output_ports); + + spa_dict_get_num(info->props, PW_KEY_PRIORITY_SESSION, nd->nd_info->priority); + + if (const auto* app_id = spa_dict_lookup(info->props, PW_KEY_APP_ID)) { + if (app_id != nd->nd_info->application_id) { + nd->nd_info->application_id = app_id; + } + } + + if (const auto* app_icon_name = spa_dict_lookup(info->props, PW_KEY_APP_ICON_NAME)) { + if (app_icon_name != nd->nd_info->app_icon_name) { + nd->nd_info->app_icon_name = app_icon_name; + + app_info_ui_changed = true; + } + } + + if (const auto* media_icon_name = spa_dict_lookup(info->props, PW_KEY_MEDIA_ICON_NAME)) { + if (media_icon_name != nd->nd_info->media_icon_name) { + nd->nd_info->media_icon_name = media_icon_name; + + app_info_ui_changed = true; + } + } + + spa_dict_get_string(info->props, PW_KEY_DEVICE_ICON_NAME, nd->nd_info->device_icon_name); + + if (const auto* media_name = spa_dict_lookup(info->props, PW_KEY_MEDIA_NAME)) { + if (media_name != nd->nd_info->media_name) { + nd->nd_info->media_name = media_name; + + app_info_ui_changed = true; + } + } + + if (const auto* node_latency = spa_dict_lookup(info->props, PW_KEY_NODE_LATENCY)) { + const auto str = std::string(node_latency); + + const auto delimiter_pos = str.find('/'); + + int rate = 1; + + if (util::str_to_num(str.substr(delimiter_pos + 1U), rate)) { + if (rate != nd->nd_info->rate) { + nd->nd_info->rate = rate; + + app_info_ui_changed = true; + } + } + + float pw_lat = 0.0F; + + if (util::str_to_num(str.substr(0U, delimiter_pos), pw_lat)) { + if (auto latency = (pw_lat / static_cast(nd->nd_info->rate)); latency != nd->nd_info->latency) { + nd->nd_info->latency = latency; + + app_info_ui_changed = true; + } + } + } + + spa_dict_get_num(info->props, PW_KEY_DEVICE_ID, nd->nd_info->device_id); + + if ((info->change_mask & PW_NODE_CHANGE_MASK_PARAMS) != 0U) { + auto params = std::span(info->params, info->n_params); + + for (auto param : params) { + if ((param.flags & SPA_PARAM_INFO_READ) == 0U) { + continue; + } + + if (const auto id = param.id; id == SPA_PARAM_Props || id == SPA_PARAM_EnumFormat || id == SPA_PARAM_Format) { + pw_node_enum_params((struct pw_node*)nd->proxy, 0, id, 0, -1, nullptr); + } + } + } + + // update NodeInfo inside map + + node_it->second = *nd->nd_info; + + // sometimes PipeWire destroys the pointer before signal_idle is called, + // therefore we make a copy + + if (nd->nd_info->connected != pm->stream_is_connected(info->id, nd->nd_info->media_class)) { + nd->nd_info->connected = !nd->nd_info->connected; + + app_info_ui_changed = true; + } + + if (app_info_ui_changed) { + const auto nd_info_copy = *nd->nd_info; + + if (nd->nd_info->media_class == tags::pipewire::media_class::output_stream) { + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->stream_output_changed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::input_stream) { + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->stream_input_changed.emit(nd_info_copy); + }); + } + } else if (nd->nd_info->media_class == tags::pipewire::media_class::source) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->source_changed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::sink) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([=]() { + if (PipeManager::exiting) { + return; + } + + pm->sink_changed.emit(nd_info_copy); + }); + } + // const struct spa_dict_item* item = nullptr; + // spa_dict_for_each(item, info->props) printf("\t\t%s: \"%s\"\n", item->key, item->value); +} + +void on_node_event_param(void* object, + int seq, + uint32_t id, + uint32_t index, + uint32_t next, + const struct spa_pod* param) { + if (PipeManager::exiting) { + return; + } + + auto* const nd = static_cast(object); + + auto* const pm = nd->pm; + + if (param == nullptr) { + return; + } + + spa_pod_prop* pod_prop = nullptr; + auto* obj = (spa_pod_object*)param; + + const auto serial = nd->nd_info->serial; + + auto notify = false; + + SPA_POD_OBJECT_FOREACH(obj, pod_prop) { + switch (pod_prop->key) { + case SPA_FORMAT_AUDIO_format: { + uint format = 0U; + + if (spa_pod_get_id(&pod_prop->value, &format) != 0) { + break; + } + + auto node_it = pm->node_map.find(serial); + + if (node_it == pm->node_map.end()) { + break; + } + + std::string format_str = "unknown"; + + for (const auto type_info : std::to_array(spa_type_audio_format)) { + if (format == type_info.type) { + if (type_info.name != nullptr) { + std::string long_name = type_info.name; + + format_str = long_name.substr(long_name.rfind(':') + 1U); + } + } + } + + if (format_str != nd->nd_info->format) { + node_it->second.format = format_str; + + nd->nd_info->format = format_str; + + notify = true; + } + + break; + } + case SPA_FORMAT_AUDIO_rate: { + int rate = 1; + + if (spa_pod_get_int(&pod_prop->value, &rate) != 0) { + break; + } + + if (rate == nd->nd_info->rate) { + break; + } + + if (auto node_it = pm->node_map.find(serial); node_it != pm->node_map.end()) { + node_it->second.rate = rate; + + nd->nd_info->rate = rate; + + notify = true; + } + + break; + } + case SPA_PROP_mute: { + auto v = false; + + if (spa_pod_get_bool(&pod_prop->value, &v) != 0) { + break; + } + + if (v == nd->nd_info->mute) { + break; + } + + if (auto node_it = pm->node_map.find(serial); node_it != pm->node_map.end()) { + node_it->second.mute = v; + + nd->nd_info->mute = v; + + notify = true; + } + break; + } + case SPA_PROP_channelVolumes: { + auto node_it = pm->node_map.find(serial); + + if (node_it == pm->node_map.end()) { + break; + } + + std::array volumes{}; + + const auto n_volumes = + spa_pod_copy_array(&pod_prop->value, SPA_TYPE_Float, volumes.data(), SPA_AUDIO_MAX_CHANNELS); + + float max = 0.0F; + + for (uint i = 0U; i < n_volumes; i++) { + max = std::max(volumes.at(i), max); + } + + if (n_volumes != nd->nd_info->n_volume_channels || max != nd->nd_info->volume) { + node_it->second.n_volume_channels = n_volumes; + node_it->second.volume = max; + + nd->nd_info->n_volume_channels = n_volumes; + nd->nd_info->volume = max; + + notify = true; + } + + break; + } + default: + break; + } + } + + if (notify) { + // sometimes PipeWire destroys the pointer before signal_idle is called, + // therefore we make a copy + + if (nd->nd_info->media_class == tags::pipewire::media_class::output_stream) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->stream_output_changed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::input_stream) { + const auto nd_info_copy = *nd->nd_info; + + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->stream_input_changed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::virtual_source) { + const auto nd_info_copy = *nd->nd_info; + + if (nd_info_copy.serial == pm->ee_source_node.serial) { + pm->ee_source_node = nd_info_copy; + } + + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->source_changed.emit(nd_info_copy); + }); + } else if (nd->nd_info->media_class == tags::pipewire::media_class::sink) { + const auto nd_info_copy = *nd->nd_info; + + if (nd_info_copy.serial == pm->ee_sink_node.serial) { + pm->ee_sink_node = nd_info_copy; + } + + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->sink_changed.emit(nd_info_copy); + }); + } + } +} + +void on_link_info(void* object, const struct pw_link_info* info) { + auto* const ld = static_cast(object); + auto* const pm = ld->pm; + + LinkInfo link_copy; + + for (auto& l : ld->pm->list_links) { + if (l.serial == ld->serial) { + l.state = info->state; + + link_copy = l; + + util::idle_add([pm, link_copy] { + if (PipeManager::exiting) { + return; + } + + pm->link_changed.emit(link_copy); + }); + + // util::warning(pw_link_state_as_string(l.state)); + + break; + } + } + + // const struct spa_dict_item* item = nullptr; + // spa_dict_for_each(item, info->props) printf("\t\t%s: \"%s\"\n", item->key, item->value); +} + +void on_destroy_link_proxy(void* data) { + auto* const ld = static_cast(data); + + spa_hook_remove(&ld->proxy_listener); + + ld->pm->list_links.erase(std::remove_if(ld->pm->list_links.begin(), ld->pm->list_links.end(), + [=](const auto& n) { return n.serial == ld->serial; }), + ld->pm->list_links.end()); +} + +void on_destroy_port_proxy(void* data) { + auto* const pd = static_cast(data); + + spa_hook_remove(&pd->proxy_listener); + + pd->pm->list_ports.erase(std::remove_if(pd->pm->list_ports.begin(), pd->pm->list_ports.end(), + [=](const auto& n) { return n.serial == pd->serial; }), + pd->pm->list_ports.end()); +} + +void on_module_info(void* object, const struct pw_module_info* info) { + auto* const md = static_cast(object); + + for (auto& module : md->pm->list_modules) { + if (module.id == info->id) { + if (info->filename != nullptr) { + module.filename = info->filename; + } + + spa_dict_get_string(info->props, PW_KEY_MODULE_DESCRIPTION, module.description); + + break; + } + } +} + +void on_destroy_module_proxy(void* data) { + auto* const md = static_cast(data); + + spa_hook_remove(&md->proxy_listener); + + md->pm->list_modules.erase(std::remove_if(md->pm->list_modules.begin(), md->pm->list_modules.end(), + [=](const auto& n) { return n.id == md->id; }), + md->pm->list_modules.end()); +} + +void on_client_info(void* object, const struct pw_client_info* info) { + auto* const cd = static_cast(object); + + for (auto& client : cd->pm->list_clients) { + if (client.id == info->id) { + spa_dict_get_string(info->props, PW_KEY_APP_NAME, client.name); + + spa_dict_get_string(info->props, PW_KEY_ACCESS, client.access); + + spa_dict_get_string(info->props, PW_KEY_CLIENT_API, client.api); + + break; + } + } +} + +void on_destroy_client_proxy(void* data) { + auto* const cd = static_cast(data); + + spa_hook_remove(&cd->proxy_listener); + + cd->pm->list_clients.erase(std::remove_if(cd->pm->list_clients.begin(), cd->pm->list_clients.end(), + [=](const auto& n) { return n.serial == cd->serial; }), + cd->pm->list_clients.end()); +} + +void on_device_info(void* object, const struct pw_device_info* info) { + auto* const dd = static_cast(object); + + for (auto& device : dd->pm->list_devices) { + if (device.id != info->id) { + continue; + } + + spa_dict_get_string(info->props, PW_KEY_DEVICE_NAME, device.name); + + spa_dict_get_string(info->props, PW_KEY_DEVICE_NICK, device.nick); + + spa_dict_get_string(info->props, PW_KEY_DEVICE_DESCRIPTION, device.description); + + spa_dict_get_string(info->props, PW_KEY_DEVICE_API, device.api); + + if (spa_dict_get_string(info->props, SPA_KEY_DEVICE_BUS_ID, device.bus_id)) { + std::ranges::replace(device.bus_id, ':', '_'); + std::ranges::replace(device.bus_id, '+', '_'); + } + + if (spa_dict_get_string(info->props, PW_KEY_DEVICE_BUS_PATH, device.bus_path)) { + std::ranges::replace(device.bus_path, ':', '_'); + std::ranges::replace(device.bus_path, '+', '_'); + } + + /* + For some reason bluez5 devices do not define bus-path or bus-id. So as a workaround we set + SPA_KEY_API_BLUEZ5_ADDRESS as bus_path + */ + + if (device.api == "bluez5") { + if (spa_dict_get_string(info->props, SPA_KEY_API_BLUEZ5_ADDRESS, device.bus_path)) { + std::replace(device.bus_path.begin(), device.bus_path.end(), ':', '_'); + } + } + + if ((info->change_mask & PW_DEVICE_CHANGE_MASK_PARAMS) != 0U) { + auto params = std::span(info->params, info->n_params); + + for (auto param : params) { + if ((param.flags & SPA_PARAM_INFO_READ) == 0U) { + continue; + } + + if (const auto id = param.id; id == SPA_PARAM_Route) { + pw_device_enum_params((struct pw_device*)dd->proxy, 0, id, 0, -1, nullptr); + } + } + } + + break; + } +} + +void on_device_event_param(void* object, + int seq, + uint32_t id, + uint32_t index, + uint32_t next, + const struct spa_pod* param) { + if (id != SPA_PARAM_Route) { + return; + } + + auto* const dd = static_cast(object); + + const char* name = nullptr; + + enum spa_direction direction {}; + enum spa_param_availability available {}; + + if (spa_pod_parse_object(param, SPA_TYPE_OBJECT_ParamRoute, nullptr, SPA_PARAM_ROUTE_direction, + SPA_POD_Id(&direction), SPA_PARAM_ROUTE_name, SPA_POD_String(&name), + SPA_PARAM_ROUTE_available, SPA_POD_Id(&available)) < 0) { + return; + } + + if (name == nullptr) { + return; + } + + for (auto& device : dd->pm->list_devices) { + if (device.id != dd->id) { + continue; + } + + auto* const pm = dd->pm; + + if (direction == SPA_DIRECTION_INPUT) { + if (name != device.input_route_name || available != device.input_route_available) { + device.input_route_name = name; + device.input_route_available = available; + + util::idle_add([pm, device] { + if (PipeManager::exiting) { + return; + } + + pm->device_input_route_changed.emit(device); + }); + } + } else if (direction == SPA_DIRECTION_OUTPUT) { + if (name != device.output_route_name || available != device.output_route_available) { + device.output_route_name = name; + device.output_route_available = available; + + util::idle_add([pm, device] { + if (PipeManager::exiting) { + return; + } + + pm->device_output_route_changed.emit(device); + }); + } + } + + break; + } +} + +void on_destroy_device_proxy(void* data) { + auto* const dd = static_cast(data); + + spa_hook_remove(&dd->proxy_listener); + + dd->pm->list_devices.erase(std::remove_if(dd->pm->list_devices.begin(), dd->pm->list_devices.end(), + [=](const auto& n) { return n.id == dd->id; }), + dd->pm->list_devices.end()); +} + +auto on_metadata_property(void* data, uint32_t id, const char* key, const char* type, const char* value) -> int { + auto* const pm = static_cast(data); + + const std::string str_key = (key != nullptr) ? key : ""; + const std::string str_type = (type != nullptr) ? type : ""; + const std::string str_value = (value != nullptr) ? value : ""; + + util::debug("new metadata property: " + util::to_string(id) + ", " + str_key + ", " + str_type + ", " + str_value); + + if (str_value.empty()) { + return 0; + } + + if (str_key == "default.audio.sink") { + std::array v{}; + + PipeManager::json_object_find(str_value.c_str(), "name", v.data(), v.size() * sizeof(char)); + + if (g_strcmp0(v.data(), tags::pipewire::ee_sink_name) == 0) { + return 0; + } + + pm->default_output_device_name = v.data(); + + util::idle_add([pm] { + if (PipeManager::exiting) { + return; + } + + pm->new_default_sink_name.emit(pm->default_output_device_name); + }); + } + + if (str_key == "default.audio.source") { + std::array v{}; + + PipeManager::json_object_find(str_value.c_str(), "name", v.data(), v.size() * sizeof(char)); + + if (g_strcmp0(v.data(), tags::pipewire::ee_source_name) == 0) { + return 0; + } + + pm->default_input_device_name = v.data(); + + util::idle_add([pm] { + if (PipeManager::exiting) { + return; + } + + pm->new_default_source_name.emit(pm->default_input_device_name); + }); + } + + return 0; +} + +const struct pw_metadata_events metadata_events = {PW_VERSION_METADATA_EVENTS, on_metadata_property}; + +const struct pw_proxy_events link_proxy_events = {.destroy = on_destroy_link_proxy, + .bound = nullptr, + .removed = on_removed_proxy, + .done = nullptr, + .error = nullptr}; + +const struct pw_proxy_events port_proxy_events = {.destroy = on_destroy_port_proxy, + .bound = nullptr, + .removed = on_removed_proxy, + .done = nullptr, + .error = nullptr}; + +const struct pw_proxy_events module_proxy_events = {.destroy = on_destroy_module_proxy, + .bound = nullptr, + .removed = on_removed_proxy, + .done = nullptr, + .error = nullptr}; + +const struct pw_proxy_events client_proxy_events = {.destroy = on_destroy_client_proxy, + .bound = nullptr, + .removed = on_removed_proxy, + .done = nullptr, + .error = nullptr}; + +const struct pw_proxy_events device_proxy_events = {.destroy = on_destroy_device_proxy, + .bound = nullptr, + .removed = on_removed_proxy, + .done = nullptr, + .error = nullptr}; + +const struct pw_proxy_events node_proxy_events = {.destroy = on_destroy_node_proxy, + .bound = nullptr, + .removed = on_removed_node_proxy, + .done = nullptr, + .error = nullptr}; + +const struct pw_node_events node_events = {.info = on_node_info, .param = on_node_event_param}; + +const struct pw_link_events link_events = { + .info = on_link_info, +}; + +const struct pw_module_events module_events = { + .info = on_module_info, +}; + +const struct pw_client_events client_events = { + .info = on_client_info, +}; + +const struct pw_device_events device_events = {.info = on_device_info, .param = on_device_event_param}; + +void on_registry_global(void* data, + uint32_t id, + uint32_t permissions, + const char* type, + uint32_t version, + const struct spa_dict* props) { + if (id == SPA_ID_INVALID) { + // If PipeWire send us a wrong id, we don't have issues + return; + } + + auto* const pm = static_cast(data); + + if (g_strcmp0(type, PW_TYPE_INTERFACE_Node) == 0) { + bool is_ee_filter = false; + + if (const auto* key_media_role = spa_dict_lookup(props, PW_KEY_MEDIA_ROLE)) { + // Exclude blocklisted media roles + + if (std::ranges::find(pm->blocklist_media_role, std::string(key_media_role)) != pm->blocklist_media_role.end()) { + return; + } + + if (g_strcmp0(key_media_role, "DSP") == 0) { + if (const auto* key_media_category = spa_dict_lookup(props, PW_KEY_MEDIA_CATEGORY)) { + if (g_strcmp0(key_media_category, "Filter") == 0) { + if (const auto* key_node_name = spa_dict_lookup(props, PW_KEY_NODE_NAME)) { + if (std::string node_name(key_node_name); node_name.size() > 3U) { + if (node_name.starts_with("ee_")) { + is_ee_filter = true; + } + } + } + } + } + } + } + + std::string media_class; + std::string media_role; + + if (const auto* key_media_class = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS)) { + media_class = key_media_class; + } + + if (const auto* key_media_role = spa_dict_lookup(props, PW_KEY_MEDIA_ROLE)) { + media_role = key_media_role; + } + + constexpr auto class_array = + std::to_array({tags::pipewire::media_class::output_stream, tags::pipewire::media_class::input_stream, + tags::pipewire::media_class::sink, tags::pipewire::media_class::source, + tags::pipewire::media_class::virtual_source}); + + if (!is_ee_filter && + !std::any_of(class_array.begin(), class_array.end(), [&](const auto& str) { return str == media_class; })) { + return; + } + + std::string node_name; + + if (!spa_dict_get_string(props, PW_KEY_NODE_NAME, node_name)) { + return; + } + + // At least for now I do not think there is a point in showing the spectrum adn the output level filters in menus + + if (node_name.empty() || util::str_contains(node_name, "output_level") || + util::str_contains(node_name, "spectrum")) { + return; + } + + // Exclude blocklisted node names + + if (std::ranges::find(PipeManager::blocklist_node_name, node_name) != PipeManager::blocklist_node_name.end()) { + return; + } + + uint64_t serial = 0U; + + if (!spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, serial)) { + util::warning( + "An error occurred while retrieving the object serial. The node cannot be handled by Easy Effects."); + return; + } + + // New node can be added into the node map + + auto* proxy = static_cast(pw_registry_bind(pm->registry, id, type, PW_VERSION_NODE, sizeof(node_data))); + + auto* nd = static_cast(pw_proxy_get_user_data(proxy)); + + nd->proxy = proxy; + nd->pm = pm; + + nd->nd_info = new NodeInfo(); + + nd->nd_info->proxy = proxy; + nd->nd_info->serial = serial; + nd->nd_info->id = id; + nd->nd_info->media_class = media_class; + nd->nd_info->media_role = media_role; + nd->nd_info->name = node_name; + + spa_dict_get_string(props, PW_KEY_NODE_DESCRIPTION, nd->nd_info->description); + + spa_dict_get_num(props, PW_KEY_PRIORITY_SESSION, nd->nd_info->priority); + + spa_dict_get_num(props, PW_KEY_DEVICE_ID, nd->nd_info->device_id); + + const auto [node_it, success] = pm->node_map.insert({serial, *nd->nd_info}); + + if (!success) { + util::warning("Cannot insert node " + util::to_string(id) + " " + node_name + + " into the node map because there's already an existing serial " + util::to_string(serial)); + + return; + } + + pw_node_add_listener(proxy, &nd->object_listener, &node_events, nd); + pw_proxy_add_listener(proxy, &nd->proxy_listener, &node_proxy_events, nd); + + // sometimes PipeWire destroys the pointer before signal_idle is called, + // therefore we make a copy of NodeInfo + + const auto nd_info_copy = *nd->nd_info; + + if (media_class == tags::pipewire::media_class::source && node_name != tags::pipewire::ee_source_name) { + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->source_added.emit(nd_info_copy); + }); + } else if (media_class == tags::pipewire::media_class::sink && node_name != tags::pipewire::ee_sink_name) { + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->sink_added.emit(nd_info_copy); + }); + } else if (media_class == tags::pipewire::media_class::output_stream) { + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->stream_output_added.emit(nd_info_copy); + }); + } else if (media_class == tags::pipewire::media_class::input_stream) { + util::idle_add([pm, nd_info_copy] { + if (PipeManager::exiting) { + return; + } + + pm->stream_input_added.emit(nd_info_copy); + }); + } + + // We will have debug info about our filters later + + if (!is_ee_filter) { + util::debug(media_class + " " + util::to_string(id) + " " + nd->nd_info->name + " with serial " + + util::to_string(serial) + " has been added"); + } + + return; + } + + if (g_strcmp0(type, PW_TYPE_INTERFACE_Link) == 0) { + uint64_t serial = 0U; + + if (!spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, serial)) { + util::warning( + "An error occurred while retrieving the object serial. This link cannot be handled by Easy Effects."); + return; + } + + auto* proxy = static_cast(pw_registry_bind(pm->registry, id, type, PW_VERSION_LINK, sizeof(proxy_data))); + + auto* const pd = static_cast(pw_proxy_get_user_data(proxy)); + + pd->proxy = proxy; + pd->pm = pm; + pd->id = id; + pd->serial = serial; + + pw_link_add_listener(proxy, &pd->object_listener, &link_events, pd); + pw_proxy_add_listener(proxy, &pd->proxy_listener, &link_proxy_events, pd); + + auto link_info = link_info_from_props(props); + + link_info.id = id; + link_info.serial = serial; + + pm->list_links.push_back(link_info); + + try { + const auto input_node = pm->node_map_at_id(link_info.input_node_id); + + const auto output_node = pm->node_map_at_id(link_info.output_node_id); + + util::debug(output_node.name + " port " + util::to_string(link_info.output_port_id) + " is connected to " + + input_node.name + " port " + util::to_string(link_info.input_port_id)); + } catch (...) { + } + + return; + } + + if (g_strcmp0(type, PW_TYPE_INTERFACE_Port) == 0) { + uint64_t serial = 0U; + + if (!spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, serial)) { + util::warning( + "An error occurred while retrieving the object serial. This port cannot be handled by Easy Effects."); + return; + } + + auto* proxy = static_cast(pw_registry_bind(pm->registry, id, type, PW_VERSION_PORT, sizeof(proxy_data))); + + auto* const pd = static_cast(pw_proxy_get_user_data(proxy)); + + pd->proxy = proxy; + pd->pm = pm; + pd->id = id; + pd->serial = serial; + + pw_proxy_add_listener(proxy, &pd->proxy_listener, &port_proxy_events, pd); + + auto port_info = port_info_from_props(props); + + port_info.id = id; + port_info.serial = serial; + + // std::cout << port_info.name << "\t" << port_info.audio_channel << "\t" << port_info.direction << "\t" + // << port_info.format_dsp << "\t" << port_info.port_id << "\t" << port_info.node_id << std::endl; + + pm->list_ports.push_back(port_info); + + return; + } + + if (g_strcmp0(type, PW_TYPE_INTERFACE_Module) == 0) { + uint64_t serial = 0U; + + if (!spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, serial)) { + util::warning( + "An error occurred while retrieving the object serial. This module cannot be handled by Easy Effects."); + return; + } + + auto* proxy = + static_cast(pw_registry_bind(pm->registry, id, type, PW_VERSION_MODULE, sizeof(proxy_data))); + + auto* const pd = static_cast(pw_proxy_get_user_data(proxy)); + + pd->proxy = proxy; + pd->pm = pm; + pd->id = id; + pd->serial = serial; + + pw_module_add_listener(proxy, &pd->object_listener, &module_events, pd); + pw_proxy_add_listener(proxy, &pd->proxy_listener, &module_proxy_events, pd); + + ModuleInfo m_info{.id = id, .serial = serial}; + + spa_dict_get_string(props, PW_KEY_MODULE_NAME, m_info.name); + + pm->list_modules.push_back(m_info); + + return; + } + + if (g_strcmp0(type, PW_TYPE_INTERFACE_Client) == 0) { + uint64_t serial = 0U; + + if (!spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, serial)) { + util::warning( + "An error occurred while retrieving the object serial. This client cannot be handled by Easy Effects."); + return; + } + + auto* proxy = + static_cast(pw_registry_bind(pm->registry, id, type, PW_VERSION_CLIENT, sizeof(proxy_data))); + + auto* const pd = static_cast(pw_proxy_get_user_data(proxy)); + + pd->proxy = proxy; + pd->pm = pm; + pd->id = id; + pd->serial = serial; + + pw_client_add_listener(proxy, &pd->object_listener, &client_events, pd); + pw_proxy_add_listener(proxy, &pd->proxy_listener, &client_proxy_events, pd); + + ClientInfo c_info{.id = id, .serial = serial}; + + pm->list_clients.push_back(c_info); + + return; + } + + if (g_strcmp0(type, PW_TYPE_INTERFACE_Metadata) == 0) { + if (const auto* name = spa_dict_lookup(props, PW_KEY_METADATA_NAME)) { + using namespace std::string_literals; + + util::debug("found metadata: "s + name); + + if (g_strcmp0(name, "default") == 0) { + if (pm->metadata != nullptr) { + util::debug("A new default metadata is available. We will use it"); + + spa_hook_remove(&pm->metadata_listener); + } + + pm->metadata = static_cast(pw_registry_bind(pm->registry, id, type, PW_VERSION_METADATA, 0)); + + if (pm->metadata != nullptr) { + pw_metadata_add_listener(pm->metadata, &pm->metadata_listener, &metadata_events, pm); + } else { + util::warning("pw_registry_bind returned a null metadata object"); + } + } + } + + return; + } + + if (g_strcmp0(type, PW_TYPE_INTERFACE_Device) == 0) { + if (const auto* key_media_class = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS)) { + const std::string media_class = key_media_class; + + if (media_class == tags::pipewire::media_class::device) { + uint64_t serial = 0U; + + if (!spa_dict_get_num(props, PW_KEY_OBJECT_SERIAL, serial)) { + util::warning( + "An error occurred while converting the object serial. This device cannot be handled by Easy Effects."); + return; + } + + auto* proxy = + static_cast(pw_registry_bind(pm->registry, id, type, PW_VERSION_DEVICE, sizeof(proxy_data))); + + auto* const pd = static_cast(pw_proxy_get_user_data(proxy)); + + pd->proxy = proxy; + pd->pm = pm; + pd->id = id; + pd->serial = serial; + + pw_device_add_listener(proxy, &pd->object_listener, &device_events, pd); + pw_proxy_add_listener(proxy, &pd->proxy_listener, &device_proxy_events, pd); + + DeviceInfo d_info{.id = id, .serial = serial, .media_class = media_class}; + + pm->list_devices.push_back(d_info); + } + } + + return; + } +} + +void on_core_error(void* data, uint32_t id, int seq, int res, const char* message) { + auto* const pm = static_cast(data); + + using namespace std::string_literals; + + if (id == PW_ID_CORE) { + util::warning("Remote error res: "s + spa_strerror(res)); + util::warning("Remote error message: "s + message); + + pw_thread_loop_signal(pm->thread_loop, false); + } +} + +void on_core_info(void* data, const struct pw_core_info* info) { + using namespace std::string_literals; + + auto* const pm = static_cast(data); + + pm->core_name = info->name; + + pm->version = info->version; + + spa_dict_get_string(info->props, "default.clock.rate", pm->default_clock_rate); + + spa_dict_get_string(info->props, "default.clock.min-quantum", pm->default_min_quantum); + + spa_dict_get_string(info->props, "default.clock.max-quantum", pm->default_max_quantum); + + spa_dict_get_string(info->props, "default.clock.quantum", pm->default_quantum); + + util::debug("core version: "s + info->version); + util::debug("core name: "s + info->name); +} + +void on_core_done(void* data, uint32_t id, int seq) { + auto* const pm = static_cast(data); + + if (id == PW_ID_CORE) { + pw_thread_loop_signal(pm->thread_loop, false); + } +} + +const struct pw_core_events core_events = {.version = PW_VERSION_CORE_EVENTS, + .info = on_core_info, + .done = on_core_done, + .error = on_core_error}; + +const struct pw_registry_events registry_events = { + .global = on_registry_global, +}; + +} // namespace + +PipeManager::PipeManager() : header_version(pw_get_headers_version()), library_version(pw_get_library_version()) { + pw_init(nullptr, nullptr); + + spa_zero(core_listener); + spa_zero(registry_listener); + + util::debug("compiled with PipeWire: " + header_version); + util::debug("linked to PipeWire: " + library_version); + + // this needs to occur after pw_init(), so putting it before pw_init() in the initializer breaks this + // NOLINTNEXTLINE(cppcoreguidelines-prefer-member-initializer) + thread_loop = pw_thread_loop_new("ee-pipewire-thread", nullptr); + + // NOLINTNEXTLINE(clang-analyzer-core.NullDereference) + if (thread_loop == nullptr) { + util::error("could not create PipeWire loop"); + } + + if (pw_thread_loop_start(thread_loop) != 0) { + util::error("could not start the loop"); + } + + lock(); + + pw_properties* props_context = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_context, PW_KEY_CONFIG_NAME, "client-rt.conf"); + pw_properties_set(props_context, PW_KEY_MEDIA_TYPE, "Audio"); + pw_properties_set(props_context, PW_KEY_MEDIA_CATEGORY, "Manager"); + pw_properties_set(props_context, PW_KEY_MEDIA_ROLE, "Music"); + + context = pw_context_new(pw_thread_loop_get_loop(thread_loop), props_context, 0); + + if (context == nullptr) { + util::error("could not create PipeWire context"); + } + + core = pw_context_connect(context, nullptr, 0); + + if (core == nullptr) { + util::error("context connection failed"); + } + + registry = pw_core_get_registry(core, PW_VERSION_REGISTRY, 0); + + if (registry == nullptr) { + util::error("could not get the registry"); + } + + pw_registry_add_listener(registry, ®istry_listener, ®istry_events, this); + + pw_core_add_listener(core, &core_listener, &core_events, this); + + // loading Easy Effects sink + + pw_properties* props_sink = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_sink, PW_KEY_APP_ID, tags::app::id); + pw_properties_set(props_sink, PW_KEY_NODE_NAME, tags::pipewire::ee_sink_name); + pw_properties_set(props_sink, PW_KEY_NODE_DESCRIPTION, "Easy Effects Sink"); + pw_properties_set(props_sink, PW_KEY_NODE_VIRTUAL, "true"); + pw_properties_set(props_sink, PW_KEY_NODE_PASSIVE, "out"); + pw_properties_set(props_sink, "factory.name", "support.null-audio-sink"); + pw_properties_set(props_sink, PW_KEY_MEDIA_CLASS, tags::pipewire::media_class::sink); + pw_properties_set(props_sink, "audio.position", "FL,FR"); + pw_properties_set(props_sink, "monitor.channel-volumes", "false"); + + proxy_stream_output_sink = static_cast( + pw_core_create_object(core, "adapter", PW_TYPE_INTERFACE_Node, PW_VERSION_NODE, &props_sink->dict, 0)); + + pw_properties_free(props_sink); + + // loading our source + + pw_properties* props_source = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_source, PW_KEY_APP_ID, tags::app::id); + pw_properties_set(props_source, PW_KEY_NODE_NAME, tags::pipewire::ee_source_name); + pw_properties_set(props_source, PW_KEY_NODE_DESCRIPTION, "Easy Effects Source"); + pw_properties_set(props_source, PW_KEY_NODE_VIRTUAL, "true"); + pw_properties_set(props_source, "factory.name", "support.null-audio-sink"); + pw_properties_set(props_source, PW_KEY_MEDIA_CLASS, tags::pipewire::media_class::virtual_source); + pw_properties_set(props_source, "audio.position", "FL,FR"); + pw_properties_set(props_source, "monitor.channel-volumes", "false"); + + proxy_stream_input_source = static_cast( + pw_core_create_object(core, "adapter", PW_TYPE_INTERFACE_Node, PW_VERSION_NODE, &props_source->dict, 0)); + + pw_properties_free(props_source); + + sync_wait_unlock(); + + using namespace std::string_literals; + + do { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + for (const auto& [serial, node] : node_map) { + if (ee_sink_node.name.empty() && node.name == tags::pipewire::ee_sink_name) { + ee_sink_node = node; + + util::debug(tags::pipewire::ee_sink_name + " node successfully retrieved with id "s + util::to_string(node.id) + + " and serial " + util::to_string(node.serial)); + } else if (ee_source_node.name.empty() && node.name == tags::pipewire::ee_source_name) { + ee_source_node = node; + + util::debug(tags::pipewire::ee_source_name + " node successfully retrieved with id "s + + util::to_string(node.id) + " and serial " + util::to_string(node.serial)); + } + } + } while (ee_sink_node.id == SPA_ID_INVALID || ee_source_node.id == SPA_ID_INVALID); +} + +PipeManager::~PipeManager() { + exiting = true; + + lock(); + + spa_hook_remove(®istry_listener); + spa_hook_remove(&core_listener); + spa_hook_remove(&metadata_listener); + + if (metadata != nullptr) { + pw_proxy_destroy((struct pw_proxy*)metadata); + } + + pw_proxy_destroy(proxy_stream_output_sink); + pw_proxy_destroy(proxy_stream_input_source); + + util::debug("Destroying PipeWire registry..."); + pw_proxy_destroy((struct pw_proxy*)registry); + + util::debug("Disconnecting PipeWire core..."); + pw_core_disconnect(core); + + unlock(); + + util::debug("Stopping PipeWire's loop..."); + pw_thread_loop_stop(thread_loop); + + util::debug("Destroying PipeWire's context..."); + pw_context_destroy(context); + + util::debug("Destroying PipeWire's loop..."); + pw_thread_loop_destroy(thread_loop); +} + +auto PipeManager::node_map_at_id(const uint& id) -> NodeInfo& { + // Helper method to access easily a node by id, same functionality as map.at() + + for (auto& [serial, node] : node_map) { + if (node.id == id) { + return node; + } + } + + throw std::out_of_range(""); +} + +auto PipeManager::stream_is_connected(const uint& id, const std::string& media_class) -> bool { + if (media_class == tags::pipewire::media_class::output_stream) { + for (const auto& link : list_links) { + if (link.output_node_id == id && link.input_node_id == ee_sink_node.id) { + return true; + } + } + } else if (media_class == tags::pipewire::media_class::input_stream) { + for (const auto& link : list_links) { + if (link.output_node_id == ee_source_node.id && link.input_node_id == id) { + return true; + } + } + } + + return false; +} + +void PipeManager::connect_stream_output(const uint& id) const { + set_metadata_target_node(id, ee_sink_node.id, ee_sink_node.serial); +} + +void PipeManager::connect_stream_input(const uint& id) const { + set_metadata_target_node(id, ee_source_node.id, ee_source_node.serial); +} + +void PipeManager::set_metadata_target_node(const uint& origin_id, + const uint& target_id, + const uint64_t& target_serial) const { + if (metadata == nullptr) { + return; + } + + lock(); + + // target.node for backward compatibility with old PW session managers + pw_metadata_set_property(metadata, origin_id, "target.node", "Spa:Id", util::to_string(target_id).c_str()); + pw_metadata_set_property(metadata, origin_id, "target.object", "Spa:Id", util::to_string(target_serial).c_str()); + + sync_wait_unlock(); +} + +void PipeManager::disconnect_stream(const uint& stream_id) const { + if (metadata == nullptr) { + return; + } + + lock(); + + // target.node for backward compatibility with old PW session managers + pw_metadata_set_property(metadata, stream_id, "target.node", nullptr, nullptr); + pw_metadata_set_property(metadata, stream_id, "target.object", nullptr, nullptr); + + sync_wait_unlock(); +} + +void PipeManager::set_node_volume(pw_proxy* proxy, const uint& n_vol_ch, const float& value) { + std::array volumes{}; + + std::ranges::fill(volumes, 0.0F); + std::fill_n(volumes.begin(), n_vol_ch, value); + + std::array buffer{}; + + auto builder = SPA_POD_BUILDER_INIT(buffer.data(), sizeof(buffer)); + + pw_node_set_param( + (struct pw_node*)proxy, SPA_PARAM_Props, 0, + (spa_pod*)spa_pod_builder_add_object(&builder, SPA_TYPE_OBJECT_Props, SPA_PARAM_Props, SPA_PROP_channelVolumes, + SPA_POD_Array(sizeof(float), SPA_TYPE_Float, n_vol_ch, volumes.data()))); +} + +void PipeManager::set_node_mute(pw_proxy* proxy, const bool& state) { + std::array buffer{}; + + auto builder = SPA_POD_BUILDER_INIT(buffer.data(), sizeof(buffer)); + + pw_node_set_param((pw_node*)proxy, SPA_PARAM_Props, 0, + (spa_pod*)spa_pod_builder_add_object(&builder, SPA_TYPE_OBJECT_Props, SPA_PARAM_Props, + SPA_PROP_mute, SPA_POD_Bool(state))); +} + +auto PipeManager::count_node_ports(const uint& node_id) -> uint { + uint count = 0U; + + for (const auto& port : list_ports) { + if (port.node_id == node_id) { + count++; + } + } + + return count; +} + +auto PipeManager::link_nodes(const uint& output_node_id, + const uint& input_node_id, + const bool& probe_link, + const bool& link_passive) -> std::vector { + std::vector list; + std::vector list_output_ports; + std::vector list_input_ports; + auto use_audio_channel = true; + + for (const auto& port : list_ports) { + if (port.node_id == output_node_id && port.direction == "out") { + list_output_ports.push_back(port); + + if (!probe_link) { + if (port.audio_channel != "FL" && port.audio_channel != "FR") { + use_audio_channel = false; + } + } + } + + if (port.node_id == input_node_id && port.direction == "in") { + if (!probe_link) { + list_input_ports.push_back(port); + + if (port.audio_channel != "FL" && port.audio_channel != "FR") { + use_audio_channel = false; + } + } else { + if (port.audio_channel == "PROBE_FL" || port.audio_channel == "PROBE_FR") { + list_input_ports.push_back(port); + } + } + } + } + + if (list_input_ports.empty()) { + util::debug("node " + util::to_string(input_node_id) + " has no input ports yet. Aborting the link"); + + return list; + } + + if (list_output_ports.empty()) { + util::debug("node " + util::to_string(output_node_id) + " has no output ports yet. Aborting the link"); + + return list; + } + + for (const auto& outp : list_output_ports) { + for (const auto& inp : list_input_ports) { + bool ports_match = false; + + if (!probe_link) { + if (use_audio_channel) { + ports_match = outp.audio_channel == inp.audio_channel; + } else { + ports_match = outp.port_id == inp.port_id; + } + } else { + if (outp.audio_channel == "FL" && inp.audio_channel == "PROBE_FL") { + ports_match = true; + } + + if (outp.audio_channel == "FR" && inp.audio_channel == "PROBE_FR") { + ports_match = true; + } + } + + if (ports_match) { + pw_properties* props = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props, PW_KEY_LINK_PASSIVE, (link_passive) ? "true" : "false"); + pw_properties_set(props, PW_KEY_OBJECT_LINGER, "false"); + pw_properties_set(props, PW_KEY_LINK_OUTPUT_NODE, util::to_string(output_node_id).c_str()); + pw_properties_set(props, PW_KEY_LINK_OUTPUT_PORT, util::to_string(outp.id).c_str()); + pw_properties_set(props, PW_KEY_LINK_INPUT_NODE, util::to_string(input_node_id).c_str()); + pw_properties_set(props, PW_KEY_LINK_INPUT_PORT, util::to_string(inp.id).c_str()); + + lock(); + + auto* proxy = static_cast( + pw_core_create_object(core, "link-factory", PW_TYPE_INTERFACE_Link, PW_VERSION_LINK, &props->dict, 0)); + + pw_properties_free(props); + + if (proxy == nullptr) { + util::warning("failed to link the node " + util::to_string(output_node_id) + " to " + + util::to_string(input_node_id)); + + unlock(); + + return list; + } + + sync_wait_unlock(); + + list.push_back(proxy); + } + } + } + + return list; +} + +void PipeManager::lock() const { + pw_thread_loop_lock(thread_loop); +} + +void PipeManager::unlock() const { + pw_thread_loop_unlock(thread_loop); +} + +void PipeManager::sync_wait_unlock() const { + pw_core_sync(core, PW_ID_CORE, 0); + + pw_thread_loop_wait(thread_loop); + + pw_thread_loop_unlock(thread_loop); +} + +auto PipeManager::wait_full() const -> int { + timespec abstime; + + pw_thread_loop_get_time(thread_loop, &abstime, 30 * SPA_NSEC_PER_SEC); + + return pw_thread_loop_timed_wait_full(thread_loop, &abstime); +} + +void PipeManager::destroy_object(const int& id) const { + lock(); + + pw_registry_destroy(registry, id); + + sync_wait_unlock(); +} + +void PipeManager::destroy_links(const std::vector& list) const { + for (auto* proxy : list) { + if (proxy != nullptr) { + lock(); + + pw_proxy_destroy(proxy); + + sync_wait_unlock(); + } + } +} + +/* + Function inspired by code present in PipeWire's sources: + https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/include/spa/utils/json.h#L350 +*/ + +auto PipeManager::json_object_find(const char* obj, const char* key, char* value, const size_t& len) -> int { + const char* v = nullptr; + + std::array sjson{}; + std::array res{}; + + spa_json_init(sjson.data(), obj, strlen(obj)); + + if (spa_json_enter_object(sjson.data(), sjson.data() + 1) <= 0) { + return -EINVAL; + } + + while (spa_json_get_string(sjson.data() + 1, res.data(), res.size() * sizeof(char) - 1) > 0) { + if (g_strcmp0(res.data(), key) == 0) { + if (spa_json_get_string(sjson.data() + 1, value, static_cast(len)) <= 0) { + continue; + } + + return 0; + } + + if (spa_json_next(sjson.data() + 1, &v) <= 0) { + break; + } + } + + return -ENOENT; +} diff --git a/src/pipe_manager_box.cpp b/src/pipe_manager_box.cpp new file mode 100644 index 0000000..54dff81 --- /dev/null +++ b/src/pipe_manager_box.cpp @@ -0,0 +1,972 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "pipe_manager_box.hpp" + +namespace ui::pipe_manager_box { + +using namespace std::string_literals; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + app::Application* application; + + std::unique_ptr ts; + + std::vector connections; + + std::vector gconnections_sie, gconnections_soe; +}; + +struct _PipeManagerBox { + GtkBox parent_instance; + + GtkSwitch *use_default_input, *use_default_output, *enable_test_signal; + + GtkDropDown *dropdown_input_devices, *dropdown_output_devices, *dropdown_autoloading_output_devices, + *dropdown_autoloading_input_devices, *dropdown_autoloading_output_presets, *dropdown_autoloading_input_presets; + + GtkListView *listview_modules, *listview_clients, *listview_autoloading_output, *listview_autoloading_input; + + GtkButton *autoloading_add_input_profile, *autoloading_add_output_profile; + + GtkLabel *header_version, *library_version, *quantum, *max_quantum, *min_quantum, *server_rate; + + GtkSpinButton* spinbutton_test_signal_frequency; + + GListStore *input_devices_model, *output_devices_model, *modules_model, *clients_model, *autoloading_input_model, + *autoloading_output_model, *autoloading_input_devices_model, *autoloading_output_devices_model; + + GtkStringList *input_presets_string_list, *output_presets_string_list; + + GSettings *sie_settings, *soe_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PipeManagerBox, pipe_manager_box, GTK_TYPE_BOX) + +void on_enable_test_signal(PipeManagerBox* self, gboolean state, GtkSwitch* btn) { + self->data->ts->set_state(state != 0); +} + +void on_checkbutton_channel_left(PipeManagerBox* self, GtkCheckButton* btn) { + if (gtk_check_button_get_active(btn) != 0) { + self->data->ts->create_left_channel = true; + self->data->ts->create_right_channel = false; + } +} + +void on_checkbutton_channel_right(PipeManagerBox* self, GtkCheckButton* btn) { + if (gtk_check_button_get_active(btn) != 0) { + self->data->ts->create_left_channel = false; + self->data->ts->create_right_channel = true; + } +} + +void on_checkbutton_channel_both(PipeManagerBox* self, GtkCheckButton* btn) { + if (gtk_check_button_get_active(btn) != 0) { + self->data->ts->create_left_channel = true; + self->data->ts->create_right_channel = true; + } +} + +void on_checkbutton_signal_sine(PipeManagerBox* self, GtkCheckButton* btn) { + if (gtk_check_button_get_active(btn) != 0) { + self->data->ts->signal_type = TestSignalType::sine_wave; + self->data->ts->sine_phase = 0.0F; + } +} + +void on_checkbutton_signal_gaussian(PipeManagerBox* self, GtkCheckButton* btn) { + if (gtk_check_button_get_active(btn) != 0) { + self->data->ts->signal_type = TestSignalType::gaussian; + } +} + +void on_autoloading_add_input_profile(PipeManagerBox* self, GtkButton* btn) { + auto* holder = static_cast( + gtk_drop_down_get_selected_item(self->dropdown_autoloading_input_devices)); + + if (holder == nullptr) { + return; + } + + std::string device_profile; + + for (const auto& device : self->data->application->pm->list_devices) { + if (util::str_contains(holder->info->name, device.bus_path) || + util::str_contains(holder->info->name, device.bus_id)) { + device_profile = device.input_route_name; + + break; + } + } + + // first we remove any autoloading profile associated to the target device so that our ui is updated + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->autoloading_input_model)); n++) { + auto* item = static_cast( + g_list_model_get_item(G_LIST_MODEL(self->autoloading_input_model), n)); + + if (holder->info->name == item->data->device && device_profile == item->data->device_profile) { + self->data->application->presets_manager->remove_autoload(PresetType::input, item->data->preset_name, + item->data->device, item->data->device_profile); + + g_object_unref(item); + + break; + } + + g_object_unref(item); + } + + auto* selected_preset = gtk_drop_down_get_selected_item(self->dropdown_autoloading_input_presets); + + if (selected_preset == nullptr) { + return; + } + + const auto* preset_name = gtk_string_object_get_string(GTK_STRING_OBJECT(selected_preset)); + + self->data->application->presets_manager->add_autoload(PresetType::input, preset_name, holder->info->name, + holder->info->description, device_profile); +} + +void on_autoloading_add_output_profile(PipeManagerBox* self, GtkButton* btn) { + auto* holder = static_cast( + gtk_drop_down_get_selected_item(self->dropdown_autoloading_output_devices)); + + if (holder == nullptr) { + return; + } + + std::string device_profile; + + for (const auto& device : self->data->application->pm->list_devices) { + if (util::str_contains(holder->info->name, device.bus_path) || + util::str_contains(holder->info->name, device.bus_id)) { + device_profile = device.output_route_name; + + break; + } + } + + // first we remove any autoloading profile associated to the target device so that our ui is updated + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->autoloading_output_model)); n++) { + auto* item = static_cast( + g_list_model_get_item(G_LIST_MODEL(self->autoloading_output_model), n)); + + if (holder->info->name == item->data->device && device_profile == item->data->device_profile) { + self->data->application->presets_manager->remove_autoload(PresetType::output, item->data->preset_name, + item->data->device, item->data->device_profile); + + g_object_unref(item); + + break; + } + + g_object_unref(item); + } + + auto* selected_preset = gtk_drop_down_get_selected_item(self->dropdown_autoloading_output_presets); + + if (selected_preset == nullptr) { + return; + } + + const auto* preset_name = gtk_string_object_get_string(GTK_STRING_OBJECT(selected_preset)); + + self->data->application->presets_manager->add_autoload(PresetType::output, preset_name, holder->info->name, + holder->info->description, device_profile); +} + +void update_modules_info(PipeManagerBox* self) { + std::vector values; + + for (const auto& info : self->data->application->pm->list_modules) { + values.push_back(ui::holders::create(info)); + } + + g_list_store_splice(self->modules_model, 0, g_list_model_get_n_items(G_LIST_MODEL(self->modules_model)), + (gpointer*)(values.data()), values.size()); + + for (auto* holder : values) { + g_object_unref(holder); + } +} + +void update_clients_info(PipeManagerBox* self) { + std::vector values; + + for (const auto& info : self->data->application->pm->list_clients) { + values.push_back(ui::holders::create(info)); + } + + g_list_store_splice(self->clients_model, 0, g_list_model_get_n_items(G_LIST_MODEL(self->clients_model)), + (gpointer*)(values.data()), values.size()); + + for (auto* holder : values) { + g_object_unref(holder); + } +} + +void on_stack_visible_child_changed(PipeManagerBox* self, GParamSpec* pspec, GtkWidget* stack) { + if (const auto* const name = gtk_stack_get_visible_child_name(GTK_STACK(stack)); + g_strcmp0(name, "page_modules") == 0) { + update_modules_info(self); + } else if (g_strcmp0(name, "page_clients") == 0) { + update_clients_info(self); + } +} + +void setup_listview_modules(PipeManagerBox* self) { + auto* selection = gtk_no_selection_new(G_LIST_MODEL(self->modules_model)); + + gtk_list_view_set_model(self->listview_modules, GTK_SELECTION_MODEL(selection)); + + g_object_unref(selection); +} + +void setup_listview_clients(PipeManagerBox* self) { + auto* selection = gtk_no_selection_new(G_LIST_MODEL(self->clients_model)); + + gtk_list_view_set_model(self->listview_clients, GTK_SELECTION_MODEL(selection)); + + g_object_unref(selection); +} + +template +void setup_listview_autoloading(PipeManagerBox* self) { + GListStore* model = nullptr; + GtkListView* listview = nullptr; + + if constexpr (preset_type == PresetType::output) { + model = self->autoloading_output_model; + + listview = self->listview_autoloading_output; + } else if constexpr (preset_type == PresetType::input) { + model = self->autoloading_input_model; + + listview = self->listview_autoloading_input; + } + + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect( + factory, "setup", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PipeManagerBox* self) { + auto builder = gtk_builder_new_from_resource(tags::resources::autoload_row_ui); + + auto* top_box = gtk_builder_get_object(builder, "top_box"); + + g_object_set_data(G_OBJECT(item), "device", gtk_builder_get_object(builder, "device")); + g_object_set_data(G_OBJECT(item), "device_description", gtk_builder_get_object(builder, "device_description")); + g_object_set_data(G_OBJECT(item), "device_profile", gtk_builder_get_object(builder, "device_profile")); + g_object_set_data(G_OBJECT(item), "preset_name", gtk_builder_get_object(builder, "preset_name")); + + auto* remove = gtk_builder_get_object(builder, "remove"); + + g_object_set_data(G_OBJECT(item), "remove", remove); + + gtk_list_item_set_activatable(item, 0); + gtk_list_item_set_child(item, GTK_WIDGET(top_box)); + + g_object_unref(builder); + + g_signal_connect( + remove, "clicked", G_CALLBACK(+[](GtkButton* btn, PipeManagerBox* self) { + if (auto* holder = + static_cast(g_object_get_data(G_OBJECT(btn), "holder")); + holder != nullptr) { + self->data->application->presets_manager->remove_autoload( + preset_type, holder->data->preset_name, holder->data->device, holder->data->device_profile); + } + }), + self); + }), + self); + + g_signal_connect( + factory, "bind", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PipeManagerBox* self) { + auto* device = static_cast(g_object_get_data(G_OBJECT(item), "device")); + auto* device_description = static_cast(g_object_get_data(G_OBJECT(item), "device_description")); + auto* device_profile = static_cast(g_object_get_data(G_OBJECT(item), "device_profile")); + auto* preset_name = static_cast(g_object_get_data(G_OBJECT(item), "preset_name")); + auto* remove = static_cast(g_object_get_data(G_OBJECT(item), "remove")); + + auto* holder = static_cast(gtk_list_item_get_item(item)); + + g_object_set_data(G_OBJECT(remove), "holder", holder); + + gtk_label_set_text(device, holder->data->device.c_str()); + gtk_label_set_text(device_description, holder->data->device_description.c_str()); + gtk_label_set_text(device_profile, holder->data->device_profile.c_str()); + gtk_label_set_text(preset_name, holder->data->preset_name.c_str()); + + gtk_accessible_update_property(GTK_ACCESSIBLE(remove), GTK_ACCESSIBLE_PROPERTY_LABEL, + (_("Remove Autoloading Preset") + " "s + holder->data->preset_name).c_str(), -1); + }), + self); + + gtk_list_view_set_factory(listview, factory); + + g_object_unref(factory); + + // setting the model + + const auto profiles = self->data->application->presets_manager->get_autoload_profiles(preset_type); + + for (const auto& json : profiles) { + const auto device = json.value("device", ""); + const auto device_description = json.value("device-description", ""); + const auto device_profile = json.value("device-profile", ""); + const auto preset_name = json.value("preset-name", ""); + + auto* holder = ui::holders::create(device, device_description, device_profile, preset_name); + + g_list_store_append(model, holder); + + g_object_unref(holder); + } + + auto* selection = gtk_no_selection_new(G_LIST_MODEL(model)); + + gtk_list_view_set_model(listview, GTK_SELECTION_MODEL(selection)); + + g_object_unref(selection); +} + +template +void setup_dropdown_presets(PipeManagerBox* self) { + GtkDropDown* dropdown = nullptr; + GtkStringList* string_list = nullptr; + + if constexpr (preset_type == PresetType::output) { + dropdown = self->dropdown_autoloading_output_presets; + + string_list = self->output_presets_string_list; + } else if constexpr (preset_type == PresetType::input) { + dropdown = self->dropdown_autoloading_input_presets; + + string_list = self->input_presets_string_list; + } + + for (const auto& name : self->data->application->presets_manager->get_names(preset_type)) { + gtk_string_list_append(string_list, name.c_str()); + } + + // sorter + + auto* sorter = gtk_string_sorter_new(gtk_property_expression_new(GTK_TYPE_STRING_OBJECT, nullptr, "string")); + + auto* sorter_model = gtk_sort_list_model_new(G_LIST_MODEL(string_list), GTK_SORTER(sorter)); + + // setting the dropdown model + + auto* selection = gtk_single_selection_new(G_LIST_MODEL(sorter_model)); + + gtk_drop_down_set_model(dropdown, G_LIST_MODEL(selection)); + + g_object_unref(selection); +} + +void setup_dropdown_devices(PipeManagerBox* self, GtkDropDown* dropdown, GListStore* model) { + auto* selection = gtk_single_selection_new(G_LIST_MODEL(model)); + + gtk_drop_down_set_model(dropdown, G_LIST_MODEL(model)); + + g_object_unref(selection); +} + +void setup(PipeManagerBox* self, app::Application* application) { + self->data->application = application; + + auto* pm = application->pm; + + self->data->ts = std::make_unique(pm); + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == tags::pipewire::ee_sink_name || node.name == tags::pipewire::ee_source_name) { + continue; + } + + if (node.media_class == tags::pipewire::media_class::sink) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->output_devices_model, holder); + g_list_store_append(self->autoloading_output_devices_model, holder); + + g_object_unref(holder); + } else if (node.media_class == tags::pipewire::media_class::source || + node.media_class == tags::pipewire::media_class::virtual_source) { + auto* holder = ui::holders::create(node); + + g_list_store_append(self->input_devices_model, holder); + g_list_store_append(self->autoloading_input_devices_model, holder); + + g_object_unref(holder); + } + } + + int rate = 0; + util::str_to_num(std::string(pm->default_clock_rate), rate); + + gtk_label_set_text(self->header_version, pm->header_version.c_str()); + gtk_label_set_text(self->library_version, pm->library_version.c_str()); + gtk_label_set_text(self->server_rate, fmt::format(ui::get_user_locale(), "{0:Ld} Hz", rate).c_str()); + gtk_label_set_text(self->min_quantum, pm->default_min_quantum.c_str()); + gtk_label_set_text(self->max_quantum, pm->default_max_quantum.c_str()); + gtk_label_set_text(self->quantum, pm->default_quantum.c_str()); + + setup_listview_modules(self); + setup_listview_clients(self); + + setup_listview_autoloading(self); + setup_listview_autoloading(self); + + setup_dropdown_devices(self, self->dropdown_input_devices, self->input_devices_model); + setup_dropdown_devices(self, self->dropdown_output_devices, self->output_devices_model); + + setup_dropdown_devices(self, self->dropdown_autoloading_input_devices, self->autoloading_input_devices_model); + setup_dropdown_devices(self, self->dropdown_autoloading_output_devices, self->autoloading_output_devices_model); + + setup_dropdown_presets(self); + setup_dropdown_presets(self); + + /* + This connection is being done here after initializing the dropdowns to avoid unnecessary emittions while EE is + initializing + */ + + g_signal_connect(self->dropdown_input_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, PipeManagerBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->sie_settings, "input-device", holder->info->name.c_str()); + } + }), + self); + + g_signal_connect(self->dropdown_output_devices, "notify::selected-item", + G_CALLBACK(+[](GtkDropDown* dropdown, GParamSpec* pspec, PipeManagerBox* self) { + if (auto selected_item = gtk_drop_down_get_selected_item(dropdown); selected_item != nullptr) { + auto* holder = static_cast(selected_item); + + g_settings_set_string(self->soe_settings, "output-device", holder->info->name.c_str()); + } + }), + self); + + // initializing the custom device selection dropdowns to the previoulsly used device + + { + auto* holder_selected = + static_cast(gtk_drop_down_get_selected_item(self->dropdown_input_devices)); + + if (holder_selected != nullptr) { + const auto input_device_name = util::gsettings_get_string(self->sie_settings, "input-device"); + + if (holder_selected->info->name != input_device_name) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* item = static_cast( + g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (item->info->name == input_device_name) { + gtk_drop_down_set_selected(self->dropdown_input_devices, n); + + g_object_unref(item); + + break; + } + + g_object_unref(item); + } + } + } + } + + { + auto* holder_selected = + static_cast(gtk_drop_down_get_selected_item(self->dropdown_output_devices)); + + if (holder_selected != nullptr) { + const auto output_device_name = util::gsettings_get_string(self->soe_settings, "output-device"); + + if (holder_selected->info->name != output_device_name) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->output_devices_model)); n++) { + auto* item = static_cast( + g_list_model_get_item(G_LIST_MODEL(self->output_devices_model), n)); + + if (item->info->name == output_device_name) { + gtk_drop_down_set_selected(self->dropdown_output_devices, n); + + g_object_unref(item); + + break; + } + + g_object_unref(item); + } + } + } + } + + // signals related to device insertion/removal + + self->data->connections.push_back(pm->sink_added.connect([=](const NodeInfo& info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->output_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->output_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->output_devices_model, holder); + g_list_store_append(self->autoloading_output_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->sink_removed.connect([=](const NodeInfo& info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->output_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->output_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->output_devices_model, n); + g_list_store_remove(self->autoloading_output_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + self->data->connections.push_back(pm->source_added.connect([=](const NodeInfo& info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + + auto* holder = ui::holders::create(info); + + g_list_store_append(self->input_devices_model, holder); + g_list_store_append(self->autoloading_input_devices_model, holder); + + g_object_unref(holder); + })); + + self->data->connections.push_back(pm->source_removed.connect([=](const NodeInfo& info) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->id == info.id) { + g_list_store_remove(self->input_devices_model, n); + g_list_store_remove(self->autoloading_input_devices_model, n); + + g_object_unref(holder); + + return; + } + + g_object_unref(holder); + } + })); + + // updating the devices dropdown when the default device is changed + + self->data->connections.push_back(pm->new_default_sink_name.connect([=](const std::string new_default_device_name) { + if (gtk_switch_get_state(self->use_default_output) != 1) { + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->output_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->output_devices_model), n)); + + if (holder->info->name == new_default_device_name) { + g_object_unref(holder); + + gtk_drop_down_set_selected(self->dropdown_output_devices, n); + + return; + } + + g_object_unref(holder); + } + })); + + self->data->connections.push_back(pm->new_default_source_name.connect([=](const std::string new_default_device_name) { + if (gtk_switch_get_state(self->use_default_input) != 1) { + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* holder = + static_cast(g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (holder->info->name == new_default_device_name) { + g_object_unref(holder); + + gtk_drop_down_set_selected(self->dropdown_input_devices, n); + + return; + } + + g_object_unref(holder); + } + })); + + // signals related to presets creation/destruction + + self->data->connections.push_back( + application->presets_manager->user_output_preset_created.connect([=](const std::string& preset_name) { + if (preset_name.empty()) { + util::warning("can't retrieve information about the preset file"s); + + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->output_presets_string_list)); n++) { + if (gtk_string_list_get_string(self->output_presets_string_list, n) == preset_name) { + return; + } + } + + gtk_string_list_append(self->output_presets_string_list, preset_name.c_str()); + })); + + self->data->connections.push_back( + application->presets_manager->user_output_preset_removed.connect([=](const std::string& preset_name) { + if (preset_name.empty()) { + util::warning("can't retrieve information about the preset file"s); + + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->output_presets_string_list)); n++) { + if (gtk_string_list_get_string(self->output_presets_string_list, n) == preset_name) { + gtk_string_list_remove(self->output_presets_string_list, n); + + return; + } + } + })); + + self->data->connections.push_back( + application->presets_manager->user_input_preset_created.connect([=](const std::string& preset_name) { + if (preset_name.empty()) { + util::warning("can't retrieve information about the preset file"s); + + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_presets_string_list)); n++) { + if (gtk_string_list_get_string(self->input_presets_string_list, n) == preset_name) { + return; + } + } + + gtk_string_list_append(self->input_presets_string_list, preset_name.c_str()); + })); + + self->data->connections.push_back( + application->presets_manager->user_input_preset_removed.connect([=](const std::string& preset_name) { + if (preset_name.empty()) { + util::warning("can't retrieve information about the preset file"s); + + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_presets_string_list)); n++) { + if (gtk_string_list_get_string(self->input_presets_string_list, n) == preset_name) { + gtk_string_list_remove(self->input_presets_string_list, n); + + return; + } + } + })); + + // signals related to autoload profiles + + self->data->connections.push_back(application->presets_manager->autoload_input_profiles_changed.connect( + [=](const std::vector& profiles) { + std::vector list; + + for (const auto& json : profiles) { + const auto device = json.value("device", ""); + const auto device_description = json.value("device-description", ""); + const auto device_profile = json.value("device-profile", ""); + const auto preset_name = json.value("preset-name", ""); + + list.push_back(ui::holders::create(device, device_description, device_profile, preset_name)); + } + + g_list_store_splice(self->autoloading_input_model, 0, + g_list_model_get_n_items(G_LIST_MODEL(self->autoloading_input_model)), + (gpointer*)(list.data()), list.size()); + + for (auto* holder : list) { + g_object_unref(holder); + } + })); + + self->data->connections.push_back(application->presets_manager->autoload_output_profiles_changed.connect( + [=](const std::vector& profiles) { + std::vector list; + + for (const auto& json : profiles) { + const auto device = json.value("device", ""); + const auto device_description = json.value("device-description", ""); + const auto device_profile = json.value("device-profile", ""); + const auto preset_name = json.value("preset-name", ""); + + list.push_back(ui::holders::create(device, device_description, device_profile, preset_name)); + } + + g_list_store_splice(self->autoloading_output_model, 0, + g_list_model_get_n_items(G_LIST_MODEL(self->autoloading_output_model)), + (gpointer*)(list.data()), list.size()); + + for (auto* holder : list) { + g_object_unref(holder); + } + })); +} + +void dispose(GObject* object) { + auto* self = EE_PIPE_MANAGER_BOX(object); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections_sie) { + g_signal_handler_disconnect(self->sie_settings, handler_id); + } + + for (auto& handler_id : self->data->gconnections_soe) { + g_signal_handler_disconnect(self->soe_settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections_sie.clear(); + self->data->gconnections_soe.clear(); + + g_object_unref(self->sie_settings); + g_object_unref(self->soe_settings); + + util::debug("disposed"s); + + G_OBJECT_CLASS(pipe_manager_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_PIPE_MANAGER_BOX(object); + + delete self->data; + + util::debug("finalized"s); + + G_OBJECT_CLASS(pipe_manager_box_parent_class)->finalize(object); +} + +void pipe_manager_box_class_init(PipeManagerBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::pipe_manager_box_ui); + + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, use_default_input); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, use_default_output); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, enable_test_signal); + + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, dropdown_input_devices); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, dropdown_output_devices); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, dropdown_autoloading_input_devices); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, dropdown_autoloading_output_devices); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, dropdown_autoloading_input_presets); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, dropdown_autoloading_output_presets); + + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, listview_modules); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, listview_clients); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, listview_autoloading_input); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, listview_autoloading_output); + + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, autoloading_add_input_profile); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, autoloading_add_output_profile); + + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, header_version); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, library_version); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, quantum); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, max_quantum); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, min_quantum); + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, server_rate); + + gtk_widget_class_bind_template_child(widget_class, PipeManagerBox, spinbutton_test_signal_frequency); + + gtk_widget_class_bind_template_callback(widget_class, on_enable_test_signal); + gtk_widget_class_bind_template_callback(widget_class, on_checkbutton_channel_left); + gtk_widget_class_bind_template_callback(widget_class, on_checkbutton_channel_right); + gtk_widget_class_bind_template_callback(widget_class, on_checkbutton_channel_both); + gtk_widget_class_bind_template_callback(widget_class, on_checkbutton_signal_sine); + gtk_widget_class_bind_template_callback(widget_class, on_checkbutton_signal_gaussian); + gtk_widget_class_bind_template_callback(widget_class, on_stack_visible_child_changed); + gtk_widget_class_bind_template_callback(widget_class, on_autoloading_add_input_profile); + gtk_widget_class_bind_template_callback(widget_class, on_autoloading_add_output_profile); +} + +void pipe_manager_box_init(PipeManagerBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->input_presets_string_list = gtk_string_list_new(nullptr); + self->output_presets_string_list = gtk_string_list_new(nullptr); + + self->input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + self->output_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + self->modules_model = g_list_store_new(ui::holders::module_info_holder_get_type()); + self->clients_model = g_list_store_new(ui::holders::client_info_holder_get_type()); + self->autoloading_input_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + self->autoloading_output_devices_model = g_list_store_new(ui::holders::node_info_holder_get_type()); + self->autoloading_input_model = g_list_store_new(ui::holders::presets_autoloading_holder_get_type()); + self->autoloading_output_model = g_list_store_new(ui::holders::presets_autoloading_holder_get_type()); + + self->sie_settings = g_settings_new(tags::schema::id_input); + self->soe_settings = g_settings_new(tags::schema::id_output); + + prepare_spinbuttons<"Hz">(self->spinbutton_test_signal_frequency); + + g_settings_bind(self->sie_settings, "use-default-input-device", self->use_default_input, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->soe_settings, "use-default-output-device", self->use_default_output, "active", + G_SETTINGS_BIND_DEFAULT); + + g_signal_connect(self->spinbutton_test_signal_frequency, "value-changed", + G_CALLBACK(+[](GtkSpinButton* btn, PipeManagerBox* self) { + self->data->ts->set_frequency(static_cast(gtk_spin_button_get_value(btn))); + }), + self); + + g_signal_connect( + self->use_default_input, "notify::active", + G_CALLBACK(+[](GtkSwitch* btn, GParamSpec* pspec, PipeManagerBox* self) { + if (gtk_switch_get_active(btn) != 0) { + g_settings_set_string(self->sie_settings, "input-device", + self->data->application->pm->default_input_device_name.c_str()); + + auto* holder = + static_cast(gtk_drop_down_get_selected_item(self->dropdown_input_devices)); + + if (holder == nullptr) { + return; + } + + if (holder->info->name != self->data->application->pm->default_input_device_name) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->input_devices_model)); n++) { + auto* item = static_cast( + g_list_model_get_item(G_LIST_MODEL(self->input_devices_model), n)); + + if (item->info->name == self->data->application->pm->default_input_device_name) { + gtk_drop_down_set_selected(self->dropdown_input_devices, n); + + g_object_unref(item); + + break; + } + + g_object_unref(item); + } + } + } + }), + self); + + g_signal_connect( + self->use_default_output, "notify::active", + G_CALLBACK(+[](GtkSwitch* btn, GParamSpec* pspec, PipeManagerBox* self) { + if (gtk_switch_get_active(btn) != 0) { + g_settings_set_string(self->soe_settings, "output-device", + self->data->application->pm->default_output_device_name.c_str()); + + auto* holder = + static_cast(gtk_drop_down_get_selected_item(self->dropdown_output_devices)); + + if (holder == nullptr) { + return; + } + + if (holder->info->name != self->data->application->pm->default_output_device_name) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->output_devices_model)); n++) { + auto* item = static_cast( + g_list_model_get_item(G_LIST_MODEL(self->output_devices_model), n)); + + if (item->info->name == self->data->application->pm->default_output_device_name) { + gtk_drop_down_set_selected(self->dropdown_output_devices, n); + + g_object_unref(item); + + break; + } + + g_object_unref(item); + } + } + } + }), + self); +} + +auto create() -> PipeManagerBox* { + return static_cast(g_object_new(EE_TYPE_PIPE_MANAGER_BOX, nullptr)); +} + +} // namespace ui::pipe_manager_box diff --git a/src/pitch.cpp b/src/pitch.cpp new file mode 100644 index 0000000..be671aa --- /dev/null +++ b/src/pitch.cpp @@ -0,0 +1,413 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "pitch.hpp" + +Pitch::Pitch(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::pitch, tags::plugin_package::sound_touch, schema, schema_path, pipe_manager) { + quick_seek = g_settings_get_boolean(settings, "quick-seek") != 0; + anti_alias = g_settings_get_boolean(settings, "anti-alias") != 0; + + sequence_length_ms = g_settings_get_int(settings, "sequence-length"); + seek_window_ms = g_settings_get_int(settings, "seek-window"); + overlap_length_ms = g_settings_get_int(settings, "overlap-length"); + + tempo_difference = g_settings_get_double(settings, "tempo-difference"); + rate_difference = g_settings_get_double(settings, "rate-difference"); + + semitones = g_settings_get_double(settings, "semitones"); + + // resetting soundtouch when bypass is pressed so its internal data is discarded + + gconnections.push_back(g_signal_connect(settings, "changed::bypass", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + util::idle_add([&, self] { + self->data_mutex.lock(); + + self->soundtouch_ready = false; + + self->data_mutex.unlock(); + + self->init_soundtouch(); + + self->data_mutex.lock(); + + self->soundtouch_ready = true; + + self->data_mutex.unlock(); + }); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::quick-seek", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->quick_seek = g_settings_get_boolean(settings, key) != 0; + + if (!self->soundtouch_ready) { + return; + } + + self->set_quick_seek(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::anti-alias", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->anti_alias = g_settings_get_boolean(settings, key) != 0; + + if (!self->soundtouch_ready) { + return; + } + + self->set_quick_seek(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::sequence-length", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->sequence_length_ms = g_settings_get_int(settings, key); + + if (!self->soundtouch_ready) { + return; + } + + self->set_sequence_length(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::seek-window", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->seek_window_ms = g_settings_get_int(settings, key); + + if (!self->soundtouch_ready) { + return; + } + + self->set_seek_window(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::overlap-length", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->overlap_length_ms = g_settings_get_int(settings, key); + + if (!self->soundtouch_ready) { + return; + } + + self->set_overlap_length(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::tempo-difference", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->tempo_difference = g_settings_get_double(settings, key); + + if (!self->soundtouch_ready) { + return; + } + + self->set_tempo_difference(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::rate-difference", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->rate_difference = g_settings_get_double(settings, key); + + if (!self->soundtouch_ready) { + return; + } + + self->set_rate_difference(); + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::semitones", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->semitones = g_settings_get_double(settings, key); + + if (!self->soundtouch_ready) { + return; + } + + self->set_semitones(); + }), + this)); + + setup_input_output_gain(); +} + +Pitch::~Pitch() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Pitch::setup() { + soundtouch_ready = false; + + latency_n_frames = 0U; + + if (data.size() != static_cast(n_samples) * 2) { + data.resize(2U * static_cast(n_samples)); + } + + deque_out_L.resize(0U); + deque_out_R.resize(0U); + + util::idle_add([&, this] { + if (soundtouch_ready) { + return; + } + + init_soundtouch(); + + std::scoped_lock lock(data_mutex); + + soundtouch_ready = true; + }); +} + +void Pitch::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (bypass || !soundtouch_ready) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + for (size_t n = 0U; n < left_in.size(); n++) { + data[n * 2U] = left_in[n]; + data[n * 2U + 1U] = right_in[n]; + } + + snd_touch->putSamples(data.data(), n_samples); + + uint n_received = 0U; + + do { + n_received = snd_touch->receiveSamples(data.data(), n_samples); + + for (size_t n = 0U; n < n_received; n++) { + deque_out_L.push_back(data[n * 2U]); + deque_out_R.push_back(data[n * 2U + 1U]); + } + + } while (n_received != 0); + + if (deque_out_L.size() >= left_out.size()) { + for (float& v : left_out) { + v = deque_out_L.front(); + + deque_out_L.pop_front(); + } + + for (float& v : right_out) { + v = deque_out_R.front(); + + deque_out_R.pop_front(); + } + } else { + const uint offset = left_out.size() - deque_out_L.size(); + + if (offset != latency_n_frames) { + latency_n_frames = offset; + + notify_latency = true; + } + + for (uint n = 0U; !deque_out_L.empty() && n < left_out.size(); n++) { + if (n < offset) { + left_out[n] = 0.0F; + right_out[n] = 0.0F; + } else { + left_out[n] = deque_out_L.front(); + right_out[n] = deque_out_R.front(); + + deque_out_R.pop_front(); + deque_out_L.pop_front(); + } + } + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (notify_latency) { + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + + notify_latency = false; + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +void Pitch::set_semitones() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setPitchSemiTones(semitones); +} + +void Pitch::set_sequence_length() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setSetting(SETTING_SEQUENCE_MS, sequence_length_ms); +} + +void Pitch::set_seek_window() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setSetting(SETTING_SEEKWINDOW_MS, seek_window_ms); +} + +void Pitch::set_overlap_length() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setSetting(SETTING_OVERLAP_MS, overlap_length_ms); +} + +void Pitch::set_quick_seek() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setSetting(SETTING_USE_QUICKSEEK, static_cast(quick_seek)); +} + +void Pitch::set_anti_alias() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setSetting(SETTING_USE_AA_FILTER, static_cast(anti_alias)); +} + +void Pitch::set_tempo_difference() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setTempoChange(tempo_difference); +} + +void Pitch::set_rate_difference() { + if (snd_touch == nullptr) { + return; + } + + std::scoped_lock lock(data_mutex); + + snd_touch->setRateChange(rate_difference); +} + +void Pitch::init_soundtouch() { + delete snd_touch; + + snd_touch = new soundtouch::SoundTouch(); + + snd_touch->setSampleRate(rate); + snd_touch->setChannels(2); + + set_semitones(); + set_quick_seek(); + set_anti_alias(); + set_sequence_length(); + set_seek_window(); + set_overlap_length(); + set_tempo_difference(); + set_rate_difference(); +} + +auto Pitch::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/pitch_preset.cpp b/src/pitch_preset.cpp new file mode 100644 index 0000000..0516077 --- /dev/null +++ b/src/pitch_preset.cpp @@ -0,0 +1,77 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "pitch_preset.hpp" + +PitchPreset::PitchPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::pitch::id, + tags::schema::pitch::input_path, + tags::schema::pitch::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::pitch).append("#").append(util::to_string(index)); +} + +void PitchPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["quick-seek"] = g_settings_get_boolean(settings, "quick-seek") != 0; + + json[section][instance_name]["anti-alias"] = g_settings_get_boolean(settings, "anti-alias") != 0; + + json[section][instance_name]["sequence-length"] = g_settings_get_int(settings, "sequence-length"); + + json[section][instance_name]["seek-window"] = g_settings_get_int(settings, "seek-window"); + + json[section][instance_name]["overlap-length"] = g_settings_get_int(settings, "overlap-length"); + + json[section][instance_name]["tempo-difference"] = g_settings_get_double(settings, "tempo-difference"); + + json[section][instance_name]["rate-difference"] = g_settings_get_double(settings, "rate-difference"); + + json[section][instance_name]["semitones"] = g_settings_get_double(settings, "semitones"); +} + +void PitchPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "quick-seek", "quick-seek"); + + update_key(json.at(section).at(instance_name), settings, "anti-alias", "anti-alias"); + + update_key(json.at(section).at(instance_name), settings, "sequence-length", "sequence-length"); + + update_key(json.at(section).at(instance_name), settings, "seek-window", "seek-window"); + + update_key(json.at(section).at(instance_name), settings, "overlap-length", "overlap-length"); + + update_key(json.at(section).at(instance_name), settings, "tempo-difference", "tempo-difference"); + + update_key(json.at(section).at(instance_name), settings, "rate-difference", "rate-difference"); + + update_key(json.at(section).at(instance_name), settings, "semitones", "semitones"); +} diff --git a/src/pitch_ui.cpp b/src/pitch_ui.cpp new file mode 100644 index 0000000..d837d4a --- /dev/null +++ b/src/pitch_ui.cpp @@ -0,0 +1,194 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "pitch_ui.hpp" + +namespace ui::pitch_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr pitch; + + std::vector connections; + + std::vector gconnections; +}; + +struct _PitchBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkSpinButton *semitones, *sequence_length, *seek_window, *overlap_length, *tempo_difference, *rate_difference; + + GtkSwitch *quick_seek, *anti_alias; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PitchBox, pitch_box, GTK_TYPE_BOX) + +void on_reset(PitchBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(PitchBox* self, std::shared_ptr pitch, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->pitch = pitch; + + self->settings = g_settings_new_with_path(tags::schema::pitch::id, schema_path.c_str()); + + pitch->set_post_messages(true); + + self->data->connections.push_back(pitch->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(pitch->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->pitch->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + gsettings_bind_widgets<"quick-seek", "anti-alias", "sequence-length", "seek-window", "overlap-length", + "tempo-difference", "rate-difference", "semitones">( + self->settings, self->quick_seek, self->anti_alias, self->sequence_length, self->seek_window, + self->overlap_length, self->tempo_difference, self->rate_difference, self->semitones); +} + +void dispose(GObject* object) { + auto* self = EE_PITCH_BOX(object); + + self->data->pitch->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(pitch_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_PITCH_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(pitch_box_parent_class)->finalize(object); +} + +void pitch_box_class_init(PitchBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::pitch_ui); + + gtk_widget_class_bind_template_child(widget_class, PitchBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, PitchBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, PitchBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, PitchBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, PitchBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, PitchBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, PitchBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, PitchBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, PitchBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, PitchBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, PitchBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, PitchBox, quick_seek); + gtk_widget_class_bind_template_child(widget_class, PitchBox, anti_alias); + gtk_widget_class_bind_template_child(widget_class, PitchBox, sequence_length); + gtk_widget_class_bind_template_child(widget_class, PitchBox, seek_window); + gtk_widget_class_bind_template_child(widget_class, PitchBox, overlap_length); + gtk_widget_class_bind_template_child(widget_class, PitchBox, tempo_difference); + gtk_widget_class_bind_template_child(widget_class, PitchBox, rate_difference); + gtk_widget_class_bind_template_child(widget_class, PitchBox, semitones); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void pitch_box_init(PitchBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"ms">(self->sequence_length, self->seek_window, self->overlap_length); + + prepare_spinbuttons<"%">(self->tempo_difference, self->rate_difference); +} + +auto create() -> PitchBox* { + return static_cast(g_object_new(EE_TYPE_PITCH_BOX, nullptr)); +} + +} // namespace ui::pitch_box diff --git a/src/plugin_base.cpp b/src/plugin_base.cpp new file mode 100644 index 0000000..07806ac --- /dev/null +++ b/src/plugin_base.cpp @@ -0,0 +1,525 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "plugin_base.hpp" + +namespace { + +void on_process(void* userdata, spa_io_position* position) { + auto* d = static_cast(userdata); + + const auto n_samples = position->clock.duration; + const auto rate = position->clock.rate.denom; + + if (n_samples == 0 || rate == 0) { + return; + } + + if (rate != d->pb->rate || n_samples != d->pb->n_samples) { + d->pb->rate = rate; + d->pb->n_samples = n_samples; + + d->pb->dummy_left.resize(n_samples); + d->pb->dummy_right.resize(n_samples); + + std::ranges::fill(d->pb->dummy_left, 0.0F); + std::ranges::fill(d->pb->dummy_right, 0.0F); + + d->pb->clock_start = std::chrono::system_clock::now(); + + d->pb->setup(); + } + + d->pb->delta_t = 0.001F * static_cast(std::chrono::duration_cast( + std::chrono::system_clock::now() - d->pb->clock_start) + .count()); + + d->pb->send_notifications = d->pb->delta_t >= d->pb->notification_time_window; + + // util::warning("processing: " + util::to_string(n_samples)); + + auto* in_left = static_cast(pw_filter_get_dsp_buffer(d->in_left, n_samples)); + auto* in_right = static_cast(pw_filter_get_dsp_buffer(d->in_right, n_samples)); + + auto* out_left = static_cast(pw_filter_get_dsp_buffer(d->out_left, n_samples)); + auto* out_right = static_cast(pw_filter_get_dsp_buffer(d->out_right, n_samples)); + + std::span left_in; + std::span right_in; + std::span left_out; + std::span right_out; + + if (in_left != nullptr) { + left_in = std::span(in_left, n_samples); + } else { + left_in = d->pb->dummy_left; + } + + if (in_right != nullptr) { + right_in = std::span(in_right, n_samples); + } else { + right_in = d->pb->dummy_right; + } + + if (out_left != nullptr) { + left_out = std::span(out_left, n_samples); + } else { + left_out = d->pb->dummy_left; + } + + if (out_right != nullptr) { + right_out = std::span(out_right, n_samples); + } else { + right_out = d->pb->dummy_right; + } + + if (!d->pb->enable_probe) { + d->pb->process(left_in, right_in, left_out, right_out); + } else { + auto* probe_left = static_cast(pw_filter_get_dsp_buffer(d->probe_left, n_samples)); + auto* probe_right = static_cast(pw_filter_get_dsp_buffer(d->probe_right, n_samples)); + + if (probe_left == nullptr || probe_right == nullptr) { + std::span l(d->pb->dummy_left.data(), n_samples); + std::span r(d->pb->dummy_right.data(), n_samples); + + d->pb->process(left_in, right_in, left_out, right_out, l, r); + } else { + std::span l(probe_left, n_samples); + std::span r(probe_right, n_samples); + + d->pb->process(left_in, right_in, left_out, right_out, l, r); + } + } + + if (d->pb->send_notifications) { + d->pb->clock_start = std::chrono::system_clock::now(); + + d->pb->send_notifications = false; + } +} + +auto update_filter(struct spa_loop* loop, bool async, uint32_t seq, const void* data, size_t size, void* user_data) + -> int { + auto* self = static_cast(user_data); + + spa_process_latency_info latency_info{}; + + latency_info.ns = static_cast(self->latency_value * 1000000000.0F); + + std::array buffer{}; + + spa_pod_builder b{}; + + spa_pod_builder_init(&b, buffer.data(), sizeof(buffer)); + + const spa_pod* param = spa_process_latency_build(&b, SPA_PARAM_ProcessLatency, &latency_info); + + pw_filter_update_params(self->filter, nullptr, ¶m, 1); + + return 0; +} + +void on_filter_state_changed(void* userdata, pw_filter_state old, pw_filter_state state, const char* error) { + auto* d = static_cast(userdata); + + d->pb->state = state; + + switch (state) { + case PW_FILTER_STATE_ERROR: + d->pb->can_get_node_id = false; + break; + case PW_FILTER_STATE_UNCONNECTED: + d->pb->can_get_node_id = false; + break; + case PW_FILTER_STATE_CONNECTING: + d->pb->can_get_node_id = false; + break; + case PW_FILTER_STATE_STREAMING: + d->pb->can_get_node_id = true; + break; + case PW_FILTER_STATE_PAUSED: + d->pb->can_get_node_id = true; + break; + default: + break; + } +} + +const struct pw_filter_events filter_events = {.state_changed = on_filter_state_changed, .process = on_process}; + +} // namespace + +PluginBase::PluginBase(std::string tag, + std::string plugin_name, + std::string package, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager, + const bool& enable_probe) + : log_tag(std::move(tag)), + name(std::move(plugin_name)), + package(std::move(package)), + enable_probe(enable_probe), + settings(g_settings_new_with_path(schema.c_str(), schema_path.c_str())), + pm(pipe_manager) { + std::string description; + + if (name != "output_level" && name != "spectrum") { + description = tags::plugin_name::get_translated()[name]; + + bypass = g_settings_get_boolean(settings, "bypass") != 0; + + gconnections.push_back(g_signal_connect(settings, "changed::bypass", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->bypass = g_settings_get_boolean(settings, "bypass") != 0; + }), + this)); + } else if (name == "output_level") { + description = _("Output Level Meter"); + } else if (name == "spectrum") { + description = _("Spectrum"); + } + + pf_data.pb = this; + + const auto filter_name = "ee_" + log_tag.substr(0U, log_tag.size() - 2U) + "_" + name; + + pm->lock(); + + auto* props_filter = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_filter, PW_KEY_APP_ID, tags::app::id); + pw_properties_set(props_filter, PW_KEY_NODE_NAME, filter_name.c_str()); + pw_properties_set(props_filter, PW_KEY_NODE_NICK, name.c_str()); + pw_properties_set(props_filter, PW_KEY_NODE_DESCRIPTION, description.c_str()); + pw_properties_set(props_filter, PW_KEY_MEDIA_TYPE, "Audio"); + pw_properties_set(props_filter, PW_KEY_MEDIA_CATEGORY, "Filter"); + pw_properties_set(props_filter, PW_KEY_MEDIA_ROLE, "DSP"); + pw_properties_set(props_filter, PW_KEY_NODE_PASSIVE, "true"); + + filter = pw_filter_new(pm->core, filter_name.c_str(), props_filter); + + // left channel input + + auto* props_in_left = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_in_left, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_in_left, PW_KEY_PORT_NAME, "input_FL"); + pw_properties_set(props_in_left, "audio.channel", "FL"); + + pf_data.in_left = static_cast(pw_filter_add_port(filter, PW_DIRECTION_INPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, + sizeof(port), props_in_left, nullptr, 0)); + + // right channel input + + auto* props_in_right = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_in_right, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_in_right, PW_KEY_PORT_NAME, "input_FR"); + pw_properties_set(props_in_right, "audio.channel", "FR"); + + pf_data.in_right = static_cast(pw_filter_add_port(filter, PW_DIRECTION_INPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, + sizeof(port), props_in_right, nullptr, 0)); + + // left channel output + + auto* props_out_left = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_out_left, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_out_left, PW_KEY_PORT_NAME, "output_FL"); + pw_properties_set(props_out_left, "audio.channel", "FL"); + + pf_data.out_left = static_cast(pw_filter_add_port(filter, PW_DIRECTION_OUTPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, + sizeof(port), props_out_left, nullptr, 0)); + + // right channel output + + auto* props_out_right = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_out_right, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_out_right, PW_KEY_PORT_NAME, "output_FR"); + pw_properties_set(props_out_right, "audio.channel", "FR"); + + pf_data.out_right = static_cast(pw_filter_add_port( + filter, PW_DIRECTION_OUTPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, sizeof(port), props_out_right, nullptr, 0)); + + if (enable_probe) { + n_ports += 2; + + // probe left input + + auto* props_left = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_left, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_left, PW_KEY_PORT_NAME, "probe_FL"); + pw_properties_set(props_left, "audio.channel", "PROBE_FL"); + + pf_data.probe_left = static_cast(pw_filter_add_port( + filter, PW_DIRECTION_INPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, sizeof(port), props_left, nullptr, 0)); + + // probe right input + + auto* props_right = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_right, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_right, PW_KEY_PORT_NAME, "probe_FR"); + pw_properties_set(props_right, "audio.channel", "PROBE_FR"); + + pf_data.probe_right = static_cast(pw_filter_add_port( + filter, PW_DIRECTION_INPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, sizeof(port), props_right, nullptr, 0)); + } + + pm->sync_wait_unlock(); +} + +PluginBase::~PluginBase() { + post_messages = false; + + pm->lock(); + + if (listener.link.next != nullptr || listener.link.prev != nullptr) { + spa_hook_remove(&listener); + } + + pw_filter_destroy(filter); + + pm->sync_wait_unlock(); + + for (auto& handler_id : gconnections) { + g_signal_handler_disconnect(settings, handler_id); + } + + gconnections.clear(); + + g_object_unref(settings); +} + +void PluginBase::set_post_messages(const bool& state) { + post_messages = state; +} + +void PluginBase::reset_settings() { + util::reset_all_keys_except(settings); +} + +auto PluginBase::connect_to_pw() -> bool { + connected_to_pw = false; + can_get_node_id = false; + state = PW_FILTER_STATE_UNCONNECTED; + + pm->lock(); + + if (pw_filter_connect(filter, PW_FILTER_FLAG_RT_PROCESS, nullptr, 0) != 0) { + pm->unlock(); + + util::warning(log_tag + name + " cannot connect the filter to PipeWire!"); + + return false; + } + + initialize_listener(); + + pm->sync_wait_unlock(); + + while (!can_get_node_id) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + if (state == PW_FILTER_STATE_ERROR) { + util::warning(log_tag + name + " is in an error"); + + return false; + } + } + + pm->lock(); + + node_id = pw_filter_get_node_id(filter); + + pm->sync_wait_unlock(); + + /* + The filter we link in our pipeline have at least 4 ports. Some have six. Before we try to link filters we have to + wait until the information about their ports is available in PipeManager's list_ports vector. + */ + + while (pm->count_node_ports(node_id) != n_ports) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + + connected_to_pw = true; + + util::debug(log_tag + name + " successfully connected to PipeWire graph"); + + return true; +} + +void PluginBase::initialize_listener() { + pw_filter_add_listener(filter, &listener, &filter_events, &pf_data); +} + +auto PluginBase::get_node_id() const -> uint { + return node_id; +} + +void PluginBase::set_active(const bool& state) const { + pw_filter_set_active(filter, state); +} + +void PluginBase::disconnect_from_pw() { + pm->lock(); + + set_active(false); + + // NOLINTNEXTLINE(clang-analyzer-core.NullDereference) + if (listener.link.next != nullptr || listener.link.prev != nullptr) { + spa_hook_remove(&listener); + } + + pw_filter_disconnect(filter); + + connected_to_pw = false; + + pm->sync_wait_unlock(); + + node_id = SPA_ID_INVALID; +} + +void PluginBase::setup() {} + +void PluginBase::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) {} + +void PluginBase::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out, + std::span& probe_left, + std::span& probe_right) {} + +auto PluginBase::get_latency_seconds() -> float { + return 0.0F; +} + +void PluginBase::show_native_ui() { + if (lv2_wrapper == nullptr) { + return; + } + + if (!lv2_wrapper->has_ui()) { + lv2_wrapper->load_ui(); + } +} + +void PluginBase::close_native_ui() { + if (lv2_wrapper == nullptr) { + return; + } + + lv2_wrapper->native_ui_to_gsettings(); + lv2_wrapper->close_ui(); +} + +void PluginBase::set_native_ui_update_frequency(const uint& value) { + if (lv2_wrapper == nullptr) { + return; + } + + lv2_wrapper->set_ui_update_rate(value); +} + +void PluginBase::get_peaks(const std::span& left_in, + const std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!post_messages) { + return; + } + + // input level + + float peak_l = std::ranges::max(left_in); + float peak_r = std::ranges::max(right_in); + + input_peak_left = (peak_l > input_peak_left) ? peak_l : input_peak_left; + input_peak_right = (peak_r > input_peak_right) ? peak_r : input_peak_right; + + // output level + + peak_l = std::ranges::max(left_out); + peak_r = std::ranges::max(right_out); + + output_peak_left = (peak_l > output_peak_left) ? peak_l : output_peak_left; + output_peak_right = (peak_r > output_peak_right) ? peak_r : output_peak_right; +} + +void PluginBase::setup_input_output_gain() { + input_gain = static_cast(util::db_to_linear(g_settings_get_double(settings, "input-gain"))); + output_gain = static_cast(util::db_to_linear(g_settings_get_double(settings, "output-gain"))); + + g_signal_connect(settings, "changed::input-gain", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->input_gain = util::db_to_linear(g_settings_get_double(settings, key)); + }), + this); + + g_signal_connect(settings, "changed::output-gain", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->output_gain = util::db_to_linear(g_settings_get_double(settings, key)); + }), + this); +} + +void PluginBase::apply_gain(std::span& left, std::span& right, const float& gain) { + if (left.empty() || right.empty()) { + return; + } + + std::ranges::for_each(left, [&](auto& v) { v *= gain; }); + std::ranges::for_each(right, [&](auto& v) { v *= gain; }); +} + +void PluginBase::notify() { + const auto input_peak_db_l = util::linear_to_db(input_peak_left); + const auto input_peak_db_r = util::linear_to_db(input_peak_right); + + const auto output_peak_db_l = util::linear_to_db(output_peak_left); + const auto output_peak_db_r = util::linear_to_db(output_peak_right); + + input_level.emit(input_peak_db_l, input_peak_db_r); + output_level.emit(output_peak_db_l, output_peak_db_r); + + input_peak_left = util::minimum_linear_level; + input_peak_right = util::minimum_linear_level; + output_peak_left = util::minimum_linear_level; + output_peak_right = util::minimum_linear_level; +} + +void PluginBase::update_probe_links() {} + +void PluginBase::update_filter_params() { + pw_loop_invoke(pw_thread_loop_get_loop(pm->thread_loop), update_filter, 1, nullptr, 0, false, this); +} diff --git a/src/plugin_preset_base.cpp b/src/plugin_preset_base.cpp new file mode 100644 index 0000000..42c973e --- /dev/null +++ b/src/plugin_preset_base.cpp @@ -0,0 +1,44 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "plugin_preset_base.hpp" + +PluginPresetBase::PluginPresetBase(const char* schema_id, + const char* schema_path_input, + const char* schema_path_output, + PresetType preset_type, + const int& index) + : index(index), preset_type(preset_type) { + switch (preset_type) { + case PresetType::input: + section = "input"; + + settings = g_settings_new_with_path(schema_id, (schema_path_input + util::to_string(index) + "/").c_str()); + break; + case PresetType::output: + section = "output"; + + settings = g_settings_new_with_path(schema_id, (schema_path_output + util::to_string(index) + "/").c_str()); + break; + } +} + +PluginPresetBase::~PluginPresetBase() { + g_object_unref(settings); +} diff --git a/src/plugins_box.cpp b/src/plugins_box.cpp new file mode 100644 index 0000000..cf56ae6 --- /dev/null +++ b/src/plugins_box.cpp @@ -0,0 +1,825 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "plugins_box.hpp" + +namespace ui::plugins_box { + +using namespace std::string_literals; + +struct Data { + public: + Data() { this->translated = tags::plugin_name::get_translated(); } + + ~Data() { util::debug("data struct destroyed"); } + + bool schedule_signal_idle = false; + + app::Application* application = nullptr; + + PipelineType pipeline_type{}; + + std::string schema_path; + + std::map translated; + + std::vector connections; + + std::vector gconnections; +}; + +struct _PluginsBox { + GtkBox parent_instance; + + GtkMenuButton* menubutton_plugins; + + GtkOverlay* plugin_overlay; + + AdwStatusPage* overlay_no_plugins; + + GtkListView* listview; + + GtkStack* stack; + + GtkBox *startpoint_box, *endpoint_box; + + GtkImage *startpoint_icon, *endpoint_icon; + + GtkLabel *startpoint_name, *endpoint_name; + + ui::plugins_menu::PluginsMenu* plugins_menu; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PluginsBox, plugins_box, GTK_TYPE_BOX) + +template +void add_plugins_to_stack(PluginsBox* self) { + EffectsBase* effects_base = nullptr; + + if constexpr (pipeline_type == PipelineType::input) { + effects_base = self->data->application->sie; + } else if constexpr (pipeline_type == PipelineType::output) { + effects_base = self->data->application->soe; + } + + // saving the current visible page name for later usage + + std::string visible_page_name = + (gtk_stack_get_visible_child_name(self->stack) != nullptr) ? gtk_stack_get_visible_child_name(self->stack) : ""; + + // removing all plugins + + for (auto* child = gtk_widget_get_first_child(GTK_WIDGET(self->stack)); child != nullptr;) { + auto* next_child = gtk_widget_get_next_sibling(child); + + uint serial = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(child), "serial")); + + set_ignore_filter_idle_add(serial, true); + + gtk_stack_remove(self->stack, child); + + child = next_child; + } + + // Adding to the stack the plugins in the list that are not there yet + + auto plugins_list = util::gchar_array_to_vector(g_settings_get_strv(self->settings, "plugins")); + + for (const auto& name : plugins_list) { + auto path = self->data->schema_path + tags::plugin_name::get_base_name(name) + "/" + + util::to_string(tags::plugin_name::get_id(name)) + "/"; + + path.erase(std::remove(path.begin(), path.end(), '_'), path.end()); + + if (name.starts_with(tags::plugin_name::autogain)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + auto* box = ui::autogain_box::create(); + + ui::autogain_box::setup(box, plugin_ptr, path); + + gtk_stack_add_named(self->stack, GTK_WIDGET(box), name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::bass_enhancer)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::bass_enhancer_box::create(); + + ui::bass_enhancer_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::bass_loudness)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::bass_loudness_box::create(); + + ui::bass_loudness_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::compressor)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::compressor_box::create(); + + ui::compressor_box::setup(plugin_box, plugin_ptr, path, self->data->application->pm); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (name.starts_with(tags::plugin_name::convolver)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + auto* box = ui::convolver_box::create(); + + ui::convolver_box::setup(box, plugin_ptr, path, self->data->application); + + gtk_stack_add_named(self->stack, GTK_WIDGET(box), name.c_str()); + } else if (name.starts_with(tags::plugin_name::crossfeed)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + auto* box = ui::crossfeed_box::create(); + + ui::crossfeed_box::setup(box, plugin_ptr, path); + + gtk_stack_add_named(self->stack, GTK_WIDGET(box), name.c_str()); + } else if (name.starts_with(tags::plugin_name::crystalizer)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + auto* box = ui::crystalizer_box::create(); + + ui::crystalizer_box::setup(box, plugin_ptr, path); + + gtk_stack_add_named(self->stack, GTK_WIDGET(box), name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::deepfilternet)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::deepfilternet_box::create(); + + ui::deepfilternet_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::deesser)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::deesser_box::create(); + + ui::deesser_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::delay)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::delay_box::create(); + + ui::delay_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (name.starts_with(tags::plugin_name::echo_canceller)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + auto* box = ui::echo_canceller_box::create(); + + ui::echo_canceller_box::setup(box, plugin_ptr, path); + + gtk_stack_add_named(self->stack, GTK_WIDGET(box), name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::exciter)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::exciter_box::create(); + + ui::exciter_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::expander)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::expander_box::create(); + + ui::expander_box::setup(plugin_box, plugin_ptr, path, self->data->application->pm); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::equalizer)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::equalizer_box::create(); + + ui::equalizer_box::setup(plugin_box, plugin_ptr, path, self->data->application); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::filter)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::filter_box::create(); + + ui::filter_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::gate)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::gate_box::create(); + + ui::gate_box::setup(plugin_box, plugin_ptr, path, self->data->application->pm); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::level_meter)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::level_meter_box::create(); + + ui::level_meter_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::limiter)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::limiter_box::create(); + + ui::limiter_box::setup(plugin_box, plugin_ptr, path, self->data->application->pm); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::loudness)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::loudness_box::create(); + + ui::loudness_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::maximizer)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::maximizer_box::create(); + + ui::maximizer_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::multiband_compressor)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::multiband_compressor_box::create(); + + ui::multiband_compressor_box::setup(plugin_box, plugin_ptr, path, self->data->application->pm); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::multiband_gate)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::multiband_gate_box::create(); + + ui::multiband_gate_box::setup(plugin_box, plugin_ptr, path, self->data->application->pm); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (name.starts_with(tags::plugin_name::pitch)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + auto* box = ui::pitch_box::create(); + + ui::pitch_box::setup(box, plugin_ptr, path); + + gtk_stack_add_named(self->stack, GTK_WIDGET(box), name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::reverb)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::reverb_box::create(); + + ui::reverb_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::rnnoise)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::rnnoise_box::create(); + + ui::rnnoise_box::setup(plugin_box, plugin_ptr, path, self->data->application); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::speex)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::speex_box::create(); + + ui::speex_box::setup(plugin_box, plugin_ptr, path, self->data->application); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } else if (GtkWidget* box = nullptr; name.starts_with(tags::plugin_name::stereo_tools)) { + auto plugin_ptr = effects_base->get_plugin_instance(name); + + if (plugin_ptr->package_installed) { + auto* plugin_box = ui::stereo_tools_box::create(); + + ui::stereo_tools_box::setup(plugin_box, plugin_ptr, path); + + box = GTK_WIDGET(plugin_box); + } else { + box = ui::missing_plugin_box(plugin_ptr->name, plugin_ptr->package); + } + + gtk_stack_add_named(self->stack, box, name.c_str()); + } + } + + if (plugins_list.empty()) { + gtk_widget_set_visible(GTK_WIDGET(self->overlay_no_plugins), 1); + + gtk_widget_set_visible(GTK_WIDGET(self->startpoint_box), 0); + + gtk_widget_set_visible(GTK_WIDGET(self->endpoint_box), 0); + } else { + gtk_widget_set_visible(GTK_WIDGET(self->overlay_no_plugins), 0); + + gtk_widget_set_visible(GTK_WIDGET(self->startpoint_box), 1); + + gtk_widget_set_visible(GTK_WIDGET(self->endpoint_box), 1); + + if (std::ranges::find(plugins_list, visible_page_name) != plugins_list.end()) { + gtk_stack_set_visible_child_name(self->stack, visible_page_name.c_str()); + } + } +} + +void setup_listview(PluginsBox* self) { + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect( + factory, "setup", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PluginsBox* self) { + auto builder = gtk_builder_new_from_resource(tags::resources::plugin_row_ui); + + auto* top_box = gtk_builder_get_object(builder, "top_box"); + auto* plugin_icon = gtk_builder_get_object(builder, "plugin_icon"); + auto* remove = gtk_builder_get_object(builder, "remove"); + auto* enable = gtk_builder_get_object(builder, "enable"); + auto* drag_handle = gtk_builder_get_object(builder, "drag_handle"); + + g_object_set_data(G_OBJECT(item), "top_box", top_box); + g_object_set_data(G_OBJECT(item), "plugin_icon", plugin_icon); + g_object_set_data(G_OBJECT(item), "name", gtk_builder_get_object(builder, "name")); + g_object_set_data(G_OBJECT(item), "remove", remove); + g_object_set_data(G_OBJECT(item), "enable", enable); + g_object_set_data(G_OBJECT(item), "drag_handle", drag_handle); + + gtk_list_item_set_child(item, GTK_WIDGET(top_box)); + + g_object_unref(builder); + + // showing/hiding icons based on wether the mouse is over the plugin row + + auto* controller = gtk_event_controller_motion_new(); + + g_object_set_data(G_OBJECT(controller), "remove", remove); + g_object_set_data(G_OBJECT(controller), "enable", enable); + g_object_set_data(G_OBJECT(controller), "drag_handle", drag_handle); + + g_signal_connect(controller, "enter", + G_CALLBACK(+[](GtkEventControllerMotion* controller, gdouble x, gdouble y, PluginsBox* self) { + gtk_widget_set_opacity(GTK_WIDGET(g_object_get_data(G_OBJECT(controller), "remove")), 1.0); + gtk_widget_set_opacity(GTK_WIDGET(g_object_get_data(G_OBJECT(controller), "enable")), 1.0); + gtk_widget_set_opacity(GTK_WIDGET(g_object_get_data(G_OBJECT(controller), "drag_handle")), + 1.0); + }), + self); + + g_signal_connect(controller, "leave", G_CALLBACK(+[](GtkEventControllerMotion* controller, PluginsBox* self) { + gtk_widget_set_opacity(GTK_WIDGET(g_object_get_data(G_OBJECT(controller), "remove")), 0.0); + gtk_widget_set_opacity(GTK_WIDGET(g_object_get_data(G_OBJECT(controller), "enable")), 0.0); + gtk_widget_set_opacity(GTK_WIDGET(g_object_get_data(G_OBJECT(controller), "drag_handle")), + 0.0); + }), + self); + + gtk_widget_add_controller(GTK_WIDGET(top_box), controller); + + // Configuring row drag and drop + + auto* drag_source = gtk_drag_source_new(); + + gtk_drag_source_set_actions(drag_source, GDK_ACTION_MOVE); + + g_object_set_data(G_OBJECT(drag_source), "top_box", top_box); + + g_signal_connect( + drag_source, "prepare", G_CALLBACK(+[](GtkDragSource* source, double x, double y, PluginsBox* self) { + auto* top_box = static_cast(g_object_get_data(G_OBJECT(source), "top_box")); + + auto* paintable = gtk_widget_paintable_new(GTK_WIDGET(top_box)); + + gtk_drag_source_set_icon(source, paintable, 0, 0); + + if (auto* plugin_name = static_cast(g_object_get_data(G_OBJECT(top_box), "page-name")); + plugin_name != nullptr) { + return gdk_content_provider_new_typed(G_TYPE_STRING, plugin_name); + } + + return gdk_content_provider_new_typed(G_TYPE_STRING, ""); + }), + self); + + auto* drop_target = gtk_drop_target_new(G_TYPE_STRING, GDK_ACTION_MOVE); + + g_object_set_data(G_OBJECT(drop_target), "top_box", top_box); + + g_signal_connect( + drop_target, "drop", + G_CALLBACK(+[](GtkDropTarget* target, const GValue* value, double x, double y, PluginsBox* self) { + if (!G_VALUE_HOLDS(value, G_TYPE_STRING)) { + return false; + } + + auto* top_box = static_cast(g_object_get_data(G_OBJECT(target), "top_box")); + + if (auto* dst = static_cast(g_object_get_data(G_OBJECT(top_box), "page-name")); + dst != nullptr) { + auto* src = g_value_get_string(value); + + if (g_strcmp0(src, dst) != 0) { + auto list = util::gchar_array_to_vector(g_settings_get_strv(self->settings, "plugins")); + + auto iter_src = std::ranges::find(list, src); + auto iter_dst = std::ranges::find(list, dst); + + auto insert_after = iter_src - list.begin() < iter_dst - list.begin(); + + list.erase(iter_src); + + iter_dst = std::ranges::find(list, dst); + + list.insert(((insert_after) ? (iter_dst + 1) : iter_dst), src); + + g_settings_set_strv(self->settings, "plugins", util::make_gchar_pointer_vector(list).data()); + + return true; + } + + return false; + } + + return false; + }), + self); + + gtk_widget_add_controller(GTK_WIDGET(drag_handle), GTK_EVENT_CONTROLLER(drag_source)); + gtk_widget_add_controller(GTK_WIDGET(top_box), GTK_EVENT_CONTROLLER(drop_target)); + + g_signal_connect(remove, "clicked", G_CALLBACK(+[](GtkButton* btn, PluginsBox* self) { + if (auto* name = static_cast(g_object_get_data(G_OBJECT(btn), "page-name")); + name != nullptr) { + auto list = util::gchar_array_to_vector(g_settings_get_strv(self->settings, "plugins")); + + list.erase(std::remove_if(list.begin(), list.end(), + [=](const auto& plugin_name) { return plugin_name == name; }), + list.end()); + + g_settings_set_strv(self->settings, "plugins", + util::make_gchar_pointer_vector(list).data()); + } + }), + self); + }), + self); + + g_signal_connect( + factory, "bind", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PluginsBox* self) { + auto* top_box = static_cast(g_object_get_data(G_OBJECT(item), "top_box")); + auto* label = static_cast(g_object_get_data(G_OBJECT(item), "name")); + auto* remove = static_cast(g_object_get_data(G_OBJECT(item), "remove")); + auto* enable = static_cast(g_object_get_data(G_OBJECT(item), "enable")); + auto* plugin_icon = static_cast(g_object_get_data(G_OBJECT(item), "plugin_icon")); + + gtk_image_set_from_icon_name(plugin_icon, "ee-arrow-down-symbolic"); + + auto* child_item = gtk_list_item_get_item(item); + + auto page = GTK_STACK_PAGE(child_item); + auto page_name = gtk_stack_page_get_name(page); + auto base_name = tags::plugin_name::get_base_name(page_name); + + g_object_set_data(G_OBJECT(top_box), "page-name", const_cast(page_name)); + g_object_set_data(G_OBJECT(remove), "page-name", const_cast(page_name)); + + gtk_label_set_text(label, self->data->translated[base_name].c_str()); + + gtk_accessible_update_property(GTK_ACCESSIBLE(remove), GTK_ACCESSIBLE_PROPERTY_LABEL, + (_("Remove") + " "s + self->data->translated[base_name]).c_str(), -1); + + // binding the enable button to the bypass key + + auto gname = base_name; + + gname.erase(std::remove(gname.begin(), gname.end(), '_'), gname.end()); + + auto schema_path = + self->data->schema_path + gname + "/" + util::to_string(tags::plugin_name::get_id(page_name)) + "/"; + + auto schema_id = tags::app::id + "."s + gname; + + auto* settings = g_settings_new_with_path(schema_id.c_str(), schema_path.c_str()); + + gsettings_bind_widget(settings, "bypass", enable, G_SETTINGS_BIND_INVERT_BOOLEAN); + + g_object_unref(settings); + }), + self); + + gtk_list_view_set_factory(self->listview, factory); + + g_object_unref(factory); +} + +void setup(PluginsBox* self, app::Application* application, PipelineType pipeline_type) { + self->data->application = application; + self->data->pipeline_type = pipeline_type; + + switch (pipeline_type) { + case PipelineType::input: { + self->settings = g_settings_new(tags::schema::id_input); + + self->data->schema_path = tags::app::path_stream_inputs; + + add_plugins_to_stack(self); + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::plugins", G_CALLBACK(+[](GSettings* settings, char* key, PluginsBox* self) { + add_plugins_to_stack(self); + }), + self)); + + gtk_image_set_from_icon_name(self->startpoint_icon, "audio-input-microphone-symbolic"); + gtk_image_set_from_icon_name(self->endpoint_icon, "ee-applications-multimedia-symbolic"); + + gtk_label_set_text(self->startpoint_name, _("Input Device")); + gtk_label_set_text(self->endpoint_name, _("Recorders")); + + break; + } + case PipelineType::output: { + self->settings = g_settings_new(tags::schema::id_output); + + self->data->schema_path = tags::app::path_stream_outputs; + + add_plugins_to_stack(self); + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::plugins", G_CALLBACK(+[](GSettings* settings, char* key, PluginsBox* self) { + add_plugins_to_stack(self); + }), + self)); + + gtk_image_set_from_icon_name(self->startpoint_icon, "ee-applications-multimedia-symbolic"); + gtk_image_set_from_icon_name(self->endpoint_icon, "audio-speakers-symbolic"); + + gtk_label_set_text(self->startpoint_name, _("Players")); + gtk_label_set_text(self->endpoint_name, _("Output Device")); + + break; + } + } + + ui::plugins_menu::setup(self->plugins_menu, application, pipeline_type); + + setup_listview(self); +} + +void realize(GtkWidget* widget) { + auto* self = EE_PLUGINS_BOX(widget); + + self->data->schedule_signal_idle = true; + + GTK_WIDGET_CLASS(plugins_box_parent_class)->realize(widget); +} + +void unroot(GtkWidget* widget) { + auto* self = EE_PLUGINS_BOX(widget); + + self->data->schedule_signal_idle = false; + + GTK_WIDGET_CLASS(plugins_box_parent_class)->unroot(widget); +} + +void dispose(GObject* object) { + auto* self = EE_PLUGINS_BOX(object); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + // Trying to avoid that the functions scheduled by the plugins are executed when the widgets have already been + // disposed + + for (auto* child = gtk_widget_get_first_child(GTK_WIDGET(self->stack)); child != nullptr;) { + auto* next_child = gtk_widget_get_next_sibling(child); + + uint serial = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(child), "serial")); + + set_ignore_filter_idle_add(serial, true); + + child = next_child; + } + + util::debug("disposed"); + + G_OBJECT_CLASS(plugins_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_PLUGINS_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(plugins_box_parent_class)->finalize(object); +} + +void plugins_box_class_init(PluginsBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + widget_class->realize = realize; + widget_class->unroot = unroot; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::plugins_box_ui); + + gtk_widget_class_bind_template_child(widget_class, PluginsBox, menubutton_plugins); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, plugin_overlay); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, overlay_no_plugins); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, listview); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, stack); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, startpoint_box); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, startpoint_icon); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, startpoint_name); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, endpoint_box); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, endpoint_icon); + gtk_widget_class_bind_template_child(widget_class, PluginsBox, endpoint_name); +} + +void plugins_box_init(PluginsBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->data->schedule_signal_idle = false; + + self->plugins_menu = ui::plugins_menu::create(); + + gtk_menu_button_set_popover(self->menubutton_plugins, GTK_WIDGET(self->plugins_menu)); + + gtk_overlay_set_clip_overlay(self->plugin_overlay, GTK_WIDGET(self->overlay_no_plugins), 1); +} + +auto create() -> PluginsBox* { + return static_cast(g_object_new(EE_TYPE_PLUGINS_BOX, nullptr)); +} + +} // namespace ui::plugins_box diff --git a/src/plugins_menu.cpp b/src/plugins_menu.cpp new file mode 100644 index 0000000..2af0e22 --- /dev/null +++ b/src/plugins_menu.cpp @@ -0,0 +1,296 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "plugins_menu.hpp" + +namespace ui::plugins_menu { + +using namespace std::string_literals; + +struct Data { + public: + Data() { this->translated = tags::plugin_name::get_translated(); } + + ~Data() { util::debug("data struct destroyed"); } + + bool schedule_signal_idle; + + app::Application* application; + + std::map translated; + + std::vector connections; + + std::vector gconnections; +}; + +struct _PluginsMenu { + GtkPopover parent_instance; + + GtkScrolledWindow* scrolled_window; + + GtkListView* listview; + + GtkStringList* string_list; + + GSettings *settings, *app_settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PluginsMenu, plugins_menu, GTK_TYPE_POPOVER) + +void add_new_plugin_to_pipeline(GtkButton* btn, PluginsMenu* self) { + auto* string_object = GTK_STRING_OBJECT(g_object_get_data(G_OBJECT(btn), "string-object")); + + if (string_object == nullptr) { + return; + } + + auto* translated_name = gtk_string_object_get_string(string_object); + + std::string base_name; + + for (const auto& [key, value] : self->data->translated) { + if (translated_name == value) { + base_name = key; + + break; + } + } + + if (base_name.empty()) { + return; + } + + auto list = util::gchar_array_to_vector(g_settings_get_strv(self->settings, "plugins")); + + std::vector index_list; + + for (const auto& name : list) { + if (tags::plugin_name::get_base_name(name) == base_name) { + index_list.emplace_back(tags::plugin_name::get_id(name)); + } + } + + auto new_id = (index_list.empty()) ? 0 : std::ranges::max(index_list) + 1; + + auto new_name = base_name + "#" + util::to_string(new_id); + + if (list.empty()) { + list.push_back(new_name); + + g_settings_set_strv(self->settings, "plugins", util::make_gchar_pointer_vector(list).data()); + + return; + } + + // If the list is not empty and the user is careful protecting + // their device with a plugin of type limiter at the last position + // of the filter chain, we follow this behaviour trying to inserting + // the new plugin at the second to last position. + + // To do so, we first check if the new plugin is a limiter or the + // level meter and place it directly at the last position (those + // plugins do not need to be placed elsewhere and in most of the + // cases the user wants them at the bottom of the pipeline). + + constexpr auto limiters_and_lm = + std::to_array({tags::plugin_name::limiter, tags::plugin_name::maximizer, tags::plugin_name::level_meter}); + + if (std::any_of(limiters_and_lm.begin(), limiters_and_lm.end(), + [&](const auto& str) { return new_name.starts_with(str); })) { + list.push_back(new_name); + + g_settings_set_strv(self->settings, "plugins", util::make_gchar_pointer_vector(list).data()); + + return; + } + + // If the new plugin is not one of the above mentioned, we have + // the check the last plugin of the pipeline and if it's a limiter, + // we have to place it at the second to last position. + + constexpr auto limiter_plugins = std::to_array({tags::plugin_name::limiter, tags::plugin_name::maximizer}); + + if (std::any_of(limiter_plugins.begin(), limiter_plugins.end(), + [&](const auto& str) { return list.back().starts_with(str); })) { + list.insert(list.cend() - 1U, new_name); + } else { + list.push_back(new_name); + } + + g_settings_set_strv(self->settings, "plugins", util::make_gchar_pointer_vector(list).data()); +} + +void setup_listview(PluginsMenu* self) { + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect(factory, "setup", + G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PluginsMenu* self) { + auto* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + auto* label = gtk_label_new(nullptr); + auto* button = gtk_button_new_from_icon_name("list-add-symbolic"); + + gtk_widget_set_halign(GTK_WIDGET(label), GTK_ALIGN_START); + gtk_widget_set_hexpand(GTK_WIDGET(label), 1); + + gtk_box_append(GTK_BOX(box), GTK_WIDGET(label)); + gtk_box_append(GTK_BOX(box), GTK_WIDGET(button)); + + gtk_widget_add_css_class(GTK_WIDGET(button), "circular"); + + gtk_list_item_set_activatable(item, 0); + gtk_list_item_set_child(item, GTK_WIDGET(box)); + + g_object_set_data(G_OBJECT(item), "name", label); + g_object_set_data(G_OBJECT(item), "add", button); + + g_signal_connect(button, "clicked", G_CALLBACK(add_new_plugin_to_pipeline), self); + }), + self); + + g_signal_connect(factory, "bind", + G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PluginsMenu* self) { + auto* label = static_cast(g_object_get_data(G_OBJECT(item), "name")); + auto* btn_add = static_cast(g_object_get_data(G_OBJECT(item), "add")); + + auto* child_item = gtk_list_item_get_item(item); + auto* string_object = GTK_STRING_OBJECT(child_item); + + g_object_set_data(G_OBJECT(btn_add), "string-object", string_object); + + auto* translated_name = gtk_string_object_get_string(GTK_STRING_OBJECT(child_item)); + + gtk_label_set_text(label, translated_name); + + gtk_accessible_update_property(GTK_ACCESSIBLE(btn_add), GTK_ACCESSIBLE_PROPERTY_LABEL, + (_("Add") + " "s + translated_name).c_str(), -1); + }), + self); + + gtk_list_view_set_factory(self->listview, factory); + + g_object_unref(factory); + + for (const auto& translated_name : std::views::values(self->data->translated)) { + gtk_string_list_append(self->string_list, translated_name.c_str()); + } +} + +void setup(PluginsMenu* self, app::Application* application, PipelineType pipeline_type) { + self->data->application = application; + + switch (pipeline_type) { + case PipelineType::input: { + self->settings = g_settings_new(tags::schema::id_input); + + break; + } + case PipelineType::output: { + self->settings = g_settings_new(tags::schema::id_output); + + break; + } + } + + setup_listview(self); +} + +void show(GtkWidget* widget) { + auto* self = EE_PLUGINS_MENU(widget); + + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->data->application)); + + auto active_window_height = gtk_widget_get_height(GTK_WIDGET(active_window)); + + const int menu_height = static_cast(0.5F * static_cast(active_window_height)); + + gtk_scrolled_window_set_max_content_height(self->scrolled_window, menu_height); + + GTK_WIDGET_CLASS(plugins_menu_parent_class)->show(widget); +} + +void dispose(GObject* object) { + auto* self = EE_PLUGINS_MENU(object); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + g_object_unref(self->app_settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(plugins_menu_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_PLUGINS_MENU(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(plugins_menu_parent_class)->finalize(object); +} + +void plugins_menu_class_init(PluginsMenuClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + widget_class->show = show; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::plugins_menu_ui); + + gtk_widget_class_bind_template_child(widget_class, PluginsMenu, string_list); + + gtk_widget_class_bind_template_child(widget_class, PluginsMenu, scrolled_window); + gtk_widget_class_bind_template_child(widget_class, PluginsMenu, listview); +} + +void plugins_menu_init(PluginsMenu* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->app_settings = g_settings_new(tags::app::id); + + g_settings_bind(self->app_settings, "autohide-popovers", self, "autohide", G_SETTINGS_BIND_DEFAULT); +} + +auto create() -> PluginsMenu* { + return static_cast(g_object_new(EE_TYPE_PLUGINS_MENU, nullptr)); +} + +} // namespace ui::plugins_menu diff --git a/src/preferences_general.cpp b/src/preferences_general.cpp new file mode 100644 index 0000000..92ea7e8 --- /dev/null +++ b/src/preferences_general.cpp @@ -0,0 +1,153 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "preferences_general.hpp" + +namespace ui::preferences::general { + +using namespace std::string_literals; + +struct _PreferencesGeneral { + AdwPreferencesPage parent_instance; + + GtkSwitch *enable_autostart, *process_all_inputs, *process_all_outputs, *theme_switch, *shutdown_on_window_close, + *use_cubic_volumes, *autohide_popovers, *exclude_monitor_streams, *show_native_plugin_ui; + + GtkSpinButton *inactivity_timeout, *meters_update_interval, *lv2ui_update_frequency; + + GSettings* settings; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PreferencesGeneral, preferences_general, ADW_TYPE_PREFERENCES_PAGE) + +#ifndef ENABLE_LIBPORTAL + +auto on_enable_autostart(GtkSwitch* obj, gboolean state, gpointer user_data) -> gboolean { + std::filesystem::path autostart_dir{g_get_user_config_dir() + "/autostart"s}; + + if (!std::filesystem::is_directory(autostart_dir)) { + std::filesystem::create_directories(autostart_dir); + } + + std::filesystem::path autostart_file{g_get_user_config_dir() + "/autostart/easyeffects-service.desktop"s}; + + if (state != 0) { + if (!std::filesystem::exists(autostart_file)) { + std::ofstream ofs{autostart_file}; + + ofs << "[Desktop Entry]\n"; + ofs << "Name=Easy Effects\n"; + ofs << "Comment=Easy Effects Service\n"; + ofs << "Exec=easyeffects --gapplication-service\n"; + ofs << "Icon=com.github.wwmm.easyeffects\n"; + ofs << "StartupNotify=false\n"; + ofs << "Terminal=false\n"; + ofs << "Type=Application\n"; + + ofs.close(); + + util::debug("autostart file created"); + } + } else { + if (std::filesystem::exists(autostart_file)) { + std::filesystem::remove(autostart_file); + + util::debug("autostart file removed"); + } + } + + return 0; +} + +#endif + +void dispose(GObject* object) { + auto* self = EE_PREFERENCES_GENERAL(object); + + g_object_unref(self->settings); + +#ifdef ENABLE_LIBPORTAL + g_settings_unbind(self->enable_autostart, "active"); + g_settings_unbind(self->shutdown_on_window_close, "active"); +#endif + + util::debug("disposed"); + + G_OBJECT_CLASS(preferences_general_parent_class)->dispose(object); +} + +void preferences_general_class_init(PreferencesGeneralClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::preferences_general_ui); + + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, enable_autostart); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, process_all_inputs); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, process_all_outputs); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, theme_switch); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, autohide_popovers); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, shutdown_on_window_close); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, use_cubic_volumes); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, exclude_monitor_streams); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, inactivity_timeout); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, meters_update_interval); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, lv2ui_update_frequency); + gtk_widget_class_bind_template_child(widget_class, PreferencesGeneral, show_native_plugin_ui); +} + +void preferences_general_init(PreferencesGeneral* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->settings = g_settings_new(tags::app::id); + + prepare_spinbutton<"s">(self->inactivity_timeout); + prepare_spinbutton<"ms">(self->meters_update_interval); + prepare_spinbutton<"Hz">(self->lv2ui_update_frequency); + + // initializing some widgets + + gsettings_bind_widgets<"process-all-inputs", "process-all-outputs", "use-dark-theme", "shutdown-on-window-close", + "use-cubic-volumes", "autohide-popovers", "exclude-monitor-streams", "inactivity-timeout", + "meters-update-interval", "lv2ui-update-frequency", "show-native-plugin-ui">( + self->settings, self->process_all_inputs, self->process_all_outputs, self->theme_switch, + self->shutdown_on_window_close, self->use_cubic_volumes, self->autohide_popovers, self->exclude_monitor_streams, + self->inactivity_timeout, self->meters_update_interval, self->lv2ui_update_frequency, + self->show_native_plugin_ui); + +#ifdef ENABLE_LIBPORTAL + libportal::init(self->enable_autostart, self->shutdown_on_window_close); +#else + + gtk_switch_set_active(self->enable_autostart, + static_cast(std::filesystem::is_regular_file( + g_get_user_config_dir() + "/autostart/easyeffects-service.desktop"s))); + + g_signal_connect(self->enable_autostart, "state-set", G_CALLBACK(on_enable_autostart), nullptr); +#endif +} + +auto create() -> PreferencesGeneral* { + return static_cast(g_object_new(EE_TYPE_PREFERENCES_GENERAL, nullptr)); +} + +} // namespace ui::preferences::general diff --git a/src/preferences_spectrum.cpp b/src/preferences_spectrum.cpp new file mode 100644 index 0000000..f7538eb --- /dev/null +++ b/src/preferences_spectrum.cpp @@ -0,0 +1,213 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "preferences_spectrum.hpp" + +namespace ui::preferences::spectrum { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + std::vector gconnections; +}; + +struct _PreferencesSpectrum { + AdwPreferencesPage parent_instance; + + GtkSwitch *show, *fill, *show_bar_border, *rounded_corners, *dynamic_y_scale; + + GtkColorDialogButton *color_button, *axis_color_button; + + GtkDropDown* type; + + GtkSpinButton *n_points, *height, *line_width, *minimum_frequency, *maximum_frequency; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PreferencesSpectrum, preferences_spectrum, ADW_TYPE_PREFERENCES_PAGE) + +void on_spectrum_color_set(GtkColorDialogButton* button, GParamSpec* pspec, PreferencesSpectrum* self) { + auto* rgba = gtk_color_dialog_button_get_rgba(button); + + g_settings_set(self->settings, "color", "(dddd)", rgba->red, rgba->green, rgba->blue, rgba->alpha); +} + +void on_spectrum_axis_color_set(GtkColorDialogButton* button, GParamSpec* pspec, PreferencesSpectrum* self) { + auto* rgba = gtk_color_dialog_button_get_rgba(button); + + g_settings_set(self->settings, "color-axis-labels", "(dddd)", rgba->red, rgba->green, rgba->blue, rgba->alpha); +} + +void dispose(GObject* object) { + auto* self = EE_PREFERENCES_SPECTRUM(object); + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(preferences_spectrum_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_PREFERENCES_SPECTRUM(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(preferences_spectrum_parent_class)->finalize(object); +} + +void preferences_spectrum_class_init(PreferencesSpectrumClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::preferences_spectrum_ui); + + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, show); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, type); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, fill); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, n_points); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, line_width); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, height); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, show_bar_border); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, rounded_corners); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, dynamic_y_scale); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, color_button); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, axis_color_button); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, minimum_frequency); + gtk_widget_class_bind_template_child(widget_class, PreferencesSpectrum, maximum_frequency); + + gtk_widget_class_bind_template_callback(widget_class, on_spectrum_color_set); + gtk_widget_class_bind_template_callback(widget_class, on_spectrum_axis_color_set); +} + +void preferences_spectrum_init(PreferencesSpectrum* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->settings = g_settings_new(tags::schema::spectrum::id); + + // initializing some widgets + + auto color = util::gsettings_get_color(self->settings, "color"); + + gtk_color_dialog_button_set_rgba(self->color_button, &color); + + color = util::gsettings_get_color(self->settings, "color-axis-labels"); + + gtk_color_dialog_button_set_rgba(self->axis_color_button, &color); + + // connecting some widgets signals + + prepare_spinbuttons<"px">(self->height, self->line_width); + + g_signal_connect(self->minimum_frequency, "output", G_CALLBACK(+[](GtkSpinButton* button, gpointer user_data) { + return parse_spinbutton_output(button, "Hz"); + }), + nullptr); + + g_signal_connect(self->minimum_frequency, "input", + G_CALLBACK(+[](GtkSpinButton* button, gdouble* new_value, PreferencesSpectrum* self) { + const auto parse_result = parse_spinbutton_input(button, new_value); + + if (parse_result != GTK_INPUT_ERROR) { + const auto max_freq = + static_cast(g_settings_get_int(self->settings, "maximum-frequency")); + + if (const auto valid_min_freq = max_freq - 100.0; *new_value > valid_min_freq) { + *new_value = valid_min_freq; + } + } + + return parse_result; + }), + self); + + g_signal_connect(self->maximum_frequency, "output", G_CALLBACK(+[](GtkSpinButton* button, gpointer user_data) { + return parse_spinbutton_output(button, "Hz"); + }), + nullptr); + + g_signal_connect(self->maximum_frequency, "input", + G_CALLBACK(+[](GtkSpinButton* button, gdouble* new_value, PreferencesSpectrum* self) { + const auto parse_result = parse_spinbutton_input(button, new_value); + + if (parse_result != GTK_INPUT_ERROR) { + const auto min_freq = + static_cast(g_settings_get_int(self->settings, "minimum-frequency")); + + if (const auto valid_max_freq = min_freq + 100.0; *new_value < valid_max_freq) { + *new_value = valid_max_freq; + } + } + + return parse_result; + }), + self); + + // spectrum section gsettings bindings + + gsettings_bind_widgets<"show", "fill", "rounded-corners", "show-bar-border", "dynamic-y-scale", "n-points", "height", + "line-width", "minimum-frequency", "maximum-frequency">( + self->settings, self->show, self->fill, self->rounded_corners, self->show_bar_border, self->dynamic_y_scale, + self->n_points, self->height, self->line_width, self->minimum_frequency, self->maximum_frequency); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "type", self->type); + + // Spectrum gsettings signals connections + + self->data->gconnections.push_back(g_signal_connect( + self->settings, "changed::color", G_CALLBACK(+[](GSettings* settings, char* key, PreferencesSpectrum* self) { + auto color = util::gsettings_get_color(settings, key); + + gtk_color_dialog_button_set_rgba(self->color_button, &color); + }), + self)); + + self->data->gconnections.push_back( + g_signal_connect(self->settings, "changed::color-axis-labels", + G_CALLBACK(+[](GSettings* settings, char* key, PreferencesSpectrum* self) { + auto color = util::gsettings_get_color(settings, key); + + gtk_color_dialog_button_set_rgba(self->axis_color_button, &color); + }), + self)); +} + +auto create() -> PreferencesSpectrum* { + return static_cast(g_object_new(EE_TYPE_PREFERENCES_SPECTRUM, nullptr)); +} + +} // namespace ui::preferences::spectrum diff --git a/src/preferences_window.cpp b/src/preferences_window.cpp new file mode 100644 index 0000000..ee7b849 --- /dev/null +++ b/src/preferences_window.cpp @@ -0,0 +1,73 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "preferences_window.hpp" +#include "config.h" + +namespace ui::preferences::window { + +struct _PreferencesWindow { + AdwPreferencesWindow parent_instance; + + ui::preferences::general::PreferencesGeneral* page_general; + + ui::preferences::spectrum::PreferencesSpectrum* page_spectrum; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PreferencesWindow, preferences_window, ADW_TYPE_PREFERENCES_WINDOW) + +void dispose(GObject* object) { + auto* self = EE_PREFERENCES_WINDOW(object); + + gtk_window_set_icon_name(GTK_WINDOW(self), + IS_DEVEL_BUILD ? std::string(tags::app::id).append(".Devel").c_str() : tags::app::id); + + adw_preferences_window_remove(ADW_PREFERENCES_WINDOW(self), ADW_PREFERENCES_PAGE(self->page_general)); + adw_preferences_window_remove(ADW_PREFERENCES_WINDOW(self), ADW_PREFERENCES_PAGE(self->page_spectrum)); + + util::debug("disposed"); + + G_OBJECT_CLASS(preferences_window_parent_class)->dispose(object); +} + +void preferences_window_class_init(PreferencesWindowClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::preferences_window_ui); +} + +void preferences_window_init(PreferencesWindow* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->page_general = ui::preferences::general::create(); + self->page_spectrum = ui::preferences::spectrum::create(); + + adw_preferences_window_add(ADW_PREFERENCES_WINDOW(self), ADW_PREFERENCES_PAGE(self->page_general)); + adw_preferences_window_add(ADW_PREFERENCES_WINDOW(self), ADW_PREFERENCES_PAGE(self->page_spectrum)); +} + +auto create() -> PreferencesWindow* { + return static_cast(g_object_new(EE_TYPE_PREFERENCES_WINDOW, nullptr)); +} + +} // namespace ui::preferences::window diff --git a/src/presets_autoloading_holder.cpp b/src/presets_autoloading_holder.cpp new file mode 100644 index 0000000..3243aaf --- /dev/null +++ b/src/presets_autoloading_holder.cpp @@ -0,0 +1,61 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "presets_autoloading_holder.hpp" + +namespace ui::holders { + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PresetsAutoloadingHolder, presets_autoloading_holder, G_TYPE_OBJECT); + +void presets_autoloading_holder_finalize(GObject* object) { + auto* self = EE_PRESETS_AUTOLOADING_HOLDER(object); + + util::debug(self->data->device + ", " + self->data->preset_name + " finalized"); + + delete self->data; + + G_OBJECT_CLASS(presets_autoloading_holder_parent_class)->finalize(object); +} + +void presets_autoloading_holder_class_init(PresetsAutoloadingHolderClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = presets_autoloading_holder_finalize; +} + +void presets_autoloading_holder_init(PresetsAutoloadingHolder* self) { + self->data = new PresetsAutoLoadingData(); +} + +auto create(const std::string& device, + const std::string& device_description, + const std::string& device_profile, + const std::string& preset_name) -> PresetsAutoloadingHolder* { + auto* holder = static_cast(g_object_new(EE_TYPE_PRESETS_AUTOLOADING_HOLDER, nullptr)); + + holder->data->device = device; + holder->data->device_description = device_description; + holder->data->device_profile = device_profile; + holder->data->preset_name = preset_name; + + return holder; +} + +} // namespace ui::holders \ No newline at end of file diff --git a/src/presets_manager.cpp b/src/presets_manager.cpp new file mode 100644 index 0000000..fad31c1 --- /dev/null +++ b/src/presets_manager.cpp @@ -0,0 +1,943 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "presets_manager.hpp" + +PresetsManager::PresetsManager() + : user_config_dir(g_get_user_config_dir()), + user_presets_dir(user_config_dir + "/easyeffects/"), + user_input_dir(user_config_dir + "/easyeffects/input"), + user_output_dir(user_config_dir + "/easyeffects/output"), + autoload_input_dir(user_config_dir + "/easyeffects/autoload/input"), + autoload_output_dir(user_config_dir + "/easyeffects/autoload/output"), + settings(g_settings_new(tags::app::id)), + soe_settings(g_settings_new(tags::schema::id_output)), + sie_settings(g_settings_new(tags::schema::id_input)) { + // user presets directories + + create_user_directory(user_presets_dir); + create_user_directory(user_input_dir); + create_user_directory(user_output_dir); + create_user_directory(autoload_input_dir); + create_user_directory(autoload_output_dir); + + auto* gfile = g_file_new_for_path(user_output_dir.c_str()); + + user_output_monitor = g_file_monitor_directory(gfile, G_FILE_MONITOR_NONE, nullptr, nullptr); + + g_signal_connect(user_output_monitor, "changed", + G_CALLBACK(+[](GFileMonitor* monitor, GFile* file, GFile* other_file, GFileMonitorEvent event_type, + gpointer user_data) { + auto* self = static_cast(user_data); + + switch (event_type) { + case G_FILE_MONITOR_EVENT_CREATED: { + const auto preset_name = util::remove_filename_extension(g_file_get_basename(file)); + + self->user_output_preset_created.emit(preset_name); + + break; + } + case G_FILE_MONITOR_EVENT_DELETED: { + const auto preset_name = util::remove_filename_extension(g_file_get_basename(file)); + + self->user_output_preset_removed.emit(preset_name); + + break; + } + default: + break; + } + }), + this); + + g_object_unref(gfile); + + gfile = g_file_new_for_path(user_input_dir.c_str()); + + user_input_monitor = g_file_monitor_directory(gfile, G_FILE_MONITOR_NONE, nullptr, nullptr); + + g_signal_connect(user_input_monitor, "changed", + G_CALLBACK(+[](GFileMonitor* monitor, GFile* file, GFile* other_file, GFileMonitorEvent event_type, + gpointer user_data) { + auto* self = static_cast(user_data); + + switch (event_type) { + case G_FILE_MONITOR_EVENT_CREATED: { + const auto preset_name = util::remove_filename_extension(g_file_get_basename(file)); + + self->user_input_preset_created.emit(preset_name); + + break; + } + case G_FILE_MONITOR_EVENT_DELETED: { + const auto preset_name = util::remove_filename_extension(g_file_get_basename(file)); + + self->user_input_preset_removed.emit(preset_name); + + break; + } + default: + break; + } + }), + this); + + g_object_unref(gfile); + + gfile = g_file_new_for_path(autoload_input_dir.c_str()); + + autoload_input_monitor = g_file_monitor_directory(gfile, G_FILE_MONITOR_NONE, nullptr, nullptr); + + g_signal_connect(autoload_input_monitor, "changed", + G_CALLBACK(+[](GFileMonitor* monitor, GFile* file, GFile* other_file, GFileMonitorEvent event_type, + gpointer user_data) { + auto* self = static_cast(user_data); + + if (event_type == G_FILE_MONITOR_EVENT_CREATED || event_type == G_FILE_MONITOR_EVENT_DELETED) { + const auto profiles = self->get_autoload_profiles(PresetType::input); + + self->autoload_input_profiles_changed.emit(profiles); + } + }), + this); + + g_object_unref(gfile); + + gfile = g_file_new_for_path(autoload_output_dir.c_str()); + + autoload_output_monitor = g_file_monitor_directory(gfile, G_FILE_MONITOR_NONE, nullptr, nullptr); + + g_signal_connect(autoload_output_monitor, "changed", + G_CALLBACK(+[](GFileMonitor* monitor, GFile* file, GFile* other_file, GFileMonitorEvent event_type, + gpointer user_data) { + auto* self = static_cast(user_data); + + if (event_type == G_FILE_MONITOR_EVENT_CREATED || event_type == G_FILE_MONITOR_EVENT_DELETED) { + const auto profiles = self->get_autoload_profiles(PresetType::output); + + self->autoload_output_profiles_changed.emit(profiles); + } + }), + this); + + g_object_unref(gfile); +} + +PresetsManager::~PresetsManager() { + g_file_monitor_cancel(user_output_monitor); + g_file_monitor_cancel(user_input_monitor); + g_file_monitor_cancel(autoload_input_monitor); + g_file_monitor_cancel(autoload_output_monitor); + + g_object_unref(user_output_monitor); + g_object_unref(user_input_monitor); + g_object_unref(autoload_input_monitor); + g_object_unref(autoload_output_monitor); + g_object_unref(settings); + g_object_unref(sie_settings); + g_object_unref(soe_settings); + + util::debug("destroyed"); +} + +void PresetsManager::create_user_directory(const std::filesystem::path& path) { + if (std::filesystem::is_directory(path)) { + util::debug("user presets directory already exists: " + path.string()); + + return; + } + + if (std::filesystem::create_directories(path)) { + util::debug("user presets directory created: " + path.string()); + + return; + } + + util::warning("failed to create user presets directory: " + path.string()); +} + +auto PresetsManager::get_names(const PresetType& preset_type) -> std::vector { + const auto user_dir = (preset_type == PresetType::output) ? user_output_dir : user_input_dir; + + std::vector names; + std::filesystem::directory_iterator it = std::filesystem::directory_iterator{user_dir}; + + const auto vn = search_names(it); + names.insert(names.end(), vn.begin(), vn.end()); + + // removing duplicates + std::sort(names.begin(), names.end()); + names.erase(std::unique(names.begin(), names.end()), names.end()); + + return names; +} + +auto PresetsManager::search_names(std::filesystem::directory_iterator& it) -> std::vector { + std::vector names; + + try { + while (it != std::filesystem::directory_iterator{}) { + if (std::filesystem::is_regular_file(it->status())) { + if (it->path().extension().c_str() == json_ext) { + names.emplace_back(it->path().stem().c_str()); + } + } + + ++it; + } + } catch (const std::exception& e) { + util::warning(e.what()); + } + + return names; +} + +void PresetsManager::add(const PresetType& preset_type, const std::string& name) { + for (const auto& p : get_names(preset_type)) { + if (p == name) { + return; + } + } + + save_preset_file(preset_type, name); +} + +void PresetsManager::save_blocklist(const PresetType& preset_type, nlohmann::json& json) { + std::vector blocklist; + + switch (preset_type) { + case PresetType::output: { + const auto list = util::gchar_array_to_vector(g_settings_get_strv(soe_settings, "blocklist")); + + for (const auto& l : list) { + blocklist.push_back(l); + } + + json["output"]["blocklist"] = blocklist; + + break; + } + case PresetType::input: { + const auto list = util::gchar_array_to_vector(g_settings_get_strv(sie_settings, "blocklist")); + + for (const auto& l : list) { + blocklist.push_back(l); + } + + json["input"]["blocklist"] = blocklist; + + break; + } + } +} + +auto PresetsManager::load_blocklist(const PresetType& preset_type, const nlohmann::json& json) -> bool { + std::vector blocklist; + + switch (preset_type) { + case PresetType::input: { + try { + auto list = json.at("input").at("blocklist").get>(); + + g_settings_set_strv(sie_settings, "blocklist", util::make_gchar_pointer_vector(list).data()); + } catch (const nlohmann::json::exception& e) { + g_settings_reset(sie_settings, "blocklist"); + + notify_error(PresetError::blocklist_format); + + util::warning(e.what()); + + return false; + } catch (...) { + g_settings_reset(sie_settings, "blocklist"); + + notify_error(PresetError::blocklist_generic); + + return false; + } + + break; + } + case PresetType::output: { + try { + auto list = json.at("output").at("blocklist").get>(); + + g_settings_set_strv(soe_settings, "blocklist", util::make_gchar_pointer_vector(list).data()); + } catch (const nlohmann::json::exception& e) { + g_settings_reset(soe_settings, "blocklist"); + + notify_error(PresetError::blocklist_format); + + util::warning(e.what()); + + return false; + } catch (...) { + g_settings_reset(soe_settings, "blocklist"); + + notify_error(PresetError::blocklist_generic); + + return false; + } + + break; + } + } + + return true; +} + +void PresetsManager::save_preset_file(const PresetType& preset_type, const std::string& name) { + nlohmann::json json; + + std::filesystem::path output_file; + + save_blocklist(preset_type, json); + + switch (preset_type) { + case PresetType::output: { + const auto plugins = util::gchar_array_to_vector(g_settings_get_strv(soe_settings, "plugins")); + + std::vector list; + + list.reserve(plugins.size()); + + for (const auto& p : plugins) { + list.push_back(p); + } + + json["output"]["plugins_order"] = list; + + write_plugins_preset(preset_type, plugins, json); + + output_file = user_output_dir / std::filesystem::path{name + json_ext}; + + break; + } + case PresetType::input: { + const auto plugins = util::gchar_array_to_vector(g_settings_get_strv(sie_settings, "plugins")); + + std::vector list; + + list.reserve(plugins.size()); + + for (const auto& p : plugins) { + list.push_back(p); + } + + json["input"]["plugins_order"] = list; + + write_plugins_preset(preset_type, plugins, json); + + output_file = user_input_dir / std::filesystem::path{name + json_ext}; + + break; + } + } + + std::ofstream o(output_file.c_str()); + + o << std::setw(4) << json << std::endl; + + // std::cout << std::setw(4) << json << std::endl; + + util::debug("saved preset: " + output_file.string()); +} + +void PresetsManager::write_plugins_preset(const PresetType& preset_type, + const std::vector& plugins, + nlohmann::json& json) { + for (const auto& name : plugins) { + if (auto wrapper = create_wrapper(preset_type, name); wrapper != std::nullopt) { + if (wrapper.has_value()) { + wrapper.value()->write(json); + } + } + } +} + +void PresetsManager::remove(const PresetType& preset_type, const std::string& name) { + std::filesystem::path preset_file; + + const auto user_dir = (preset_type == PresetType::output) ? user_output_dir : user_input_dir; + + preset_file = user_dir / std::filesystem::path{name + json_ext}; + + if (std::filesystem::exists(preset_file)) { + std::filesystem::remove(preset_file); + + util::debug("removed preset: " + preset_file.string()); + } +} + +auto PresetsManager::load_preset_file(const PresetType& preset_type, const std::string& name) -> bool { + nlohmann::json json; + + std::vector plugins; + + std::vector conf_dirs; + + std::filesystem::path input_file; + + auto preset_found = false; + + // Load the plugin order based on the input/output pipeline. + switch (preset_type) { + case PresetType::output: { + conf_dirs.push_back(user_output_dir); + + for (const auto& dir : conf_dirs) { + input_file = dir / std::filesystem::path{name + json_ext}; + + if (std::filesystem::exists(input_file)) { + preset_found = true; + + break; + } + } + + if (preset_found) { + try { + std::ifstream is(input_file); + + is >> json; + + for (const auto& p : json.at("output").at("plugins_order").get>()) { + for (const auto& v : tags::plugin_name::list) { + if (p.starts_with(v)) { + /* + Old format presets do not have the instance id number in the filter names. They are equal to the + base name. + */ + + if (p != v) { + plugins.push_back(p); + } else { + plugins.push_back(p + "#0"); + } + + break; + } + } + } + + } catch (const nlohmann::json::exception& e) { + notify_error(PresetError::pipeline_format); + + util::warning(e.what()); + + return false; + } catch (...) { + notify_error(PresetError::pipeline_generic); + + return false; + } + + g_settings_set_strv(soe_settings, "plugins", util::make_gchar_pointer_vector(plugins).data()); + } else { + util::debug("can't find the preset " + name + " on the filesystem"); + + return false; + } + + break; + } + case PresetType::input: { + conf_dirs.push_back(user_input_dir); + + for (const auto& dir : conf_dirs) { + input_file = dir / std::filesystem::path{name + json_ext}; + + if (std::filesystem::exists(input_file)) { + preset_found = true; + + break; + } + } + + if (preset_found) { + try { + std::ifstream is(input_file); + + is >> json; + + for (const auto& p : json.at("input").at("plugins_order").get>()) { + for (const auto& v : tags::plugin_name::list) { + if (p.starts_with(v)) { + /* + Old format presets do not have the instance id number in the filter names. They are equal to the + base name. + */ + + if (p != v) { + plugins.push_back(p); + } else { + plugins.push_back(p + "#0"); + } + + break; + } + } + } + + } catch (const nlohmann::json::exception& e) { + notify_error(PresetError::pipeline_format); + + util::warning(e.what()); + + return false; + } catch (...) { + notify_error(PresetError::pipeline_generic); + + return false; + } + + g_settings_set_strv(sie_settings, "plugins", util::make_gchar_pointer_vector(plugins).data()); + } else { + util::debug("can't find the preset " + name + " on the filesystem"); + + return false; + } + + break; + } + } + + // After the plugin order list, load the blocklist and then apply the parameters of the loaded plugins. + if (load_blocklist(preset_type, json) && read_plugins_preset(preset_type, plugins, json)) { + util::debug("successfully loaded preset: " + input_file.string()); + + return true; + } + + return false; +} + +auto PresetsManager::read_plugins_preset(const PresetType& preset_type, + const std::vector& plugins, + const nlohmann::json& json) -> bool { + for (const auto& name : plugins) { + if (auto wrapper = create_wrapper(preset_type, name); wrapper != std::nullopt) { + try { + if (wrapper.has_value()) { + wrapper.value()->read(json); + } + } catch (const nlohmann::json::exception& e) { + notify_error(PresetError::plugin_format, name); + + util::warning(e.what()); + + return false; + } catch (...) { + notify_error(PresetError::plugin_generic, name); + + return false; + } + } + } + + return true; +} + +void PresetsManager::import(const PresetType& preset_type, const std::string& file_path) { + std::filesystem::path p{file_path}; + + if (!std::filesystem::is_regular_file(p)) { + util::warning(p.string() + " is not a file!"); + + return; + } + + if (p.extension().c_str() != json_ext) { + return; + } + + std::filesystem::path out_path; + + const auto user_dir = (preset_type == PresetType::output) ? user_output_dir : user_input_dir; + + out_path = user_dir / p.filename(); + + std::filesystem::copy_file(p, out_path, std::filesystem::copy_options::overwrite_existing); + + util::debug("imported preset to: " + out_path.string()); +} + +void PresetsManager::add_autoload(const PresetType& preset_type, + const std::string& preset_name, + const std::string& device_name, + const std::string& device_description, + const std::string& device_profile) { + nlohmann::json json; + + std::filesystem::path output_file; + + switch (preset_type) { + case PresetType::output: + output_file = autoload_output_dir / std::filesystem::path{device_name + ":" + device_profile + json_ext}; + break; + case PresetType::input: + output_file = autoload_input_dir / std::filesystem::path{device_name + ":" + device_profile + json_ext}; + break; + } + + std::ofstream o(output_file.c_str()); + + json["device"] = device_name; + json["device-description"] = device_description; + json["device-profile"] = device_profile; + json["preset-name"] = preset_name; + + o << std::setw(4) << json << std::endl; + + util::debug("added autoload preset file: " + output_file.string()); +} + +void PresetsManager::remove_autoload(const PresetType& preset_type, + const std::string& preset_name, + const std::string& device_name, + const std::string& device_profile) { + std::filesystem::path input_file; + + switch (preset_type) { + case PresetType::output: + input_file = autoload_output_dir / std::filesystem::path{device_name + ":" + device_profile + json_ext}; + break; + case PresetType::input: + input_file = autoload_input_dir / std::filesystem::path{device_name + ":" + device_profile + json_ext}; + break; + } + + if (!std::filesystem::is_regular_file(input_file)) { + return; + } + + nlohmann::json json; + + std::ifstream is(input_file); + + is >> json; + + if (preset_name == json.value("preset-name", "") && device_profile == json.value("device-profile", "")) { + std::filesystem::remove(input_file); + + util::debug("removed autoload: " + input_file.string()); + } +} + +auto PresetsManager::find_autoload(const PresetType& preset_type, + const std::string& device_name, + const std::string& device_profile) -> std::string { + std::filesystem::path input_file; + + switch (preset_type) { + case PresetType::output: + input_file = autoload_output_dir / std::filesystem::path{device_name + ":" + device_profile + json_ext}; + break; + case PresetType::input: + input_file = autoload_input_dir / std::filesystem::path{device_name + ":" + device_profile + json_ext}; + break; + } + + if (!std::filesystem::is_regular_file(input_file)) { + return ""; + } + + nlohmann::json json; + + std::ifstream is(input_file); + + is >> json; + + return json.value("preset-name", ""); +} + +void PresetsManager::autoload(const PresetType& preset_type, + const std::string& device_name, + const std::string& device_profile) { + const auto name = find_autoload(preset_type, device_name, device_profile); + + if (name.empty()) { + return; + } + + util::debug("autoloading preset " + name + " for device " + device_name); + + const auto* key = (preset_type == PresetType::output) ? "last-used-output-preset" : "last-used-input-preset"; + + if (load_preset_file(preset_type, name)) { + g_settings_set_string(settings, key, name.c_str()); + } else { + g_settings_reset(settings, key); + } +} + +auto PresetsManager::get_autoload_profiles(const PresetType& preset_type) -> std::vector { + std::filesystem::path autoload_dir; + std::vector list; + + switch (preset_type) { + case PresetType::output: + autoload_dir = autoload_output_dir; + + break; + case PresetType::input: + autoload_dir = autoload_input_dir; + break; + } + + auto it = std::filesystem::directory_iterator{autoload_dir}; + + try { + while (it != std::filesystem::directory_iterator{}) { + if (std::filesystem::is_regular_file(it->status())) { + if (it->path().extension().c_str() == json_ext) { + nlohmann::json json; + + std::ifstream is(autoload_dir / it->path()); + + is >> json; + + list.push_back(json); + } + } + + ++it; + } + + return list; + } catch (const std::exception& e) { + util::warning(e.what()); + + return list; + } +} + +auto PresetsManager::preset_file_exists(const PresetType& preset_type, const std::string& name) -> bool { + std::filesystem::path input_file; + std::vector conf_dirs; + + switch (preset_type) { + case PresetType::output: { + conf_dirs.push_back(user_output_dir); + + for (const auto& dir : conf_dirs) { + input_file = dir / std::filesystem::path{name + json_ext}; + + if (std::filesystem::exists(input_file)) { + return true; + } + } + + break; + } + case PresetType::input: { + conf_dirs.push_back(user_input_dir); + + for (const auto& dir : conf_dirs) { + input_file = dir / std::filesystem::path{name + json_ext}; + + if (std::filesystem::exists(input_file)) { + return true; + } + } + + break; + } + } + + return false; +} + +void PresetsManager::notify_error(const PresetError& preset_error, const std::string& plugin_name) { + std::string plugin_translated; + + try { + plugin_translated = tags::plugin_name::get_translated().at(plugin_name); + } catch (...) { + } + + switch (preset_error) { + case PresetError::blocklist_format: { + util::warning( + "A parsing error occurred while trying to load the blocklist from the preset. The file could be invalid " + "or corrupted. Please check its content."); + + preset_load_error.emit(_("Preset Not Loaded Correctly"), _("Wrong Format in Excluded Apps List")); + + break; + } + case PresetError::blocklist_generic: { + util::warning("A generic error occurred while trying to load the blocklist from the preset."); + + preset_load_error.emit(_("Preset Not Loaded Correctly"), _("Generic Error While Loading Excluded Apps List")); + + break; + } + case PresetError::pipeline_format: { + util::warning( + "A parsing error occurred while trying to load the pipeline from the preset. The file could be invalid " + "or corrupted. Please check its content."); + + preset_load_error.emit(_("Preset Not Loaded Correctly"), _("Wrong Format in Effects List")); + + break; + } + case PresetError::pipeline_generic: { + util::warning("A generic error occurred while trying to load the pipeline from the preset."); + + preset_load_error.emit(_("Preset Not Loaded Correctly"), _("Generic Error While Loading Effects List")); + + break; + } + case PresetError::plugin_format: { + util::warning("A parsing error occurred while trying to load the " + plugin_name + + " plugin from the preset. The file could be invalid or " + "corrupted. Please check its content."); + + preset_load_error.emit(_("Preset Not Loaded Correctly"), + plugin_translated + ": " + _("One or More Parameters Have a Wrong Format")); + + break; + } + case PresetError::plugin_generic: { + util::warning("A generic error occurred while trying to load the " + plugin_name + " plugin from the preset."); + + preset_load_error.emit(_("Preset Not Loaded Correctly"), + plugin_translated + ": " + _("Generic Error While Loading The Effect")); + + break; + } + default: + break; + } +} + +auto PresetsManager::create_wrapper(const PresetType& preset_type, std::string_view filter_name) + -> std::optional> { + auto instance_id = tags::plugin_name::get_id(std::string(filter_name)); + + if (filter_name.starts_with(tags::plugin_name::autogain)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::bass_enhancer)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::bass_loudness)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::compressor)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::convolver)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::crossfeed)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::crystalizer)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::deesser)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::delay)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::echo_canceller)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::equalizer)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::exciter)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::expander)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::filter)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::gate)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::level_meter)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::limiter)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::loudness)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::maximizer)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::multiband_compressor)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::multiband_gate)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::pitch)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::reverb)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::rnnoise)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::speex)) { + return std::make_unique(preset_type, instance_id); + } + + if (filter_name.starts_with(tags::plugin_name::stereo_tools)) { + return std::make_unique(preset_type, instance_id); + } + + util::warning("The filter name " + std::string(filter_name) + " base name could not be recognized"); + + return std::nullopt; +} diff --git a/src/presets_menu.cpp b/src/presets_menu.cpp new file mode 100644 index 0000000..b0cb77c --- /dev/null +++ b/src/presets_menu.cpp @@ -0,0 +1,523 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "presets_menu.hpp" + +namespace ui::presets_menu { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + app::Application* application; + + PresetType preset_type; + + std::vector connections; + + std::vector gconnections; +}; + +struct _PresetsMenu { + GtkPopover parent_instance; + + AdwViewStack* stack; + + GtkScrolledWindow* scrolled_window; + + GtkListView* listview; + + GtkText* name; + + GtkLabel* last_used_name; + + GtkStringList* string_list; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(PresetsMenu, presets_menu, GTK_TYPE_POPOVER) + +void create_preset(PresetsMenu* self, GtkButton* button) { + auto name = std::string(g_utf8_make_valid(gtk_editable_get_text(GTK_EDITABLE(self->name)), -1)); + + if (name.empty()) { + return; + } + + gtk_editable_set_text(GTK_EDITABLE(self->name), ""); + + // Truncate if longer than 100 characters + + if (name.size() > 100U) { + name.resize(100U); + } + + if (name.find_first_of("\\/") != std::string::npos) { + util::debug(" name " + name + " has illegal file name characters. Aborting preset creation!"); + + return; + } + + self->data->application->presets_manager->add(self->data->preset_type, name); +} + +void import_preset(PresetsMenu* self) { + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->data->application)); + + auto* dialog = gtk_file_dialog_new(); + + gtk_file_dialog_set_title(dialog, _("Import Preset")); + gtk_file_dialog_set_accept_label(dialog, _("Open")); + + auto* init_folder = g_file_new_for_path(SYSTEM_PRESETS_DIR); + + gtk_file_dialog_set_initial_folder(dialog, init_folder); + + g_object_unref(init_folder); + + GListStore* filters = g_list_store_new(GTK_TYPE_FILE_FILTER); + + auto* filter = gtk_file_filter_new(); + + gtk_file_filter_add_pattern(filter, "*.json"); + gtk_file_filter_set_name(filter, _("Presets")); + + g_list_store_append(filters, filter); + + g_object_unref(filter); + + gtk_file_dialog_set_filters(dialog, G_LIST_MODEL(filters)); + + g_object_unref(filters); + + gtk_file_dialog_open_multiple( + dialog, active_window, nullptr, + +[](GObject* source_object, GAsyncResult* result, gpointer user_data) { + auto* self = static_cast(user_data); + auto* dialog = GTK_FILE_DIALOG(source_object); + + auto* files_list = gtk_file_dialog_open_multiple_finish(dialog, result, nullptr); + + if (files_list == nullptr) { + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(files_list); n++) { + auto* file = static_cast(g_list_model_get_item(files_list, n)); + auto* path = g_file_get_path(file); + + if (self->data->preset_type == PresetType::output) { + self->data->application->presets_manager->import(PresetType::output, path); + } else if (self->data->preset_type == PresetType::input) { + self->data->application->presets_manager->import(PresetType::input, path); + } + + g_free(path); + } + + g_object_unref(files_list); + }, + self); +} + +template +void setup_listview(PresetsMenu* self, GtkListView* listview, GtkStringList* string_list) { + auto* factory = gtk_signal_list_item_factory_new(); + + // setting the factory callbacks + + g_signal_connect( + factory, "setup", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PresetsMenu* self) { + auto builder = gtk_builder_new_from_resource(tags::resources::preset_row_ui); + + auto* top_box = gtk_builder_get_object(builder, "top_box"); + auto* apply = gtk_builder_get_object(builder, "apply"); + auto* save = gtk_builder_get_object(builder, "save"); + auto* remove = gtk_builder_get_object(builder, "remove"); + + auto* confirmation_box = gtk_builder_get_object(builder, "confirmation_box"); + auto* confirmation_label = gtk_builder_get_object(builder, "confirmation_label"); + auto* confirmation_yes = gtk_builder_get_object(builder, "confirmation_yes"); + auto* confirmation_no = gtk_builder_get_object(builder, "confirmation_no"); + + g_object_set_data(G_OBJECT(item), "name", gtk_builder_get_object(builder, "name")); + g_object_set_data(G_OBJECT(item), "apply", apply); + g_object_set_data(G_OBJECT(item), "confirmation_yes", confirmation_yes); + + g_object_set_data(G_OBJECT(save), "confirmation_box", confirmation_box); + g_object_set_data(G_OBJECT(save), "confirmation_label", confirmation_label); + g_object_set_data(G_OBJECT(save), "confirmation_yes", confirmation_yes); + + g_object_set_data(G_OBJECT(remove), "confirmation_box", confirmation_box); + g_object_set_data(G_OBJECT(remove), "confirmation_label", confirmation_label); + g_object_set_data(G_OBJECT(remove), "confirmation_yes", confirmation_yes); + + g_object_set_data(G_OBJECT(confirmation_yes), "confirmation_box", confirmation_box); + g_object_set_data(G_OBJECT(confirmation_yes), "confirmation_label", confirmation_label); + + g_object_set_data(G_OBJECT(confirmation_no), "confirmation_label", confirmation_label); + + gtk_list_item_set_activatable(item, 0); + gtk_list_item_set_child(item, GTK_WIDGET(top_box)); + + g_signal_connect( + apply, "clicked", G_CALLBACK(+[](GtkButton* button, PresetsMenu* self) { + if (auto* string_object = GTK_STRING_OBJECT(g_object_get_data(G_OBJECT(button), "string-object")); + string_object != nullptr) { + auto* preset_name = gtk_string_object_get_string(string_object); + + if constexpr (preset_type == PresetType::output) { + if (self->data->application->presets_manager->load_preset_file(PresetType::output, preset_name)) { + g_settings_set_string(self->settings, "last-used-output-preset", preset_name); + } else { + g_settings_reset(self->settings, "last-used-output-preset"); + } + } else if constexpr (preset_type == PresetType::input) { + if (self->data->application->presets_manager->load_preset_file(PresetType::input, preset_name)) { + g_settings_set_string(self->settings, "last-used-input-preset", preset_name); + } else { + g_settings_reset(self->settings, "last-used-input-preset"); + } + } + } + }), + self); + + g_signal_connect( + save, "clicked", G_CALLBACK(+[](GtkButton* button, PresetsMenu* self) { + auto* confirmation_box = static_cast(g_object_get_data(G_OBJECT(button), "confirmation_box")); + + auto* confirmation_label = + static_cast(g_object_get_data(G_OBJECT(button), "confirmation_label")); + + auto* confirmation_yes = static_cast(g_object_get_data(G_OBJECT(button), "confirmation_yes")); + + gtk_label_set_text(confirmation_label, _("Save?")); + + gtk_widget_add_css_class(GTK_WIDGET(confirmation_label), "warning"); + + gtk_widget_set_visible(GTK_WIDGET(confirmation_box), 1); + + g_object_set_data(G_OBJECT(confirmation_yes), "operation", GUINT_TO_POINTER(0)); + }), + self); + + g_signal_connect( + remove, "clicked", G_CALLBACK(+[](GtkButton* button, PresetsMenu* self) { + auto* confirmation_box = static_cast(g_object_get_data(G_OBJECT(button), "confirmation_box")); + + auto* confirmation_label = + static_cast(g_object_get_data(G_OBJECT(button), "confirmation_label")); + + auto* confirmation_yes = static_cast(g_object_get_data(G_OBJECT(button), "confirmation_yes")); + + gtk_label_set_text(confirmation_label, _("Delete?")); + + gtk_widget_add_css_class(GTK_WIDGET(confirmation_label), "error"); + + gtk_widget_set_visible(GTK_WIDGET(confirmation_box), 1); + + g_object_set_data(G_OBJECT(confirmation_yes), "operation", GUINT_TO_POINTER(1)); + }), + self); + + g_signal_connect(confirmation_no, "clicked", G_CALLBACK(+[](GtkButton* button, GtkBox* box) { + gtk_widget_set_visible(GTK_WIDGET(box), 0); + + auto* confirmation_label = + static_cast(g_object_get_data(G_OBJECT(button), "confirmation_label")); + + gtk_widget_remove_css_class(GTK_WIDGET(confirmation_label), "warning"); + gtk_widget_remove_css_class(GTK_WIDGET(confirmation_label), "error"); + }), + confirmation_box); + + g_signal_connect( + confirmation_yes, "clicked", G_CALLBACK(+[](GtkButton* button, PresetsMenu* self) { + if (auto* string_object = GTK_STRING_OBJECT(g_object_get_data(G_OBJECT(button), "string-object")); + string_object != nullptr) { + auto* preset_name = gtk_string_object_get_string(string_object); + + uint operation = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(button), "operation")); + + auto* confirmation_label = + static_cast(g_object_get_data(G_OBJECT(button), "confirmation_label")); + + switch (operation) { + case 0: { // save + if constexpr (preset_type == PresetType::output) { + self->data->application->presets_manager->save_preset_file(PresetType::output, preset_name); + } else if constexpr (preset_type == PresetType::input) { + self->data->application->presets_manager->save_preset_file(PresetType::input, preset_name); + } + + gtk_widget_remove_css_class(GTK_WIDGET(confirmation_label), "warning"); + + break; + } + case 1: { // delete + if constexpr (preset_type == PresetType::output) { + self->data->application->presets_manager->remove(PresetType::output, preset_name); + } else if constexpr (preset_type == PresetType::input) { + self->data->application->presets_manager->remove(PresetType::input, preset_name); + } + + gtk_widget_remove_css_class(GTK_WIDGET(confirmation_label), "error"); + + break; + } + } + } + + auto* confirmation_box = static_cast(g_object_get_data(G_OBJECT(button), "confirmation_box")); + + gtk_widget_set_visible(GTK_WIDGET(confirmation_box), 0); + }), + self); + + g_object_unref(builder); + }), + self); + + g_signal_connect( + factory, "bind", G_CALLBACK(+[](GtkSignalListItemFactory* factory, GtkListItem* item, PresetsMenu* self) { + auto* label = static_cast(g_object_get_data(G_OBJECT(item), "name")); + auto* apply = static_cast(g_object_get_data(G_OBJECT(item), "apply")); + auto* confirmation_yes = static_cast(g_object_get_data(G_OBJECT(item), "confirmation_yes")); + + auto* string_object = GTK_STRING_OBJECT(gtk_list_item_get_item(item)); + + g_object_set_data(G_OBJECT(apply), "string-object", string_object); + g_object_set_data(G_OBJECT(confirmation_yes), "string-object", string_object); + + auto* name = gtk_string_object_get_string(string_object); + + gtk_label_set_text(label, name); + }), + self); + + gtk_list_view_set_factory(listview, factory); + + g_object_unref(factory); + + for (const auto& name : self->data->application->presets_manager->get_names(preset_type)) { + gtk_string_list_append(string_list, name.c_str()); + } +} + +void setup(PresetsMenu* self, app::Application* application, PresetType preset_type) { + self->data->application = application; + self->data->preset_type = preset_type; + + auto add_to_list = [=](const std::string& preset_name) { + if (preset_name.empty()) { + util::warning("can't retrieve information about the preset file"); + + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->string_list)); n++) { + if (preset_name == gtk_string_list_get_string(self->string_list, n)) { + return; + } + } + + gtk_string_list_append(self->string_list, preset_name.c_str()); + }; + + auto remove_from_list = [=](const std::string& preset_name) { + if (preset_name.empty()) { + util::warning("can't retrieve information about the preset file"); + + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->string_list)); n++) { + if (preset_name == gtk_string_list_get_string(self->string_list, n)) { + gtk_string_list_remove(self->string_list, n); + + return; + } + } + }; + + if (preset_type == PresetType::output) { + setup_listview(self, self->listview, self->string_list); + + self->data->connections.push_back( + self->data->application->presets_manager->user_output_preset_created.connect(add_to_list)); + + self->data->connections.push_back( + self->data->application->presets_manager->user_output_preset_removed.connect(remove_from_list)); + + self->data->gconnections.push_back( + g_signal_connect(self->settings, "changed::last-used-output-preset", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + gtk_label_set_text(self->last_used_name, util::gsettings_get_string(settings, key).c_str()); + }), + self)); + + gtk_label_set_text(self->last_used_name, + util::gsettings_get_string(self->settings, "last-used-output-preset").c_str()); + + // reset last used name label + + const auto names_output = self->data->application->presets_manager->get_names(PresetType::output); + + if (names_output.empty()) { + g_settings_set_string(self->settings, "last-used-output-preset", _("Presets")); + + return; + } + + for (const auto& name : names_output) { + if (name == util::gsettings_get_string(self->settings, "last-used-output-preset")) { + return; + } + } + + g_settings_set_string(self->settings, "last-used-output-preset", _("Presets")); + + } else if (preset_type == PresetType::input) { + setup_listview(self, self->listview, self->string_list); + + self->data->connections.push_back( + self->data->application->presets_manager->user_input_preset_created.connect(add_to_list)); + + self->data->connections.push_back( + self->data->application->presets_manager->user_input_preset_removed.connect(remove_from_list)); + + self->data->gconnections.push_back( + g_signal_connect(self->settings, "changed::last-used-input-preset", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + gtk_label_set_text(self->last_used_name, util::gsettings_get_string(settings, key).c_str()); + }), + self)); + + gtk_label_set_text(self->last_used_name, + util::gsettings_get_string(self->settings, "last-used-input-preset").c_str()); + + // reset last used name label + + const auto names_input = self->data->application->presets_manager->get_names(PresetType::input); + + if (names_input.empty()) { + g_settings_set_string(self->settings, "last-used-input-preset", _("Presets")); + + return; + } + + for (const auto& name : names_input) { + if (name == util::gsettings_get_string(self->settings, "last-used-input-preset")) { + return; + } + } + + g_settings_set_string(self->settings, "last-used-input-preset", _("Presets")); + } +} + +void show(GtkWidget* widget) { + auto* self = EE_PRESETS_MENU(widget); + + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->data->application)); + + auto active_window_height = gtk_widget_get_height(GTK_WIDGET(active_window)); + + const int menu_height = static_cast(0.5F * static_cast(active_window_height)); + + gtk_scrolled_window_set_max_content_height(self->scrolled_window, menu_height); + + GTK_WIDGET_CLASS(presets_menu_parent_class)->show(widget); +} + +void dispose(GObject* object) { + auto* self = EE_PRESETS_MENU(object); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(presets_menu_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_PRESETS_MENU(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(presets_menu_parent_class)->finalize(object); +} + +void presets_menu_class_init(PresetsMenuClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + widget_class->show = show; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::presets_menu_ui); + + gtk_widget_class_bind_template_child(widget_class, PresetsMenu, string_list); + + gtk_widget_class_bind_template_child(widget_class, PresetsMenu, scrolled_window); + gtk_widget_class_bind_template_child(widget_class, PresetsMenu, listview); + gtk_widget_class_bind_template_child(widget_class, PresetsMenu, name); + gtk_widget_class_bind_template_child(widget_class, PresetsMenu, last_used_name); + + gtk_widget_class_bind_template_callback(widget_class, create_preset); + gtk_widget_class_bind_template_callback(widget_class, import_preset); +} + +void presets_menu_init(PresetsMenu* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + self->settings = g_settings_new(tags::app::id); +} + +auto create() -> PresetsMenu* { + return static_cast(g_object_new(EE_TYPE_PRESETS_MENU, nullptr)); +} + +} // namespace ui::presets_menu diff --git a/src/resampler.cpp b/src/resampler.cpp new file mode 100644 index 0000000..f47ba11 --- /dev/null +++ b/src/resampler.cpp @@ -0,0 +1,32 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "resampler.hpp" + +Resampler::Resampler(const int& input_rate, const int& output_rate) : output(1, 0) { + resample_ratio = static_cast(output_rate) / static_cast(input_rate); + + src_state = src_new(SRC_SINC_FASTEST, 1, nullptr); +} + +Resampler::~Resampler() { + if (src_state != nullptr) { + src_delete(src_state); + } +} diff --git a/src/reverb.cpp b/src/reverb.cpp new file mode 100644 index 0000000..56ae3cf --- /dev/null +++ b/src/reverb.cpp @@ -0,0 +1,110 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "reverb.hpp" + +Reverb::Reverb(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::reverb, tags::plugin_package::calf, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://calf.sourceforge.net/plugins/Reverb"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://calf.sourceforge.net/plugins/Reverb is not installed"); + } + + lv2_wrapper->bind_key_double<"decay_time", "decay-time">(settings); + + lv2_wrapper->bind_key_double<"hf_damp", "hf-damp">(settings); + + lv2_wrapper->bind_key_double<"diffusion", "diffusion">(settings); + + lv2_wrapper->bind_key_double<"predelay", "predelay">(settings); + + lv2_wrapper->bind_key_double<"bass_cut", "bass-cut">(settings); + + lv2_wrapper->bind_key_double<"treble_cut", "treble-cut">(settings); + + lv2_wrapper->bind_key_enum<"room_size", "room-size">(settings); + + // The following controls can assume -inf + lv2_wrapper->bind_key_double_db<"amount", "amount", false>(settings); + + lv2_wrapper->bind_key_double_db<"dry", "dry", false>(settings); + + setup_input_output_gain(); +} + +Reverb::~Reverb() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void Reverb::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void Reverb::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto Reverb::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/reverb_preset.cpp b/src/reverb_preset.cpp new file mode 100644 index 0000000..6ffe609 --- /dev/null +++ b/src/reverb_preset.cpp @@ -0,0 +1,81 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "reverb_preset.hpp" + +ReverbPreset::ReverbPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::reverb::id, + tags::schema::reverb::input_path, + tags::schema::reverb::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::reverb).append("#").append(util::to_string(index)); +} + +void ReverbPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["room-size"] = util::gsettings_get_string(settings, "room-size"); + + json[section][instance_name]["decay-time"] = g_settings_get_double(settings, "decay-time"); + + json[section][instance_name]["hf-damp"] = g_settings_get_double(settings, "hf-damp"); + + json[section][instance_name]["diffusion"] = g_settings_get_double(settings, "diffusion"); + + json[section][instance_name]["amount"] = g_settings_get_double(settings, "amount"); + + json[section][instance_name]["dry"] = g_settings_get_double(settings, "dry"); + + json[section][instance_name]["predelay"] = g_settings_get_double(settings, "predelay"); + + json[section][instance_name]["bass-cut"] = g_settings_get_double(settings, "bass-cut"); + + json[section][instance_name]["treble-cut"] = g_settings_get_double(settings, "treble-cut"); +} + +void ReverbPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "room-size", "room-size"); + + update_key(json.at(section).at(instance_name), settings, "decay-time", "decay-time"); + + update_key(json.at(section).at(instance_name), settings, "hf-damp", "hf-damp"); + + update_key(json.at(section).at(instance_name), settings, "diffusion", "diffusion"); + + update_key(json.at(section).at(instance_name), settings, "amount", "amount"); + + update_key(json.at(section).at(instance_name), settings, "dry", "dry"); + + update_key(json.at(section).at(instance_name), settings, "predelay", "predelay"); + + update_key(json.at(section).at(instance_name), settings, "bass-cut", "bass-cut"); + + update_key(json.at(section).at(instance_name), settings, "treble-cut", "treble-cut"); +} diff --git a/src/reverb_ui.cpp b/src/reverb_ui.cpp new file mode 100644 index 0000000..89280b4 --- /dev/null +++ b/src/reverb_ui.cpp @@ -0,0 +1,300 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "reverb_ui.hpp" + +namespace ui::reverb_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr reverb; + + std::vector connections; + + std::vector gconnections; +}; + +struct _ReverbBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkDropDown* room_size; + + GtkSpinButton *predelay, *decay_time, *diffusion, *dry, *wet, *hf_damp, *bass_cut, *treble_cut; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(ReverbBox, reverb_box, GTK_TYPE_BOX) + +void on_reset(ReverbBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void on_preset_room(ReverbBox* self, GtkButton* btn) { + g_settings_set_double(self->settings, "decay-time", 0.445945); + g_settings_set_double(self->settings, "hf-damp", 5508.46); + g_settings_set_enum(self->settings, "room-size", 4); + g_settings_set_double(self->settings, "diffusion", 0.54); + g_settings_set_double(self->settings, "amount", util::linear_to_db(0.469761)); + g_settings_set_double(self->settings, "dry", util::linear_to_db(1.0)); + g_settings_set_double(self->settings, "predelay", 25.0); + g_settings_set_double(self->settings, "bass-cut", 257.65); + g_settings_set_double(self->settings, "treble-cut", 20000.0); +} + +void on_preset_empty_walls(ReverbBox* self, GtkButton* btn) { + g_settings_set_double(self->settings, "decay-time", 0.505687); + g_settings_set_double(self->settings, "hf-damp", 3971.64); + g_settings_set_enum(self->settings, "room-size", 4); + g_settings_set_double(self->settings, "diffusion", 0.17); + g_settings_set_double(self->settings, "amount", util::linear_to_db(0.198884)); + g_settings_set_double(self->settings, "dry", util::linear_to_db(1.0)); + g_settings_set_double(self->settings, "predelay", 13.0); + g_settings_set_double(self->settings, "bass-cut", 240.453); + g_settings_set_double(self->settings, "treble-cut", 3303.47); +} + +void on_preset_ambience(ReverbBox* self, GtkButton* btn) { + g_settings_set_double(self->settings, "decay-time", 1.10354); + g_settings_set_double(self->settings, "hf-damp", 2182.58); + g_settings_set_enum(self->settings, "room-size", 4); + g_settings_set_double(self->settings, "diffusion", 0.69); + g_settings_set_double(self->settings, "amount", util::linear_to_db(0.291183)); + g_settings_set_double(self->settings, "dry", util::linear_to_db(1.0)); + g_settings_set_double(self->settings, "predelay", 6.5); + g_settings_set_double(self->settings, "bass-cut", 514.079); + g_settings_set_double(self->settings, "treble-cut", 4064.15); +} + +void on_preset_large_empty_hall(ReverbBox* self, GtkButton* btn) { + g_settings_set_double(self->settings, "decay-time", 2.00689); + g_settings_set_double(self->settings, "hf-damp", 20000.0); + g_settings_set_double(self->settings, "amount", util::linear_to_db(0.366022)); + g_settings_reset(self->settings, "room-size"); + g_settings_reset(self->settings, "diffusion"); + g_settings_reset(self->settings, "dry"); + g_settings_reset(self->settings, "predelay"); + g_settings_reset(self->settings, "bass-cut"); + g_settings_reset(self->settings, "treble-cut"); +} + +void on_preset_disco(ReverbBox* self, GtkButton* btn) { + g_settings_set_double(self->settings, "decay-time", 1.0); + g_settings_set_double(self->settings, "hf-damp", 3396.49); + g_settings_set_double(self->settings, "amount", util::linear_to_db(0.269807)); + g_settings_reset(self->settings, "room-size"); + g_settings_reset(self->settings, "diffusion"); + g_settings_reset(self->settings, "dry"); + g_settings_reset(self->settings, "predelay"); + g_settings_reset(self->settings, "bass-cut"); + g_settings_reset(self->settings, "treble-cut"); +} + +void on_preset_large_occupied_hall(ReverbBox* self, GtkButton* btn) { + g_settings_set_double(self->settings, "decay-time", 1.45397); + g_settings_set_double(self->settings, "hf-damp", 9795.58); + g_settings_set_double(self->settings, "amount", util::linear_to_db(0.184284)); + g_settings_reset(self->settings, "room-size"); + g_settings_reset(self->settings, "diffusion"); + g_settings_reset(self->settings, "dry"); + g_settings_reset(self->settings, "predelay"); + g_settings_reset(self->settings, "bass-cut"); + g_settings_reset(self->settings, "treble-cut"); +} + +void setup(ReverbBox* self, std::shared_ptr reverb, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->reverb = reverb; + + self->settings = g_settings_new_with_path(tags::schema::reverb::id, schema_path.c_str()); + + reverb->set_post_messages(true); + + self->data->connections.push_back(reverb->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(reverb->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->reverb->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "amount", gtk_spin_button_get_adjustment(self->wet), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "predelay", gtk_spin_button_get_adjustment(self->predelay), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "decay-time", gtk_spin_button_get_adjustment(self->decay_time), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "diffusion", gtk_spin_button_get_adjustment(self->diffusion), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "dry", gtk_spin_button_get_adjustment(self->dry), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "hf-damp", gtk_spin_button_get_adjustment(self->hf_damp), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "bass-cut", gtk_spin_button_get_adjustment(self->bass_cut), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "treble-cut", gtk_spin_button_get_adjustment(self->treble_cut), "value", + G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "room-size", self->room_size); +} + +void dispose(GObject* object) { + auto* self = EE_REVERB_BOX(object); + + self->data->reverb->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(reverb_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_REVERB_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(reverb_box_parent_class)->finalize(object); +} + +void reverb_box_class_init(ReverbBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::reverb_ui); + + gtk_widget_class_bind_template_child(widget_class, ReverbBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, ReverbBox, room_size); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, predelay); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, decay_time); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, diffusion); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, dry); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, wet); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, hf_damp); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, bass_cut); + gtk_widget_class_bind_template_child(widget_class, ReverbBox, treble_cut); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_preset_room); + gtk_widget_class_bind_template_callback(widget_class, on_preset_empty_walls); + gtk_widget_class_bind_template_callback(widget_class, on_preset_ambience); + gtk_widget_class_bind_template_callback(widget_class, on_preset_large_empty_hall); + gtk_widget_class_bind_template_callback(widget_class, on_preset_disco); + gtk_widget_class_bind_template_callback(widget_class, on_preset_large_occupied_hall); +} + +void reverb_box_init(ReverbBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"Hz">(self->hf_damp, self->bass_cut, self->treble_cut); + + prepare_spinbuttons<"s">(self->decay_time); + + prepare_spinbuttons<"ms">(self->predelay); + + prepare_spinbuttons<"">(self->diffusion); + + // These spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->wet, self->dry); +} + +auto create() -> ReverbBox* { + return static_cast(g_object_new(EE_TYPE_REVERB_BOX, nullptr)); +} + +} // namespace ui::reverb_box diff --git a/src/rnnoise.cpp b/src/rnnoise.cpp new file mode 100644 index 0000000..30c2b6b --- /dev/null +++ b/src/rnnoise.cpp @@ -0,0 +1,360 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "rnnoise.hpp" + +RNNoise::RNNoise(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::rnnoise, tags::plugin_package::rnnoise, schema, schema_path, pipe_manager), + enable_vad(g_settings_get_boolean(settings, "enable-vad")), + vad_thres(g_settings_get_double(settings, "vad-thres") / 100.0F), + data_L(0), + data_R(0) { + data_L.reserve(blocksize); + data_R.reserve(blocksize); + data_tmp.reserve(blocksize); + + const auto key_v = g_settings_get_double(settings, "wet"); + + wet_ratio = (key_v <= util::minimum_db_d_level) ? 0.0F : static_cast(util::db_to_linear(key_v)); + + gconnections.push_back(g_signal_connect(settings, "changed::model-path", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + self->data_mutex.lock(); + + self->rnnoise_ready = false; + + self->data_mutex.unlock(); + +#ifdef ENABLE_RNNOISE + self->free_rnnoise(); + + auto* m = self->get_model_from_file(); + + self->model = m; + + self->state_left = rnnoise_create(self->model); + self->state_right = rnnoise_create(self->model); + + self->rnnoise_ready = true; +#endif + }), + this)); + + setup_input_output_gain(); + +#ifdef ENABLE_RNNOISE + + init_release(); + + gconnections.push_back(g_signal_connect(settings, "changed::enable-vad", + G_CALLBACK(+[](GSettings* settings, char* key, RNNoise* self) { + self->enable_vad = g_settings_get_boolean(settings, key); + }), + this)); + + g_signal_connect(settings, "changed::vad-thres", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto self = static_cast(user_data); + + self->vad_thres = static_cast(g_settings_get_double(settings, key)) / 100.0F; + }), + this); + + g_signal_connect(settings, "changed::wet", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto self = static_cast(user_data); + + const auto key_v = g_settings_get_double(settings, key); + + self->wet_ratio = + (key_v <= util::minimum_db_d_level) ? 0.0F : static_cast(util::db_to_linear(key_v)); + }), + this); + + g_signal_connect(settings, "changed::release", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto self = static_cast(user_data); + + self->init_release(); + }), + this); + + auto* m = get_model_from_file(); + + model = m; + + state_left = rnnoise_create(model); + state_right = rnnoise_create(model); + + vad_prob_left = 1.0F; + vad_prob_right = 1.0F; + vad_grace_left = release; + vad_grace_right = release; + + rnnoise_ready = true; +#else + util::warning("The RNNoise library was not available at compilation time. The noise reduction filter won't work"); + + enable_vad = false; +#endif +} + +RNNoise::~RNNoise() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + std::scoped_lock lock(data_mutex); + + resampler_ready = false; + +#ifdef ENABLE_RNNOISE + free_rnnoise(); +#endif + + util::debug(log_tag + name + " destroyed"); +} + +void RNNoise::setup() { + std::scoped_lock lock(data_mutex); + + resampler_ready = false; + + latency_n_frames = 0U; + + resample = rate != rnnoise_rate; + + data_L.resize(0U); + data_R.resize(0U); + + deque_out_L.resize(0U); + deque_out_R.resize(0U); + + resampler_inL = std::make_unique(rate, rnnoise_rate); + resampler_inR = std::make_unique(rate, rnnoise_rate); + + resampler_outL = std::make_unique(rnnoise_rate, rate); + resampler_outR = std::make_unique(rnnoise_rate, rate); + + resampler_ready = true; +} + +void RNNoise::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (bypass || !rnnoise_ready) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + if (resample) { + if (resampler_ready) { + const auto resampled_inL = resampler_inL->process(left_in, false); + const auto resampled_inR = resampler_inR->process(right_in, false); + + resampled_data_L.resize(0U); + resampled_data_R.resize(0U); + +#ifdef ENABLE_RNNOISE + remove_noise(resampled_inL, resampled_inR, resampled_data_L, resampled_data_R); +#endif + + auto resampled_outL = resampler_outL->process(resampled_data_L, false); + auto resampled_outR = resampler_outR->process(resampled_data_R, false); + + for (const auto& v : resampled_outL) { + deque_out_L.push_back(v); + } + + for (const auto& v : resampled_outR) { + deque_out_R.push_back(v); + } + } else { + for (const auto& v : left_in) { + deque_out_L.push_back(v); + } + + for (const auto& v : right_in) { + deque_out_R.push_back(v); + } + } + } else { +#ifdef ENABLE_RNNOISE + remove_noise(left_in, right_in, deque_out_L, deque_out_R); +#endif + } + + if (deque_out_L.size() >= left_out.size()) { + for (float& v : left_out) { + v = deque_out_L.front(); + + deque_out_L.pop_front(); + } + + for (float& v : right_out) { + v = deque_out_R.front(); + + deque_out_R.pop_front(); + } + } else { + const uint offset = 2U * (left_out.size() - deque_out_L.size()); + + if (offset != latency_n_frames) { + latency_n_frames = offset; + + notify_latency = true; + } + + for (uint n = 0U; !deque_out_L.empty() && n < left_out.size(); n++) { + if (n < offset) { + left_out[n] = 0.0F; + right_out[n] = 0.0F; + } else { + left_out[n] = deque_out_L.front(); + right_out[n] = deque_out_R.front(); + + deque_out_R.pop_front(); + deque_out_L.pop_front(); + } + } + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (notify_latency) { + latency_value = static_cast(latency_n_frames) / static_cast(rate); + + util::debug(log_tag + name + " latency: " + util::to_string(latency_value, "") + " s"); + + util::idle_add([=, this]() { + if (!post_messages || latency.empty()) { + return; + } + + latency.emit(); + }); + + update_filter_params(); + + notify_latency = false; + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +#ifdef ENABLE_RNNOISE + +auto RNNoise::get_model_from_file() -> RNNModel* { + RNNModel* m = nullptr; + + const auto path = util::gsettings_get_string(settings, "model-path"); + + // Standard Model + if (path.empty()) { + standard_model = true; + + util::debug(log_tag + name + " using the standard model."); + + model_changed.emit(false); + + return m; + } + + // Custom Model + util::debug(log_tag + name + " loading custom model from file: " + path); + + if (FILE* f = fopen(path.c_str(), "r"); f != nullptr) { + m = rnnoise_model_from_file(f); + + fclose(f); + } + + standard_model = (m == nullptr); + + if (standard_model) { + util::warning(log_tag + name + " failed to load the custom model. Using the standard one."); + } + + model_changed.emit(standard_model); + + return m; +} + +void RNNoise::free_rnnoise() { + rnnoise_ready = false; + + if (state_left != nullptr) { + rnnoise_destroy(state_left); + } + + if (state_right != nullptr) { + rnnoise_destroy(state_right); + } + + if (model != nullptr) { + rnnoise_model_free(model); + } + + state_left = nullptr; + state_right = nullptr; + model = nullptr; +} + +#endif + +auto RNNoise::get_latency_seconds() -> float { + return latency_value; +} + +void RNNoise::init_release() { +#ifdef ENABLE_RNNOISE + + const auto key_v = g_settings_get_double(settings, "release"); + + const auto rate = static_cast(rnnoise_rate); + + const auto bs = static_cast(blocksize); + + // std::lrint returns a long type + const auto release = static_cast(std::lrint(rate * key_v / 1000.0 / bs)); + + vad_grace_left = release; + vad_grace_right = release; + +#endif +} diff --git a/src/rnnoise_preset.cpp b/src/rnnoise_preset.cpp new file mode 100644 index 0000000..68ba653 --- /dev/null +++ b/src/rnnoise_preset.cpp @@ -0,0 +1,65 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "rnnoise_preset.hpp" + +RNNoisePreset::RNNoisePreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::rnnoise::id, + tags::schema::rnnoise::input_path, + tags::schema::rnnoise::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::rnnoise).append("#").append(util::to_string(index)); +} + +void RNNoisePreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["model-path"] = util::gsettings_get_string(settings, "model-path"); + + json[section][instance_name]["enable-vad"] = g_settings_get_boolean(settings, "enable-vad") != 0; + + json[section][instance_name]["vad-thres"] = g_settings_get_double(settings, "vad-thres"); + + json[section][instance_name]["wet"] = g_settings_get_double(settings, "wet"); + + json[section][instance_name]["release"] = g_settings_get_double(settings, "release"); +} + +void RNNoisePreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "model-path", "model-path"); + + update_key(json.at(section).at(instance_name), settings, "enable-vad", "enable-vad"); + + update_key(json.at(section).at(instance_name), settings, "vad-thres", "vad-thres"); + + update_key(json.at(section).at(instance_name), settings, "wet", "wet"); + + update_key(json.at(section).at(instance_name), settings, "release", "release"); +} diff --git a/src/rnnoise_ui.cpp b/src/rnnoise_ui.cpp new file mode 100644 index 0000000..08c5199 --- /dev/null +++ b/src/rnnoise_ui.cpp @@ -0,0 +1,479 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "rnnoise_ui.hpp" +#include "config.h" + +namespace ui::rnnoise_box { + +using namespace std::string_literals; + +static const std::string rnnn_ext = ".rnnn"; + +// The translated default_model_name is not working as global variable +// because for some reasons it's not translated and, as a result, the +// Standard Model is not set from UI perspective (see #1659). +// So it has to be constructed every time locally when it's needed. +// static const std::string default_model_name = _("Standard Model"); + +static std::filesystem::path model_dir = g_get_user_config_dir() + "/easyeffects/rnnoise"s; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + app::Application* application; + + std::shared_ptr rnnoise; + + std::vector connections; + + std::vector gconnections; +}; + +struct _RNNoiseBox { + GtkBox parent_instance; + + AdwToastOverlay* toast_overlay; + + GtkScale *input_gain, *output_gain; + + GtkSpinButton *vad_thres, *wet, *release; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *active_model_name, *model_active_state, *model_error_state, *input_level_left_label, + *input_level_right_label, *output_level_left_label, *output_level_right_label, *plugin_credit; + + GtkSwitch* enable_vad; + + GtkListView* listview; + + GtkStringList* string_list; + + GtkSingleSelection* selection_model; + + GSettings* settings; + + GFileMonitor* folder_monitor; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(RNNoiseBox, rnnoise_box, GTK_TYPE_BOX) + +void on_reset(RNNoiseBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void update_model_state(RNNoiseBox* self, const bool& load_error) { + gtk_widget_set_visible(GTK_WIDGET(self->model_error_state), load_error ? 1 : 0); + gtk_widget_set_visible(GTK_WIDGET(self->model_active_state), !load_error ? 1 : 0); + + if (load_error) { + ui::show_autohiding_toast( + self->toast_overlay, + _("Selected Model Not Loaded. Its Format May Be Unsupported. Fell Back To The Standard Model.")); + } +} + +gboolean set_model_delete_button_visibility(GtkListItem* item, const char* name) { + const std::string default_model_name = _("Standard Model"); + + return (name == default_model_name) ? 0 : 1; +} + +void on_remove_model_file(GtkListItem* item, GtkButton* btn) { + std::string name = gtk_string_object_get_string(GTK_STRING_OBJECT(gtk_list_item_get_item(item))); + + const auto model_file = model_dir / std::filesystem::path{name.c_str() + rnnn_ext}; + + if (std::filesystem::exists(model_file)) { + std::filesystem::remove(model_file); + + util::debug("removed model file: " + model_file.string()); + } +} + +void import_model_file(const std::string& file_path) { + std::filesystem::path p{file_path}; + + if (std::filesystem::is_regular_file(p)) { + auto out_path = model_dir / p.filename(); + + out_path.replace_extension(rnnn_ext); + + std::filesystem::copy_file(p, out_path, std::filesystem::copy_options::overwrite_existing); + + util::debug("imported model file to: " + out_path.string()); + } else { + util::warning(p.string() + " is not a file!"); + } +} + +void on_import_model_clicked(RNNoiseBox* self, GtkButton* btn) { + auto* active_window = gtk_application_get_active_window(GTK_APPLICATION(self->data->application)); + + auto* dialog = gtk_file_dialog_new(); + + gtk_file_dialog_set_title(dialog, _("Import Model File")); + gtk_file_dialog_set_accept_label(dialog, _("Open")); + + auto* init_folder = g_file_new_for_path(SYSTEM_RNNOISE_DIR); + + gtk_file_dialog_set_initial_folder(dialog, init_folder); + + g_object_unref(init_folder); + + GListStore* filters = g_list_store_new(GTK_TYPE_FILE_FILTER); + + auto* filter = gtk_file_filter_new(); + + gtk_file_filter_set_name(filter, _("RNNoise Models")); + gtk_file_filter_add_pattern(filter, "*.rnnn"); + + g_list_store_append(filters, filter); + + g_object_unref(filter); + + gtk_file_dialog_set_filters(dialog, G_LIST_MODEL(filters)); + + g_object_unref(filters); + + gtk_file_dialog_open_multiple( + dialog, active_window, nullptr, + +[](GObject* source_object, GAsyncResult* result, gpointer user_data) { + auto* dialog = GTK_FILE_DIALOG(source_object); + + auto* files_list = gtk_file_dialog_open_multiple_finish(dialog, result, nullptr); + + if (files_list == nullptr) { + return; + } + + for (guint n = 0U; n < g_list_model_get_n_items(files_list); n++) { + auto* file = static_cast(g_list_model_get_item(files_list, n)); + auto* path = g_file_get_path(file); + + import_model_file(path); + + g_free(path); + } + + g_object_unref(files_list); + }, + self); +} + +void setup_listview(RNNoiseBox* self) { + for (const auto& name : util::get_files_name(model_dir, rnnn_ext)) { + gtk_string_list_append(self->string_list, name.c_str()); + } + + if (g_list_model_get_n_items(G_LIST_MODEL(self->string_list)) == 0) { + g_settings_set_string(self->settings, "model-path", ""); + } +} + +void setup(RNNoiseBox* self, + std::shared_ptr rnnoise, + const std::string& schema_path, + app::Application* application) { + self->data->rnnoise = rnnoise; + self->data->application = application; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::rnnoise::id, schema_path.c_str()); + + rnnoise->set_post_messages(true); + + // Initialize state labels + if (const auto m = util::gsettings_get_string(self->settings, "model-path"); !m.empty() && rnnoise->standard_model) { + update_model_state(self, true); + } + + setup_listview(self); + + self->data->connections.push_back(rnnoise->model_changed.connect([=](const bool load_error) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_model_state(self, load_error); + }); + })); + + self->data->connections.push_back(rnnoise->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(rnnoise->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->rnnoise->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain", "enable-vad", "vad-thres", "wet", "release">( + self->settings, self->input_gain, self->output_gain, self->enable_vad, self->vad_thres, self->wet, self->release); + + g_settings_bind_with_mapping( + self->settings, "model-path", self->selection_model, "selected", G_SETTINGS_BIND_DEFAULT, + +[](GValue* value, GVariant* variant, gpointer user_data) { + auto* self = EE_RNNOISE_BOX(user_data); + + const auto* v = g_variant_get_string(variant, nullptr); + + const auto path = std::filesystem::path{v}; + + const std::string default_model_name = _("Standard Model"); + + auto gsettings_model_name = path.stem(); + + int standard_model_id = 0; + + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->selection_model)); n++) { + auto item = g_list_model_get_item(G_LIST_MODEL(self->selection_model), n); + + const std::string model_name = gtk_string_object_get_string(GTK_STRING_OBJECT(item)); + + g_object_unref(item); + + if (gsettings_model_name == model_name) { + g_value_set_uint(value, n); + } else if (model_name == default_model_name) { + standard_model_id = n; + } + } + + if (gsettings_model_name.empty()) { + g_value_set_uint(value, standard_model_id); + } + + return 1; + }, + +[](const GValue* value, const GVariantType* expected_type, gpointer user_data) { + auto* self = EE_RNNOISE_BOX(user_data); + + auto string_object = + GTK_STRING_OBJECT(gtk_single_selection_get_selected_item(GTK_SINGLE_SELECTION(self->selection_model))); + + const std::string name = gtk_string_object_get_string(string_object); + + const std::string default_model_name = _("Standard Model"); + + if (name == default_model_name) { + return g_variant_new_string(""); + } + + const auto model_file = model_dir / std::filesystem::path{name + rnnn_ext}; + + return g_variant_new_string(model_file.c_str()); + }, + self, nullptr); +} + +void dispose(GObject* object) { + auto* self = EE_RNNOISE_BOX(object); + + self->data->rnnoise->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + g_file_monitor_cancel(self->folder_monitor); + + g_object_unref(self->folder_monitor); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(rnnoise_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_RNNOISE_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(rnnoise_box_parent_class)->finalize(object); +} + +void rnnoise_box_class_init(RNNoiseBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::rnnoise_ui); + + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, toast_overlay); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, enable_vad); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, vad_thres); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, wet); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, release); + + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, string_list); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, selection_model); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, listview); + + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, active_model_name); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, model_active_state); + gtk_widget_class_bind_template_child(widget_class, RNNoiseBox, model_error_state); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); + gtk_widget_class_bind_template_callback(widget_class, on_import_model_clicked); + gtk_widget_class_bind_template_callback(widget_class, on_remove_model_file); + gtk_widget_class_bind_template_callback(widget_class, set_model_delete_button_visibility); +} + +void rnnoise_box_init(RNNoiseBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbutton<"ms">(self->release); + + prepare_spinbutton<"%">(self->vad_thres); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->wet); + + // model dir + + if (!std::filesystem::is_directory(model_dir)) { + if (std::filesystem::create_directories(model_dir)) { + util::debug("model directory created: " + model_dir.string()); + } else { + util::warning("failed to create model directory: " + model_dir.string()); + } + } else { + util::debug("model directory already exists: " + model_dir.string()); + } + + auto gfile = g_file_new_for_path(model_dir.c_str()); + + self->folder_monitor = g_file_monitor_directory(gfile, G_FILE_MONITOR_NONE, nullptr, nullptr); + + g_signal_connect(self->folder_monitor, "changed", + G_CALLBACK(+[](GFileMonitor* monitor, GFile* file, GFile* other_file, GFileMonitorEvent event_type, + RNNoiseBox* self) { + const auto rnn_filename = util::remove_filename_extension(g_file_get_basename(file)); + + if (rnn_filename.empty()) { + util::warning("can't retrieve information about the rnn file"); + + return; + } + + switch (event_type) { + case G_FILE_MONITOR_EVENT_CREATED: { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->string_list)); n++) { + if (rnn_filename == gtk_string_list_get_string(self->string_list, n)) { + return; + } + } + + gtk_string_list_append(self->string_list, rnn_filename.c_str()); + + break; + } + + case G_FILE_MONITOR_EVENT_DELETED: { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(self->string_list)); n++) { + if (rnn_filename == gtk_string_list_get_string(self->string_list, n)) { + gtk_string_list_remove(self->string_list, n); + + // Workaround for GTK not calling the listview signal_selection_changed (issue #1110) + + // on_selection_changed(); + + return; + } + } + + break; + } + + default: + break; + } + }), + self); + + g_object_unref(gfile); +} + +auto create() -> RNNoiseBox* { + return static_cast(g_object_new(EE_TYPE_RNNOISE_BOX, nullptr)); +} + +} // namespace ui::rnnoise_box diff --git a/src/spectrum.cpp b/src/spectrum.cpp new file mode 100644 index 0000000..dd19372 --- /dev/null +++ b/src/spectrum.cpp @@ -0,0 +1,139 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "spectrum.hpp" + +Spectrum::Spectrum(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, "spectrum", tags::plugin_package::ee, schema, schema_path, pipe_manager), fftw_ready(true) { + real_input.resize(n_bands); + output.resize(n_bands / 2U + 1U); + + complex_output = fftwf_alloc_complex(n_bands); + + plan = fftwf_plan_dft_r2c_1d(static_cast(n_bands), real_input.data(), complex_output, FFTW_ESTIMATE); + + g_signal_connect(settings, "changed::show", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + std::scoped_lock lock(self->data_mutex); + + self->bypass = g_settings_get_boolean(settings, key) == 0; + }), + this); +} + +Spectrum::~Spectrum() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + std::scoped_lock lock(data_mutex); + + fftw_ready = false; + + if (complex_output != nullptr) { + fftwf_free(complex_output); + } + + fftwf_destroy_plan(plan); + + util::debug(log_tag + name + " destroyed"); +} + +void Spectrum::setup() { + deque_in_mono.resize(0U); + + std::ranges::fill(real_input, 0.0F); + + /* + real_input size is hardcoded to 8192. THe same maxium buffer size hardcoded in PipeWire + https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/src/pipewire/filter.c#L48. If we reevei a smaller + array we have to insert some zeros in the beginning. + */ + + if (n_samples < real_input.size()) { + while (deque_in_mono.size() != real_input.size() - n_samples) { + deque_in_mono.push_back(0.0F); + } + } +} + +void Spectrum::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + if (bypass || !fftw_ready) { + return; + } + + for (uint n = 0U; n < left_in.size(); n++) { + deque_in_mono.push_back(0.5F * (left_in[n] + right_in[n])); + } + + for (size_t n = 0; n < deque_in_mono.size(); n++) { + if (n < real_input.size()) { + // https : // en.wikipedia.org/wiki/Hann_function + + const float w = 0.5F * (1.0F - std::cos(2.0F * std::numbers::pi_v * static_cast(n) / + static_cast(real_input.size() - 1U))); + + real_input[n] = deque_in_mono[n] * w; + } + } + + size_t count = 0U; + + while (count < n_samples && !deque_in_mono.empty()) { + deque_in_mono.pop_front(); + + count++; + } + + fftwf_execute(plan); + + for (uint i = 0U; i < output.size(); i++) { + float sqr = complex_output[i][0] * complex_output[i][0] + complex_output[i][1] * complex_output[i][1]; + + sqr /= static_cast(output.size() * output.size()); + + output[i] = static_cast(sqr); + } + + if (send_notifications) { + util::idle_add([=, this]() { + if (bypass) { + return; + } + + power.emit(rate, output.size(), output); + }); + } +} + +auto Spectrum::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/speex.cpp b/src/speex.cpp new file mode 100644 index 0000000..765dbc7 --- /dev/null +++ b/src/speex.cpp @@ -0,0 +1,284 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "speex.hpp" + +Speex::Speex(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::speex, tags::plugin_package::speex, schema, schema_path, pipe_manager), + enable_denoise(g_settings_get_boolean(settings, "enable-denoise")), + noise_suppression(g_settings_get_int(settings, "noise-suppression")), + enable_agc(g_settings_get_boolean(settings, "enable-agc")), + enable_vad(g_settings_get_boolean(settings, "enable-vad")), + vad_probability_start(g_settings_get_int(settings, "vad-probability-start")), + vad_probability_continue(g_settings_get_int(settings, "vad-probability-continue")), + enable_dereverb(g_settings_get_boolean(settings, "enable-dereverb")) { + + gconnections.push_back(g_signal_connect( + settings, "changed::enable-denoise", G_CALLBACK(+[](GSettings* settings, char* key, Speex* self) { + std::scoped_lock lock(self->data_mutex); + + self->enable_denoise = g_settings_get_boolean(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_DENOISE, &self->enable_denoise); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_DENOISE, &self->enable_denoise); + } + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::noise-suppression", G_CALLBACK(+[](GSettings* settings, char* key, Speex* self) { + std::scoped_lock lock(self->data_mutex); + + self->noise_suppression = g_settings_get_int(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &self->noise_suppression); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &self->noise_suppression); + } + }), + this)); + + gconnections.push_back( + g_signal_connect(settings, "changed::enable-agc", G_CALLBACK(+[](GSettings* settings, char* key, Speex* self) { + std::scoped_lock lock(self->data_mutex); + + self->enable_agc = g_settings_get_boolean(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_AGC, &self->enable_agc); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_AGC, &self->enable_agc); + } + }), + this)); + + gconnections.push_back( + g_signal_connect(settings, "changed::enable-vad", G_CALLBACK(+[](GSettings* settings, char* key, Speex* self) { + std::scoped_lock lock(self->data_mutex); + + self->enable_vad = g_settings_get_boolean(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_VAD, &self->enable_vad); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_VAD, &self->enable_vad); + } + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::vad-probability-start", G_CALLBACK(+[](GSettings* settings, char* key, Speex* self) { + std::scoped_lock lock(self->data_mutex); + + self->vad_probability_start = g_settings_get_int(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_PROB_START, &self->vad_probability_start); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_PROB_START, &self->vad_probability_start); + } + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::vad-probability-continue", G_CALLBACK(+[](GSettings* settings, char* key, Speex* self) { + std::scoped_lock lock(self->data_mutex); + + self->vad_probability_continue = g_settings_get_int(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_PROB_CONTINUE, &self->vad_probability_continue); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_PROB_CONTINUE, &self->vad_probability_continue); + } + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::enable-dereverb", G_CALLBACK(+[](GSettings* settings, char* key, Speex* self) { + std::scoped_lock lock(self->data_mutex); + + self->enable_dereverb = g_settings_get_boolean(settings, key); + + if (self->state_left) { + speex_preprocess_ctl(self->state_left, SPEEX_PREPROCESS_SET_DEREVERB, &self->enable_dereverb); + } + + if (self->state_right) { + speex_preprocess_ctl(self->state_right, SPEEX_PREPROCESS_SET_DEREVERB, &self->enable_dereverb); + } + }), + this)); + + + setup_input_output_gain(); +} + +Speex::~Speex() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + std::scoped_lock lock(data_mutex); + + free_speex(); + + util::debug(log_tag + name + " destroyed"); +} + +void Speex::setup() { + std::scoped_lock lock(data_mutex); + + latency_n_frames = 0U; + + speex_ready = false; + + data_L.resize(n_samples); + data_R.resize(n_samples); + + if (state_left != nullptr) { + speex_preprocess_state_destroy(state_left); + } + + if (state_right != nullptr) { + speex_preprocess_state_destroy(state_right); + } + + state_left = speex_preprocess_state_init(static_cast(n_samples), static_cast(rate)); + state_right = speex_preprocess_state_init(static_cast(n_samples), static_cast(rate)); + + if (state_left != nullptr) { + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_DENOISE, &enable_denoise); + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &noise_suppression); + + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_AGC, &enable_agc); + + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_VAD, &enable_vad); + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_PROB_START, &vad_probability_start); + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_PROB_CONTINUE, &vad_probability_continue); + + speex_preprocess_ctl(state_left, SPEEX_PREPROCESS_SET_DEREVERB, &enable_dereverb); + } + + if (state_right != nullptr) { + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_DENOISE, &enable_denoise); + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &noise_suppression); + + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_AGC, &enable_agc); + + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_VAD, &enable_vad); + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_PROB_START, &vad_probability_start); + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_PROB_CONTINUE, &vad_probability_continue); + + speex_preprocess_ctl(state_right, SPEEX_PREPROCESS_SET_DEREVERB, &enable_dereverb); + } + + speex_ready = true; +} + +void Speex::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + std::scoped_lock lock(data_mutex); + + if (bypass || !speex_ready) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + + for (size_t i = 0; i < n_samples; i++) { + data_L[i] = static_cast(left_in[i] * (SHRT_MAX + 1)); + + data_R[i] = static_cast(right_in[i] * (SHRT_MAX + 1)); + } + + if (speex_preprocess_run(state_left, data_L.data()) == 1) { + for (size_t i = 0; i < n_samples; i++) { + left_out[i] = static_cast(data_L[i]) * inv_short_max; + } + } else { + std::ranges::fill(left_out, 0.0F); + } + + if (speex_preprocess_run(state_right, data_R.data()) == 1) { + for (size_t i = 0; i < n_samples; i++) { + right_out[i] = static_cast(data_R[i]) * inv_short_max; + } + } else { + std::ranges::fill(right_out, 0.0F); + } + + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + + +void Speex::free_speex() { + if (state_left != nullptr) { + speex_preprocess_state_destroy(state_left); + } + + if (state_right != nullptr) { + speex_preprocess_state_destroy(state_right); + } + + state_left = nullptr; + state_right = nullptr; +} + + +auto Speex::get_latency_seconds() -> float { + return latency_value; +} diff --git a/src/speex_preset.cpp b/src/speex_preset.cpp new file mode 100644 index 0000000..f55fe45 --- /dev/null +++ b/src/speex_preset.cpp @@ -0,0 +1,75 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "speex_preset.hpp" + +SpeexPreset::SpeexPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::speex::id, + tags::schema::speex::input_path, + tags::schema::speex::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::speex).append("#").append(util::to_string(index)); +} + +void SpeexPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["enable-denoise"] = g_settings_get_boolean(settings, "enable-denoise") != 0; + + json[section][instance_name]["noise-suppression"] = g_settings_get_int(settings, "noise-suppression"); + + json[section][instance_name]["enable-agc"] = g_settings_get_boolean(settings, "enable-agc") != 0; + + json[section][instance_name]["vad"]["enable"] = g_settings_get_boolean(settings, "enable-vad") != 0; + + json[section][instance_name]["vad"]["probability-start"] = g_settings_get_int(settings, "vad-probability-start"); + + json[section][instance_name]["vad"]["probability-continue"] = + g_settings_get_int(settings, "vad-probability-continue"); + + json[section][instance_name]["enable-dereverb"] = g_settings_get_boolean(settings, "enable-dereverb") != 0; +} + +void SpeexPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "enable-denoise", "enable-denoise"); + + update_key(json.at(section).at(instance_name), settings, "noise-suppression", "noise-suppression"); + + update_key(json.at(section).at(instance_name), settings, "enable-agc", "enable-agc"); + + update_key(json.at(section).at(instance_name).at("vad"), settings, "enable-vad", "enable"); + + update_key(json.at(section).at(instance_name).at("vad"), settings, "vad-probability-start", "probability-start"); + + update_key(json.at(section).at(instance_name).at("vad"), settings, "vad-probability-continue", + "probability-continue"); + + update_key(json.at(section).at(instance_name), settings, "enable-dereverb", "enable-dereverb"); +} diff --git a/src/speex_ui.cpp b/src/speex_ui.cpp new file mode 100644 index 0000000..41e653f --- /dev/null +++ b/src/speex_ui.cpp @@ -0,0 +1,204 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "speex_ui.hpp" + +namespace ui::speex_box { + +using namespace std::string_literals; + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + app::Application* application; + + std::shared_ptr speex; + + std::vector connections; + + std::vector gconnections; +}; + +struct _SpeexBox { + GtkBox parent_instance; + + AdwToastOverlay* toast_overlay; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *noise_suppression_label, *plugin_credit; + + GtkSwitch *enable_denoise, *enable_agc, *enable_vad, *enable_dereverb; + + GtkSpinButton *noise_suppression, *vad_probability_start, *vad_probability_continue; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(SpeexBox, speex_box, GTK_TYPE_BOX) + +void on_reset(SpeexBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(SpeexBox* self, + std::shared_ptr speex, + const std::string& schema_path, + app::Application* application) { + self->data->speex = speex; + self->data->application = application; + + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->settings = g_settings_new_with_path(tags::schema::speex::id, schema_path.c_str()); + + speex->set_post_messages(true); + + self->data->connections.push_back(speex->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(speex->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->speex->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain", "enable-denoise", "noise-suppression", "enable-agc", "enable-vad", + "vad-probability-start", "vad-probability-continue", "enable-dereverb">( + self->settings, self->input_gain, self->output_gain, self->enable_denoise, self->noise_suppression, + self->enable_agc, self->enable_vad, self->vad_probability_start, self->vad_probability_continue, + self->enable_dereverb); +} + +void dispose(GObject* object) { + auto* self = EE_SPEEX_BOX(object); + + self->data->speex->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(speex_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_SPEEX_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(speex_box_parent_class)->finalize(object); +} + +void speex_box_class_init(SpeexBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::speex_ui); + + gtk_widget_class_bind_template_child(widget_class, SpeexBox, toast_overlay); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, SpeexBox, enable_denoise); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, enable_agc); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, enable_vad); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, enable_dereverb); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, noise_suppression); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, vad_probability_start); + gtk_widget_class_bind_template_child(widget_class, SpeexBox, vad_probability_continue); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void speex_box_init(SpeexBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"dB">(self->noise_suppression); + + prepare_spinbuttons<"%">(self->vad_probability_start); + prepare_spinbuttons<"%">(self->vad_probability_continue); +} + +auto create() -> SpeexBox* { + return static_cast(g_object_new(EE_TYPE_SPEEX_BOX, nullptr)); +} + +} // namespace ui::speex_box diff --git a/src/stereo_tools.cpp b/src/stereo_tools.cpp new file mode 100644 index 0000000..b647f66 --- /dev/null +++ b/src/stereo_tools.cpp @@ -0,0 +1,157 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "stereo_tools.hpp" + +StereoTools::StereoTools(const std::string& tag, + const std::string& schema, + const std::string& schema_path, + PipeManager* pipe_manager) + : PluginBase(tag, tags::plugin_name::stereo_tools, tags::plugin_package::calf, schema, schema_path, pipe_manager) { + lv2_wrapper = std::make_unique("http://calf.sourceforge.net/plugins/StereoTools"); + + package_installed = lv2_wrapper->found_plugin; + + if (!package_installed) { + util::debug(log_tag + "http://calf.sourceforge.net/plugins/StereoTools is not installed"); + } + + lv2_wrapper->bind_key_double<"balance_in", "balance-in">(settings); + + lv2_wrapper->bind_key_double<"balance_out", "balance-out">(settings); + + lv2_wrapper->bind_key_double<"sbal", "sbal">(settings); + + lv2_wrapper->bind_key_double<"mpan", "mpan">(settings); + + lv2_wrapper->bind_key_double<"stereo_base", "stereo-base">(settings); + + lv2_wrapper->bind_key_double<"delay", "delay">(settings); + + lv2_wrapper->bind_key_double<"sc_level", "sc-level">(settings); + + lv2_wrapper->bind_key_double<"stereo_phase", "stereo-phase">(settings); + + lv2_wrapper->bind_key_double_db<"slev", "slev">(settings); + + lv2_wrapper->bind_key_double_db<"mlev", "mlev">(settings); + + lv2_wrapper->bind_key_bool<"softclip", "softclip">(settings); + + lv2_wrapper->bind_key_bool<"mutel", "mutel">(settings); + + lv2_wrapper->bind_key_bool<"muter", "muter">(settings); + + lv2_wrapper->bind_key_bool<"phasel", "phasel">(settings); + + lv2_wrapper->bind_key_bool<"phaser", "phaser">(settings); + + lv2_wrapper->bind_key_enum<"mode", "mode">(settings); + + const auto key_dry = g_settings_get_double(settings, "dry"); + + dry = (key_dry <= util::minimum_db_d_level) ? 0.0F : static_cast(util::db_to_linear(key_dry)); + + const auto key_wet = g_settings_get_double(settings, "wet"); + + wet = (key_wet <= util::minimum_db_d_level) ? 0.0F : static_cast(util::db_to_linear(key_wet)); + + gconnections.push_back(g_signal_connect( + settings, "changed::dry", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto key_v = g_settings_get_double(settings, key); + + self->dry = (key_v <= util::minimum_db_d_level) ? 0.0F : static_cast(util::db_to_linear(key_v)); + }), + this)); + + gconnections.push_back(g_signal_connect( + settings, "changed::wet", G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto key_v = g_settings_get_double(settings, key); + + self->wet = (key_v <= util::minimum_db_d_level) ? 0.0F : static_cast(util::db_to_linear(key_v)); + }), + this)); + + setup_input_output_gain(); +} + +StereoTools::~StereoTools() { + if (connected_to_pw) { + disconnect_from_pw(); + } + + util::debug(log_tag + name + " destroyed"); +} + +void StereoTools::setup() { + if (!lv2_wrapper->found_plugin) { + return; + } + + lv2_wrapper->set_n_samples(n_samples); + + if (lv2_wrapper->get_rate() != rate) { + lv2_wrapper->create_instance(rate); + } +} + +void StereoTools::process(std::span& left_in, + std::span& right_in, + std::span& left_out, + std::span& right_out) { + if (!lv2_wrapper->found_plugin || !lv2_wrapper->has_instance() || bypass) { + std::copy(left_in.begin(), left_in.end(), left_out.begin()); + std::copy(right_in.begin(), right_in.end(), right_out.begin()); + + return; + } + + if (input_gain != 1.0F) { + apply_gain(left_in, right_in, input_gain); + } + + lv2_wrapper->connect_data_ports(left_in, right_in, left_out, right_out); + lv2_wrapper->run(); + + for (size_t n = 0; n < left_out.size(); n++) { + left_out[n] = wet * left_out[n] + dry * left_in[n]; + + right_out[n] = wet * right_out[n] + dry * right_in[n]; + } + + if (output_gain != 1.0F) { + apply_gain(left_out, right_out, output_gain); + } + + if (post_messages) { + get_peaks(left_in, right_in, left_out, right_out); + + if (send_notifications) { + notify(); + } + } +} + +auto StereoTools::get_latency_seconds() -> float { + return 0.0F; +} diff --git a/src/stereo_tools_preset.cpp b/src/stereo_tools_preset.cpp new file mode 100644 index 0000000..6ca2d37 --- /dev/null +++ b/src/stereo_tools_preset.cpp @@ -0,0 +1,109 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "stereo_tools_preset.hpp" + +StereoToolsPreset::StereoToolsPreset(PresetType preset_type, const int& index) + : PluginPresetBase(tags::schema::stereo_tools::id, + tags::schema::stereo_tools::input_path, + tags::schema::stereo_tools::output_path, + preset_type, + index) { + instance_name.assign(tags::plugin_name::stereo_tools).append("#").append(util::to_string(index)); +} + +void StereoToolsPreset::save(nlohmann::json& json) { + json[section][instance_name]["bypass"] = g_settings_get_boolean(settings, "bypass") != 0; + + json[section][instance_name]["input-gain"] = g_settings_get_double(settings, "input-gain"); + + json[section][instance_name]["output-gain"] = g_settings_get_double(settings, "output-gain"); + + json[section][instance_name]["balance-in"] = g_settings_get_double(settings, "balance-in"); + + json[section][instance_name]["balance-out"] = g_settings_get_double(settings, "balance-out"); + + json[section][instance_name]["softclip"] = g_settings_get_boolean(settings, "softclip") != 0; + + json[section][instance_name]["mutel"] = g_settings_get_boolean(settings, "mutel") != 0; + + json[section][instance_name]["muter"] = g_settings_get_boolean(settings, "muter") != 0; + + json[section][instance_name]["phasel"] = g_settings_get_boolean(settings, "phasel") != 0; + + json[section][instance_name]["phaser"] = g_settings_get_boolean(settings, "phaser") != 0; + + json[section][instance_name]["mode"] = util::gsettings_get_string(settings, "mode"); + + json[section][instance_name]["side-level"] = g_settings_get_double(settings, "slev"); + + json[section][instance_name]["side-balance"] = g_settings_get_double(settings, "sbal"); + + json[section][instance_name]["middle-level"] = g_settings_get_double(settings, "mlev"); + + json[section][instance_name]["middle-panorama"] = g_settings_get_double(settings, "mpan"); + + json[section][instance_name]["stereo-base"] = g_settings_get_double(settings, "stereo-base"); + + json[section][instance_name]["delay"] = g_settings_get_double(settings, "delay"); + + json[section][instance_name]["sc-level"] = g_settings_get_double(settings, "sc-level"); + + json[section][instance_name]["stereo-phase"] = g_settings_get_double(settings, "stereo-phase"); +} + +void StereoToolsPreset::load(const nlohmann::json& json) { + update_key(json.at(section).at(instance_name), settings, "bypass", "bypass"); + + update_key(json.at(section).at(instance_name), settings, "input-gain", "input-gain"); + + update_key(json.at(section).at(instance_name), settings, "output-gain", "output-gain"); + + update_key(json.at(section).at(instance_name), settings, "balance-in", "balance-in"); + + update_key(json.at(section).at(instance_name), settings, "balance-out", "balance-out"); + + update_key(json.at(section).at(instance_name), settings, "softclip", "softclip"); + + update_key(json.at(section).at(instance_name), settings, "mutel", "mutel"); + + update_key(json.at(section).at(instance_name), settings, "muter", "muter"); + + update_key(json.at(section).at(instance_name), settings, "phasel", "phasel"); + + update_key(json.at(section).at(instance_name), settings, "phaser", "phaser"); + + update_key(json.at(section).at(instance_name), settings, "mode", "mode"); + + update_key(json.at(section).at(instance_name), settings, "slev", "side-level"); + + update_key(json.at(section).at(instance_name), settings, "sbal", "side-balance"); + + update_key(json.at(section).at(instance_name), settings, "mlev", "middle-level"); + + update_key(json.at(section).at(instance_name), settings, "mpan", "middle-panorama"); + + update_key(json.at(section).at(instance_name), settings, "stereo-base", "stereo-base"); + + update_key(json.at(section).at(instance_name), settings, "delay", "delay"); + + update_key(json.at(section).at(instance_name), settings, "sc-level", "sc-level"); + + update_key(json.at(section).at(instance_name), settings, "stereo-phase", "stereo-phase"); +} diff --git a/src/stereo_tools_ui.cpp b/src/stereo_tools_ui.cpp new file mode 100644 index 0000000..3098547 --- /dev/null +++ b/src/stereo_tools_ui.cpp @@ -0,0 +1,250 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "stereo_tools_ui.hpp" + +namespace ui::stereo_tools_box { + +struct Data { + public: + ~Data() { util::debug("data struct destroyed"); } + + uint serial = 0U; + + std::shared_ptr stereo_tools; + + std::vector connections; + + std::vector gconnections; +}; + +struct _StereoToolsBox { + GtkBox parent_instance; + + GtkScale *input_gain, *output_gain; + + GtkLevelBar *input_level_left, *input_level_right, *output_level_left, *output_level_right; + + GtkLabel *input_level_left_label, *input_level_right_label, *output_level_left_label, *output_level_right_label, + *plugin_credit; + + GtkDropDown* mode; + + GtkSpinButton *balance_in, *balance_out, *slev, *sbal, *mlev, *mpan, *stereo_base, *delay, *sc_level, *stereo_phase, + *dry, *wet; + + GtkToggleButton *softclip, *mutel, *muter, *phasel, *phaser; + + GSettings* settings; + + Data* data; +}; + +// NOLINTNEXTLINE +G_DEFINE_TYPE(StereoToolsBox, stereo_tools_box, GTK_TYPE_BOX) + +void on_reset(StereoToolsBox* self, GtkButton* btn) { + util::reset_all_keys_except(self->settings); +} + +void setup(StereoToolsBox* self, std::shared_ptr stereo_tools, const std::string& schema_path) { + auto serial = get_new_filter_serial(); + + self->data->serial = serial; + + g_object_set_data(G_OBJECT(self), "serial", GUINT_TO_POINTER(serial)); + + set_ignore_filter_idle_add(serial, false); + + self->data->stereo_tools = stereo_tools; + + self->settings = g_settings_new_with_path(tags::schema::stereo_tools::id, schema_path.c_str()); + + stereo_tools->set_post_messages(true); + + self->data->connections.push_back(stereo_tools->input_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->input_level_left, self->input_level_left_label, self->input_level_right, + self->input_level_right_label, left, right); + }); + })); + + self->data->connections.push_back(stereo_tools->output_level.connect([=](const float left, const float right) { + util::idle_add([=]() { + if (get_ignore_filter_idle_add(serial)) { + return; + } + + update_level(self->output_level_left, self->output_level_left_label, self->output_level_right, + self->output_level_right_label, left, right); + }); + })); + + gtk_label_set_text(self->plugin_credit, ui::get_plugin_credit_translated(self->data->stereo_tools->package).c_str()); + + gsettings_bind_widgets<"input-gain", "output-gain">(self->settings, self->input_gain, self->output_gain); + + g_settings_bind(self->settings, "balance-in", gtk_spin_button_get_adjustment(self->balance_in), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "balance-out", gtk_spin_button_get_adjustment(self->balance_out), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "slev", gtk_spin_button_get_adjustment(self->slev), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sbal", gtk_spin_button_get_adjustment(self->sbal), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "mlev", gtk_spin_button_get_adjustment(self->mlev), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "mpan", gtk_spin_button_get_adjustment(self->mpan), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-base", gtk_spin_button_get_adjustment(self->stereo_base), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "delay", gtk_spin_button_get_adjustment(self->delay), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "sc-level", gtk_spin_button_get_adjustment(self->sc_level), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "stereo-phase", gtk_spin_button_get_adjustment(self->stereo_phase), "value", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "dry", gtk_spin_button_get_adjustment(self->dry), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "wet", gtk_spin_button_get_adjustment(self->wet), "value", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "softclip", self->softclip, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "mutel", self->mutel, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "muter", self->muter, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "phasel", self->phasel, "active", G_SETTINGS_BIND_DEFAULT); + + g_settings_bind(self->settings, "phaser", self->phaser, "active", G_SETTINGS_BIND_DEFAULT); + + ui::gsettings_bind_enum_to_combo_widget(self->settings, "mode", self->mode); +} + +void dispose(GObject* object) { + auto* self = EE_STEREO_TOOLS_BOX(object); + + self->data->stereo_tools->set_post_messages(false); + + set_ignore_filter_idle_add(self->data->serial, true); + + for (auto& c : self->data->connections) { + c.disconnect(); + } + + for (auto& handler_id : self->data->gconnections) { + g_signal_handler_disconnect(self->settings, handler_id); + } + + self->data->connections.clear(); + self->data->gconnections.clear(); + + g_object_unref(self->settings); + + util::debug("disposed"); + + G_OBJECT_CLASS(stereo_tools_box_parent_class)->dispose(object); +} + +void finalize(GObject* object) { + auto* self = EE_STEREO_TOOLS_BOX(object); + + delete self->data; + + util::debug("finalized"); + + G_OBJECT_CLASS(stereo_tools_box_parent_class)->finalize(object); +} + +void stereo_tools_box_class_init(StereoToolsBoxClass* klass) { + auto* object_class = G_OBJECT_CLASS(klass); + auto* widget_class = GTK_WIDGET_CLASS(klass); + + object_class->dispose = dispose; + object_class->finalize = finalize; + + gtk_widget_class_set_template_from_resource(widget_class, tags::resources::stereo_tools_ui); + + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, input_gain); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, output_gain); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, input_level_left); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, input_level_right); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, output_level_left); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, output_level_right); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, input_level_left_label); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, input_level_right_label); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, output_level_left_label); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, output_level_right_label); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, plugin_credit); + + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, mode); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, balance_in); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, balance_out); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, slev); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, sbal); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, mlev); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, mpan); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, stereo_base); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, delay); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, sc_level); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, stereo_phase); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, softclip); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, mutel); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, muter); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, phasel); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, phaser); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, dry); + gtk_widget_class_bind_template_child(widget_class, StereoToolsBox, wet); + + gtk_widget_class_bind_template_callback(widget_class, on_reset); +} + +void stereo_tools_box_init(StereoToolsBox* self) { + gtk_widget_init_template(GTK_WIDGET(self)); + + self->data = new Data(); + + prepare_scales<"dB">(self->input_gain, self->output_gain); + + prepare_spinbuttons<"dB">(self->slev, self->mlev); + + prepare_spinbuttons<"ms">(self->delay); + + prepare_spinbuttons<"">(self->balance_in, self->balance_out, self->sc_level, self->sbal, self->mpan, + self->stereo_base, self->stereo_phase); + + // The following spinbuttons can assume -inf + prepare_spinbuttons<"dB", false>(self->dry, self->wet); +} + +auto create() -> StereoToolsBox* { + return static_cast(g_object_new(EE_TYPE_STEREO_TOOLS_BOX, nullptr)); +} + +} // namespace ui::stereo_tools_box diff --git a/src/stream_input_effects.cpp b/src/stream_input_effects.cpp new file mode 100644 index 0000000..09995d6 --- /dev/null +++ b/src/stream_input_effects.cpp @@ -0,0 +1,359 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "stream_input_effects.hpp" + +StreamInputEffects::StreamInputEffects(PipeManager* pipe_manager) + : EffectsBase("sie: ", tags::schema::id_input, pipe_manager) { + auto* PULSE_SOURCE = std::getenv("PULSE_SOURCE"); + + if (PULSE_SOURCE != nullptr && PULSE_SOURCE != tags::pipewire::ee_source_name) { + for (const auto& [serial, node] : pm->node_map) { + if (node.name == PULSE_SOURCE) { + pm->input_device = node; + + g_settings_set_string(settings, "input-device", pm->input_device.name.c_str()); + + break; + } + } + } + + connections.push_back(pm->source_added.connect([=, this](const NodeInfo node) { + if (node.name == util::gsettings_get_string(settings, "input-device")) { + pm->input_device = node; + + if (g_settings_get_boolean(global_settings, "bypass") != 0) { + g_settings_set_boolean(global_settings, "bypass", 0); + + return; // filter connected through update_bypass_state + } + + set_bypass(false); + } + })); + + connections.push_back(pm->source_removed.connect([=, this](const NodeInfo node) { + if (g_settings_get_boolean(settings, "use-default-input-device") == 0) { + if (node.name == util::gsettings_get_string(settings, "input-device")) { + pm->input_device.id = SPA_ID_INVALID; + pm->input_device.serial = SPA_ID_INVALID; + } + } + })); + + connections.push_back(pm->stream_input_added.connect(sigc::mem_fun(*this, &StreamInputEffects::on_app_added))); + connections.push_back(pm->link_changed.connect(sigc::mem_fun(*this, &StreamInputEffects::on_link_changed))); + + connect_filters(); + + gconnections.push_back(g_signal_connect(settings, "changed::input-device", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto name = util::gsettings_get_string(settings, key); + + if (name.empty()) { + return; + } + + for (const auto& [serial, node] : self->pm->node_map) { + if (node.name == name) { + self->pm->input_device = node; + + if (g_settings_get_boolean(self->global_settings, "bypass") != 0) { + g_settings_set_boolean(self->global_settings, "bypass", 0); + + return; // filter connected through update_bypass_state + } + + self->set_bypass(false); + + break; + } + } + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::plugins", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + if (g_settings_get_boolean(self->global_settings, "bypass") != 0) { + g_settings_set_boolean(self->global_settings, "bypass", 0); + + return; // filter connected through update_bypass_state + } + + self->set_bypass(false); + }), + this)); +} + +StreamInputEffects::~StreamInputEffects() { + disconnect_filters(); + + util::debug("destroyed"); +} + +void StreamInputEffects::on_app_added(const NodeInfo node_info) { + const auto blocklist = util::gchar_array_to_vector(g_settings_get_strv(settings, "blocklist")); + + auto is_blocklisted = std::ranges::find(blocklist, node_info.application_id) != blocklist.end(); + + is_blocklisted = is_blocklisted || std::ranges::find(blocklist, node_info.name) != blocklist.end(); + + if (g_settings_get_boolean(global_settings, "process-all-inputs") != 0 && !is_blocklisted) { + pm->connect_stream_input(node_info.id); + } +} + +auto StreamInputEffects::apps_want_to_play() -> bool { + return std::ranges::any_of(pm->list_links, [&](const auto& link) { + return (link.output_node_id == pm->ee_source_node.id) && (link.state == PW_LINK_STATE_ACTIVE); + }); + + return false; +} + +void StreamInputEffects::on_link_changed(const LinkInfo link_info) { + // We are not interested in the other link states + + if (link_info.state != PW_LINK_STATE_ACTIVE && link_info.state != PW_LINK_STATE_PAUSED) { + return; + } + + if (pm->default_input_device_name == pm->ee_source_node.name) { + return; + } + + /* + If bypass is enabled do not touch the plugin pipeline + */ + + if (bypass) { + return; + } + + if (apps_want_to_play()) { + if (list_proxies.empty()) { + util::debug("At least one app linked to our device wants to play. Linking our filters."); + + connect_filters(); + } + } else { + int inactivity_timeout = g_settings_get_int(global_settings, "inactivity-timeout"); + + g_timeout_add_seconds(inactivity_timeout, GSourceFunc(+[](StreamInputEffects* self) { + if (!self->apps_want_to_play() && !self->list_proxies.empty()) { + util::debug("No app linked to our device wants to play. Unlinking our filters."); + + self->disconnect_filters(); + } + + return G_SOURCE_REMOVE; + }), + this); + } +} + +void StreamInputEffects::connect_filters(const bool& bypass) { + const auto input_device_name = util::gsettings_get_string(settings, "input-device"); + + // checking if the output device exists + + if (input_device_name.empty()) { + util::debug("No input device set. Aborting the link"); + + return; + } + + bool dev_exists = false; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == input_device_name) { + dev_exists = true; + + pm->input_device = node; + + break; + } + } + + if (!dev_exists) { + util::debug("The input device " + input_device_name + " is not available. Aborting the link"); + + return; + } + + const auto list = + (bypass) ? std::vector() : util::gchar_array_to_vector(g_settings_get_strv(settings, "plugins")); + + auto mic_linked = false; + + // waiting for the input device ports information to be available. + + int timeout = 0; + + while (pm->count_node_ports(pm->input_device.id) < 1) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + timeout++; + + if (timeout > 10000) { + util::warning("Information about the ports of the input device " + pm->input_device.name + " with id " + + util::to_string(pm->input_device.id) + " are taking to long to be available. Aborting the link"); + + return; + } + } + + uint prev_node_id = pm->input_device.id; + uint next_node_id = 0U; + + // link plugins + + if (!list.empty()) { + for (const auto& name : list) { + if (!plugins.contains(name)) { + continue; + } + + if (!plugins[name]->connected_to_pw ? plugins[name]->connect_to_pw() : true) { + next_node_id = plugins[name]->get_node_id(); + + const auto links = pm->link_nodes(prev_node_id, next_node_id); + + for (auto* link : links) { + list_proxies.push_back(link); + } + + if (mic_linked && (links.size() == 2U)) { + prev_node_id = next_node_id; + } else if (!mic_linked && (!links.empty())) { + prev_node_id = next_node_id; + mic_linked = true; + } else { + util::warning(" link from node " + util::to_string(prev_node_id) + " to node " + + util::to_string(next_node_id) + " failed"); + } + } + } + + // checking if we have to link the echo_canceller probe to the output device + + for (const auto& name : list) { + if (!plugins.contains(name)) { + continue; + } + + if (name.starts_with(tags::plugin_name::echo_canceller)) { + if (plugins[name]->connected_to_pw) { + for (const auto& link : pm->link_nodes(pm->output_device.id, plugins[name]->get_node_id(), true)) { + list_proxies.push_back(link); + } + } + } + + plugins[name]->update_probe_links(); + } + } + + // link spectrum, output level meter and source node + + for (const auto node_id : {spectrum->get_node_id(), output_level->get_node_id(), pm->ee_source_node.id}) { + next_node_id = node_id; + + const auto links = pm->link_nodes(prev_node_id, next_node_id); + + for (auto* link : links) { + list_proxies.push_back(link); + } + + if (mic_linked && (links.size() == 2U)) { + prev_node_id = next_node_id; + } else if (!mic_linked && (!links.empty())) { + prev_node_id = next_node_id; + mic_linked = true; + } else { + util::warning(" link from node " + util::to_string(prev_node_id) + " to node " + util::to_string(next_node_id) + + " failed"); + } + } +} + +void StreamInputEffects::disconnect_filters() { + std::set link_id_list; + + const auto selected_plugins_list = + (bypass) ? std::vector() : util::gchar_array_to_vector(g_settings_get_strv(settings, "plugins")); + + for (const auto& plugin : plugins | std::views::values) { + for (const auto& link : pm->list_links) { + if (link.input_node_id == plugin->get_node_id() || link.output_node_id == plugin->get_node_id()) { + link_id_list.insert(link.id); + } + } + + if (plugin->connected_to_pw) { + if (std::ranges::find(selected_plugins_list, plugin->name) == selected_plugins_list.end()) { + util::debug("disconnecting the " + plugin->name + " filter from PipeWire"); + + plugin->disconnect_from_pw(); + } + } + } + + for (const auto& link : pm->list_links) { + if (link.input_node_id == spectrum->get_node_id() || link.output_node_id == spectrum->get_node_id() || + link.input_node_id == output_level->get_node_id() || link.output_node_id == output_level->get_node_id()) { + link_id_list.insert(link.id); + } + } + + for (const auto& id : link_id_list) { + pm->destroy_object(static_cast(id)); + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + // remove_unused_filters(); +} + +void StreamInputEffects::set_bypass(const bool& state) { + bypass = state; + + disconnect_filters(); + + connect_filters(state); +} + +void StreamInputEffects::set_listen_to_mic(const bool& state) { + if (state) { + for (const auto& link : pm->link_nodes(pm->ee_source_node.id, pm->output_device.id, false, false)) { + list_proxies_listen_mic.push_back(link); + } + } else { + pm->destroy_links(list_proxies_listen_mic); + + list_proxies_listen_mic.clear(); + } +} diff --git a/src/stream_output_effects.cpp b/src/stream_output_effects.cpp new file mode 100644 index 0000000..71ef539 --- /dev/null +++ b/src/stream_output_effects.cpp @@ -0,0 +1,348 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "stream_output_effects.hpp" + +StreamOutputEffects::StreamOutputEffects(PipeManager* pipe_manager) + : EffectsBase("soe: ", tags::schema::id_output, pipe_manager) { + auto* PULSE_SINK = std::getenv("PULSE_SINK"); + + if (PULSE_SINK != nullptr && PULSE_SINK != tags::pipewire::ee_sink_name) { + for (const auto& [serial, node] : pm->node_map) { + if (node.name == PULSE_SINK) { + pm->output_device = node; + + g_settings_set_string(settings, "output-device", pm->output_device.name.c_str()); + + break; + } + } + } + + connections.push_back(pm->sink_added.connect([=, this](const NodeInfo node) { + if (node.name == util::gsettings_get_string(settings, "output-device")) { + pm->output_device = node; + + if (g_settings_get_boolean(global_settings, "bypass") != 0) { + g_settings_set_boolean(global_settings, "bypass", 0); + + return; // filter connected through update_bypass_state + } + + set_bypass(false); + } + })); + + connections.push_back(pm->sink_removed.connect([=, this](const NodeInfo node) { + if (g_settings_get_boolean(settings, "use-default-output-device") == 0) { + if (node.name == util::gsettings_get_string(settings, "output-device")) { + pm->output_device.id = SPA_ID_INVALID; + pm->output_device.serial = SPA_ID_INVALID; + } + } + })); + + connections.push_back(pm->stream_output_added.connect(sigc::mem_fun(*this, &StreamOutputEffects::on_app_added))); + connections.push_back(pm->link_changed.connect(sigc::mem_fun(*this, &StreamOutputEffects::on_link_changed))); + + connect_filters(); + + gconnections.push_back(g_signal_connect(settings, "changed::output-device", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + const auto name = util::gsettings_get_string(settings, key); + + if (name.empty()) { + return; + } + + for (const auto& [serial, node] : self->pm->node_map) { + if (node.name == name) { + self->pm->output_device = node; + + if (g_settings_get_boolean(self->global_settings, "bypass") != 0) { + g_settings_set_boolean(self->global_settings, "bypass", 0); + + return; // filter connected through update_bypass_state + } + + self->set_bypass(false); + + break; + } + } + }), + this)); + + gconnections.push_back(g_signal_connect(settings, "changed::plugins", + G_CALLBACK(+[](GSettings* settings, char* key, gpointer user_data) { + auto* self = static_cast(user_data); + + if (g_settings_get_boolean(self->global_settings, "bypass") != 0) { + g_settings_set_boolean(self->global_settings, "bypass", 0); + + return; // filter connected through update_bypass_state + } + + self->set_bypass(false); + }), + this)); +} + +StreamOutputEffects::~StreamOutputEffects() { + disconnect_filters(); + + util::debug("destroyed"); +} + +void StreamOutputEffects::on_app_added(const NodeInfo node_info) { + const auto blocklist = util::gchar_array_to_vector(g_settings_get_strv(settings, "blocklist")); + + auto is_blocklisted = std::ranges::find(blocklist, node_info.application_id) != blocklist.end(); + + is_blocklisted = is_blocklisted || std::ranges::find(blocklist, node_info.name) != blocklist.end(); + + if (g_settings_get_boolean(global_settings, "process-all-outputs") != 0 && !is_blocklisted) { + pm->connect_stream_output(node_info.id); + } +} + +auto StreamOutputEffects::apps_want_to_play() -> bool { + return std::ranges::any_of(pm->list_links, [&](const auto& link) { + return (link.input_node_id == pm->ee_sink_node.id) && (link.state == PW_LINK_STATE_ACTIVE); + }); +} + +void StreamOutputEffects::on_link_changed(const LinkInfo link_info) { + // We are not interested in the other link states + + if (link_info.state != PW_LINK_STATE_ACTIVE && link_info.state != PW_LINK_STATE_PAUSED) { + return; + } + + /* + If bypass is enabled do not touch the plugin pipeline + */ + + if (bypass) { + return; + } + + if (apps_want_to_play()) { + if (list_proxies.empty()) { + util::debug("At least one app linked to our device wants to play. Linking our filters."); + + connect_filters(); + } + } else { + int inactivity_timeout = g_settings_get_int(global_settings, "inactivity-timeout"); + + g_timeout_add_seconds(inactivity_timeout, GSourceFunc(+[](StreamOutputEffects* self) { + if (!self->apps_want_to_play() && !self->list_proxies.empty()) { + util::debug("No app linked to our device wants to play. Unlinking our filters."); + + self->disconnect_filters(); + } + + return G_SOURCE_REMOVE; + }), + this); + } +} + +void StreamOutputEffects::connect_filters(const bool& bypass) { + const auto output_device_name = util::gsettings_get_string(settings, "output-device"); + + // checking if the output device exists + + if (output_device_name.empty()) { + util::debug("No output device set. Aborting the link"); + + return; + } + + bool dev_exists = false; + + for (const auto& [serial, node] : pm->node_map) { + if (node.name == output_device_name) { + dev_exists = true; + + pm->output_device = node; + + break; + } + } + + if (!dev_exists) { + util::debug("The output device " + output_device_name + " is not available. Aborting the link"); + + return; + } + + const auto list = + (bypass) ? std::vector() : util::gchar_array_to_vector(g_settings_get_strv(settings, "plugins")); + + uint prev_node_id = pm->ee_sink_node.id; + uint next_node_id = 0U; + + // link plugins + + if (!list.empty()) { + for (const auto& name : list) { + if (!plugins.contains(name)) { + continue; + } + + if (!plugins[name]->connected_to_pw ? plugins[name]->connect_to_pw() : true) { + next_node_id = plugins[name]->get_node_id(); + + const auto links = pm->link_nodes(prev_node_id, next_node_id); + + for (auto* link : links) { + list_proxies.push_back(link); + } + + if (links.size() == 2U) { + prev_node_id = next_node_id; + } else { + util::warning(" link from node " + util::to_string(prev_node_id) + " to node " + + util::to_string(next_node_id) + " failed"); + } + } + } + + // checking if we have to link the echo_canceller probe to the output device + + for (const auto& name : list) { + if (!plugins.contains(name)) { + continue; + } + + if (name.starts_with(tags::plugin_name::echo_canceller)) { + if (plugins[name]->connected_to_pw) { + for (const auto& link : pm->link_nodes(pm->output_device.id, plugins[name]->get_node_id(), true)) { + list_proxies.push_back(link); + } + } + } + + plugins[name]->update_probe_links(); + } + } + + // link spectrum and output level meter + + for (const auto& node_id : {spectrum->get_node_id(), output_level->get_node_id()}) { + next_node_id = node_id; + + const auto links = pm->link_nodes(prev_node_id, next_node_id); + + for (auto* link : links) { + list_proxies.push_back(link); + } + + if (links.size() == 2U) { + prev_node_id = next_node_id; + } else { + util::warning(" link from node " + util::to_string(prev_node_id) + " to node " + util::to_string(next_node_id) + + " failed"); + } + } + + // waiting for the output device ports information to be available. + + int timeout = 0; + + while (pm->count_node_ports(pm->output_device.id) < 2) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + timeout++; + + if (timeout > 10000) { // 10 seconds + util::warning("Information about the ports of the output device " + pm->output_device.name + " with id " + + util::to_string(pm->output_device.id) + " are taking to long to be available. Aborting the link"); + + return; + } + } + + // link output device + + next_node_id = pm->output_device.id; + + const auto links = pm->link_nodes(prev_node_id, next_node_id); + + for (auto* link : links) { + list_proxies.push_back(link); + } + + if (links.size() < 2U) { + util::warning(" link from node " + util::to_string(prev_node_id) + " to output device " + + util::to_string(next_node_id) + " failed"); + } +} + +void StreamOutputEffects::disconnect_filters() { + std::set link_id_list; + + const auto selected_plugins_list = + (bypass) ? std::vector() : util::gchar_array_to_vector(g_settings_get_strv(settings, "plugins")); + + for (const auto& plugin : plugins | std::views::values) { + for (const auto& link : pm->list_links) { + if (link.input_node_id == plugin->get_node_id() || link.output_node_id == plugin->get_node_id()) { + link_id_list.insert(link.id); + } + } + + if (plugin->connected_to_pw) { + if (std::ranges::find(selected_plugins_list, plugin->name) == selected_plugins_list.end()) { + util::debug("disconnecting the " + plugin->name + " filter from PipeWire"); + + plugin->disconnect_from_pw(); + } + } + } + + for (const auto& link : pm->list_links) { + if (link.input_node_id == spectrum->get_node_id() || link.output_node_id == spectrum->get_node_id() || + link.input_node_id == output_level->get_node_id() || link.output_node_id == output_level->get_node_id()) { + link_id_list.insert(link.id); + } + } + + for (const auto& id : link_id_list) { + pm->destroy_object(static_cast(id)); + } + + pm->destroy_links(list_proxies); + + list_proxies.clear(); + + // remove_unused_filters(); +} + +void StreamOutputEffects::set_bypass(const bool& state) { + bypass = state; + + disconnect_filters(); + + connect_filters(state); +} diff --git a/src/tags_plugin_name.cpp b/src/tags_plugin_name.cpp new file mode 100644 index 0000000..da8df82 --- /dev/null +++ b/src/tags_plugin_name.cpp @@ -0,0 +1,190 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "tags_plugin_name.hpp" + +namespace { + +const auto id_regex = std::regex(R"(#(\d+)$)"); + +} + +namespace tags::plugin_name { + +auto get_translated() -> std::map { + std::map translated = {{autogain, _("Autogain")}, + {bass_enhancer, _("Bass Enhancer")}, + {bass_loudness, _("Bass Loudness")}, + {compressor, _("Compressor")}, + {convolver, _("Convolver")}, + {crossfeed, _("Crossfeed")}, + {crystalizer, _("Crystalizer")}, + {deepfilternet, _("Deep Noise Remover")}, + {deesser, _("Deesser")}, + {delay, _("Delay")}, + {echo_canceller, _("Echo Canceller")}, + {equalizer, _("Equalizer")}, + {exciter, _("Exciter")}, + {expander, _("Expander")}, + {filter, _("Filter")}, + {gate, _("Gate")}, + {level_meter, _("Level Meter")}, + {limiter, _("Limiter")}, + {loudness, _("Loudness")}, + {maximizer, _("Maximizer")}, + {multiband_compressor, _("Multiband Compressor")}, + {multiband_gate, _("Multiband Gate")}, + {pitch, _("Pitch")}, + {reverb, _("Reverberation")}, + {rnnoise, _("Noise Reduction")}, + {speex, _("Speech Processor")}, + {stereo_tools, _("Stereo Tools")}}; + + return translated; +} + +auto get_base_name(std::string_view name) -> std::string { + if (name.starts_with(tags::plugin_name::autogain)) { + return tags::plugin_name::autogain; + } + + if (name.starts_with(tags::plugin_name::bass_enhancer)) { + return tags::plugin_name::bass_enhancer; + } + + if (name.starts_with(tags::plugin_name::bass_loudness)) { + return tags::plugin_name::bass_loudness; + } + + if (name.starts_with(tags::plugin_name::compressor)) { + return tags::plugin_name::compressor; + } + + if (name.starts_with(tags::plugin_name::convolver)) { + return tags::plugin_name::convolver; + } + + if (name.starts_with(tags::plugin_name::crossfeed)) { + return tags::plugin_name::crossfeed; + } + + if (name.starts_with(tags::plugin_name::crystalizer)) { + return tags::plugin_name::crystalizer; + } + + if (name.starts_with(tags::plugin_name::deepfilternet)) { + return tags::plugin_name::deepfilternet; + } + + if (name.starts_with(tags::plugin_name::deesser)) { + return tags::plugin_name::deesser; + } + + if (name.starts_with(tags::plugin_name::delay)) { + return tags::plugin_name::delay; + } + + if (name.starts_with(tags::plugin_name::echo_canceller)) { + return tags::plugin_name::echo_canceller; + } + + if (name.starts_with(tags::plugin_name::equalizer)) { + return tags::plugin_name::equalizer; + } + + if (name.starts_with(tags::plugin_name::exciter)) { + return tags::plugin_name::exciter; + } + + if (name.starts_with(tags::plugin_name::expander)) { + return tags::plugin_name::expander; + } + + if (name.starts_with(tags::plugin_name::filter)) { + return tags::plugin_name::filter; + } + + if (name.starts_with(tags::plugin_name::gate)) { + return tags::plugin_name::gate; + } + + if (name.starts_with(tags::plugin_name::level_meter)) { + return tags::plugin_name::level_meter; + } + + if (name.starts_with(tags::plugin_name::limiter)) { + return tags::plugin_name::limiter; + } + + if (name.starts_with(tags::plugin_name::loudness)) { + return tags::plugin_name::loudness; + } + + if (name.starts_with(tags::plugin_name::maximizer)) { + return tags::plugin_name::maximizer; + } + + if (name.starts_with(tags::plugin_name::multiband_compressor)) { + return tags::plugin_name::multiband_compressor; + } + + if (name.starts_with(tags::plugin_name::multiband_gate)) { + return tags::plugin_name::multiband_gate; + } + + if (name.starts_with(tags::plugin_name::pitch)) { + return tags::plugin_name::pitch; + } + + if (name.starts_with(tags::plugin_name::reverb)) { + return tags::plugin_name::reverb; + } + + if (name.starts_with(tags::plugin_name::rnnoise)) { + return tags::plugin_name::rnnoise; + } + + if (name.starts_with(tags::plugin_name::speex)) { + return tags::plugin_name::speex; + } + + if (name.starts_with(tags::plugin_name::stereo_tools)) { + return tags::plugin_name::stereo_tools; + } + + return ""; +} + +auto get_id(const std::string& name) -> uint { + std::smatch matches; + + std::regex_search(name, matches, id_regex); + + if (matches.size() != 2U) { + return 0U; + } + + if (uint id = 0U; util::str_to_num(matches[1], id)) { + return id; + } + + return 0U; +} + +} // namespace tags::plugin_name diff --git a/src/test_signals.cpp b/src/test_signals.cpp new file mode 100644 index 0000000..21ea776 --- /dev/null +++ b/src/test_signals.cpp @@ -0,0 +1,239 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "test_signals.hpp" + +namespace { + +constexpr auto pi_x_2 = 2.0F * std::numbers::pi_v; + +void on_process(void* userdata, spa_io_position* position) { + auto* d = static_cast(userdata); + + const auto n_samples = position->clock.duration; + const auto rate = position->clock.rate.denom; + + if (n_samples == 0 || rate == 0) { + return; + } + + if (rate != d->ts->rate || n_samples != d->ts->n_samples) { + d->ts->rate = rate; + d->ts->n_samples = n_samples; + + d->ts->sine_phase = 0.0F; + } + + // util::warning("processing: " + util::to_string(n_samples)); + + auto* out_left = static_cast(pw_filter_get_dsp_buffer(d->out_left, n_samples)); + auto* out_right = static_cast(pw_filter_get_dsp_buffer(d->out_right, n_samples)); + + if (out_left == nullptr || out_right == nullptr) { + return; + } + + std::span left_out(out_left, n_samples); + std::span right_out(out_right, n_samples); + + const auto phase_delta = pi_x_2 * d->ts->sine_frequency / static_cast(rate); + + for (uint n = 0U; n < n_samples; n++) { + float signal = 0.0F; + left_out[n] = 0.0F; + right_out[n] = 0.0F; + + switch (d->ts->signal_type) { + case TestSignalType::sine_wave: { + d->ts->sine_phase += phase_delta; + + if (d->ts->sine_phase >= pi_x_2) { + d->ts->sine_phase -= pi_x_2; + } + + signal = 0.5F * std::sin(d->ts->sine_phase); + + break; + } + case TestSignalType::gaussian: { + signal = d->ts->white_noise(); + + break; + } + case TestSignalType::pink: { + break; + } + } + + if (d->ts->create_left_channel) { + left_out[n] = signal; + } + + if (d->ts->create_right_channel) { + right_out[n] = signal; + } + } +} + +void on_filter_state_changed(void* userdata, pw_filter_state old, pw_filter_state state, const char* error) { + auto* d = static_cast(userdata); + + d->ts->state = state; + + switch (state) { + case PW_FILTER_STATE_ERROR: + d->ts->can_get_node_id = false; + break; + case PW_FILTER_STATE_UNCONNECTED: + d->ts->can_get_node_id = false; + break; + case PW_FILTER_STATE_CONNECTING: + d->ts->can_get_node_id = false; + break; + case PW_FILTER_STATE_STREAMING: + d->ts->can_get_node_id = true; + break; + case PW_FILTER_STATE_PAUSED: + d->ts->can_get_node_id = true; + break; + default: + break; + } +} + +const struct pw_filter_events filter_events = {.state_changed = on_filter_state_changed, .process = on_process}; + +} // namespace + +TestSignals::TestSignals(PipeManager* pipe_manager) : pm(pipe_manager), random_generator(rd()) { + pf_data.ts = this; + + const auto* filter_name = "ee_test_signals"; + + pm->lock(); + + auto* props_filter = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_filter, PW_KEY_APP_ID, tags::app::id); + pw_properties_set(props_filter, PW_KEY_NODE_NAME, filter_name); + pw_properties_set(props_filter, PW_KEY_NODE_DESCRIPTION, "Easy Effects Filter"); + pw_properties_set(props_filter, PW_KEY_NODE_DRIVER, "true"); + pw_properties_set(props_filter, PW_KEY_MEDIA_TYPE, "Audio"); + pw_properties_set(props_filter, PW_KEY_MEDIA_CATEGORY, "Source"); + pw_properties_set(props_filter, PW_KEY_MEDIA_ROLE, "DSP"); + // pw_properties_set(props_filter, PW_KEY_MEDIA_CLASS, tags::pipewire::media_class::output_stream); + + filter = pw_filter_new(pm->core, filter_name, props_filter); + + // left channel output + + auto* props_out_left = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_out_left, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_out_left, PW_KEY_PORT_NAME, "output_FL"); + pw_properties_set(props_out_left, "audio.channel", "FL"); + + pf_data.out_left = static_cast(pw_filter_add_port(filter, PW_DIRECTION_OUTPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, + sizeof(port), props_out_left, nullptr, 0)); + + // right channel output + + auto* props_out_right = pw_properties_new(nullptr, nullptr); + + pw_properties_set(props_out_right, PW_KEY_FORMAT_DSP, "32 bit float mono audio"); + pw_properties_set(props_out_right, PW_KEY_PORT_NAME, "output_FR"); + pw_properties_set(props_out_right, "audio.channel", "FR"); + + pf_data.out_right = static_cast(pw_filter_add_port( + filter, PW_DIRECTION_OUTPUT, PW_FILTER_PORT_FLAG_MAP_BUFFERS, sizeof(port), props_out_right, nullptr, 0)); + + if (pw_filter_connect(filter, PW_FILTER_FLAG_RT_PROCESS, nullptr, 0) != 0) { + using namespace std::string_literals; + + pm->unlock(); + + util::warning(filter_name + " cannot connect the filter to PipeWire!"s); + + return; + } + + pw_filter_add_listener(filter, &listener, &filter_events, &pf_data); + + pm->sync_wait_unlock(); + + while (!can_get_node_id) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + if (state == PW_FILTER_STATE_ERROR) { + using namespace std::string_literals; + + util::warning(filter_name + " is in an error"s); + + return; + } + } + + pm->lock(); + + node_id = pw_filter_get_node_id(filter); + + pm->sync_wait_unlock(); +} + +TestSignals::~TestSignals() { + util::debug("destroyed"); + + pm->lock(); + + spa_hook_remove(&listener); + + pw_filter_set_active(filter, false); + + pw_filter_disconnect(filter); + + pw_filter_destroy(filter); + + pm->sync_wait_unlock(); +} + +void TestSignals::set_state(const bool& state) { + sine_phase = 0.0F; + + if (state) { + for (const auto& link : pm->link_nodes(node_id, pm->ee_sink_node.id, false, false)) { + list_proxies.push_back(link); + } + } else { + pm->destroy_links(list_proxies); + + list_proxies.clear(); + } +} + +void TestSignals::set_frequency(const float& value) { + sine_frequency = value; + + sine_phase = 0.0F; +} + +auto TestSignals::white_noise() -> float { + const auto v = normal_distribution(random_generator); + + return (v > 1.0F) ? 1.0F : ((v < -1.0F) ? -1.0F : v); +} diff --git a/src/ui_helpers.cpp b/src/ui_helpers.cpp new file mode 100644 index 0000000..59cbcbc --- /dev/null +++ b/src/ui_helpers.cpp @@ -0,0 +1,266 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "ui_helpers.hpp" + +namespace { + +uint widget_serial = 0U; + +std::locale user_locale; + +std::map map_ignore_filter_idle_add; + +GSettings* global_app_settings = nullptr; + +} // namespace + +namespace ui { + +using namespace std::string_literals; + +void show_autohiding_toast(AdwToastOverlay* toast_overlay, + const std::string& text, + const uint& timeout, + const AdwToastPriority& priority) { + // Construct AdwToast + auto* toast = adw_toast_new(text.c_str()); + + adw_toast_set_timeout(toast, timeout); + adw_toast_set_priority(toast, priority); + + // Show AdwToast + adw_toast_overlay_add_toast(toast_overlay, toast); +} + +void show_fixed_toast(AdwToastOverlay* toast_overlay, const std::string& text, const AdwToastPriority& priority) { + show_autohiding_toast(toast_overlay, text, 0U, priority); +} + +auto missing_plugin_box(const std::string& name, const std::string& package) -> GtkWidget* { + auto* box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); + + gtk_widget_set_margin_start(box, 6); + gtk_widget_set_margin_end(box, 6); + gtk_widget_set_margin_bottom(box, 6); + gtk_widget_set_margin_top(box, 6); + gtk_widget_set_valign(box, GTK_ALIGN_CENTER); + + auto* status_page = adw_status_page_new(); + + try { + // For translators: {} is replaced by the effect name. + const auto format_title = fmt::runtime(_("{} Not Available")); + + // For translators: the first {} is replaced by the effect name, the second {} is replaced by the package name. + auto format_descr = + fmt::runtime(_("The software required for the {} effect, \"{}\", is not installed. Consider using the Easy " + "Effects Flatpak package or installing the software yourself.")); + + if (name == tags::plugin_name::rnnoise) { + // For translators: the first {} is replaced by the effect name, the second {} is replaced by the package name. + format_descr = + fmt::runtime(_("The {} effect was disabled when Easy Effects was compiled. This is perhaps since the " + "software required for this effect, \"{}\", was not available. Consider using the Easy " + "Effects Flatpak package or building your own Easy Effects package.")); + } + + const std::string translated_name = tags::plugin_name::get_translated().at(name); + + adw_status_page_set_title(ADW_STATUS_PAGE(status_page), fmt::format(format_title, translated_name).c_str()); + adw_status_page_set_description(ADW_STATUS_PAGE(status_page), + fmt::format(format_descr, translated_name, package).c_str()); + } catch (...) { + } + + adw_status_page_set_icon_name(ADW_STATUS_PAGE(status_page), "emblem-music-symbolic"); + + gtk_box_append(GTK_BOX(box), status_page); + + return box; +} + +void show_simple_message_dialog(GtkWidget* parent, const std::string& title, const std::string& descr) { + if (parent == nullptr) { + return; + } + + auto* dialog = adw_message_dialog_new(GTK_WINDOW(parent), title.c_str(), descr.c_str()); + + const std::string response_id = "close"; + adw_message_dialog_add_response(ADW_MESSAGE_DIALOG(dialog), response_id.c_str(), "Close (Press ESC)"); + adw_message_dialog_set_default_response(ADW_MESSAGE_DIALOG(dialog), response_id.c_str()); + + gtk_window_present(GTK_WINDOW(dialog)); +} + +auto parse_spinbutton_output(GtkSpinButton* button, const char* unit, const bool& lower_bound) -> bool { + auto* adjustment = gtk_spin_button_get_adjustment(button); + auto value = gtk_adjustment_get_value(adjustment); + auto precision = gtk_spin_button_get_digits(button); + auto str_unit = (unit != nullptr) ? (" "s + unit) : ""s; + + bool minus_infinity = (!lower_bound && value <= util::minimum_db_d_level); + + auto text = (minus_infinity) ? (_("-inf") + str_unit) + // format string: 0 = value, 1 = precision, 2 = unit + : fmt::format(ui::get_user_locale(), "{0:.{1}Lf}{2}", value, precision, str_unit); + + gtk_editable_set_text(GTK_EDITABLE(button), text.c_str()); + + return true; +} + +auto parse_spinbutton_input(GtkSpinButton* button, double* new_value, const bool& lower_bound) -> int { + auto min = 0.0; + auto max = 0.0; + + gtk_spin_button_get_range(button, &min, &max); + + std::istringstream str(gtk_editable_get_text(GTK_EDITABLE(button))); + + if (!lower_bound) { + auto s = str.str(); + + if (s.starts_with(_("-inf"))) { + *new_value = util::minimum_db_d_level; + + return 1; + } + } + + str.imbue(ui::get_user_locale()); + + auto v = 0.0; + + if (str >> v) { + *new_value = std::clamp(v, min, max); + + return 1; + } + + return GTK_INPUT_ERROR; +} + +auto get_new_filter_serial() -> uint { + widget_serial++; + + return widget_serial; +} + +void set_ignore_filter_idle_add(const uint& serial, const bool& state) { + map_ignore_filter_idle_add[serial] = state; +} + +auto get_ignore_filter_idle_add(const uint& serial) -> bool { + return map_ignore_filter_idle_add[serial]; +} + +void save_user_locale() { + try { + user_locale = std::locale(""); + } catch (...) { + util::warning("We could not get the user locale in your system! Your locale configuration is broken!"); + + util::warning("Falling back to the C locale"); + } +} + +auto get_user_locale() -> std::locale { + return user_locale; +} + +void update_level(GtkLevelBar* w_left, + GtkLabel* w_left_label, + GtkLevelBar* w_right, + GtkLabel* w_right_label, + const float& left, + const float& right) { + if (!GTK_IS_LEVEL_BAR(w_left) || !GTK_IS_LABEL(w_left_label) || !GTK_IS_LEVEL_BAR(w_right) || + !GTK_IS_LABEL(w_right_label)) { + return; + } + + if (left >= -99.0F) { + // Level bar widget needs double value + const auto linear_value = static_cast(std::clamp(util::db_to_linear(left), 0.0F, 1.0F)); + + gtk_level_bar_set_value(w_left, linear_value); + gtk_label_set_text(w_left_label, fmt::format("{0:.0f}", left).c_str()); + } else { + gtk_level_bar_set_value(w_left, 0.0); + gtk_label_set_text(w_left_label, "-99"); + } + + if (right >= -99.0F) { + // Level bar widget needs double value + const auto linear_value = static_cast(std::clamp(util::db_to_linear(right), 0.0F, 1.0F)); + + gtk_level_bar_set_value(w_right, linear_value); + gtk_label_set_text(w_right_label, fmt::format("{0:.0f}", right).c_str()); + } else { + gtk_level_bar_set_value(w_right, 0.0); + gtk_label_set_text(w_right_label, "-99"); + } +} + +auto get_plugin_credit_translated(const std::string& plugin_package) -> std::string { + try { + // For translators: {} is replaced by the library used by the plugin. I.e. "Using Calf Studio". + const auto format = fmt::runtime(_("Using {}")); + + return fmt::format(format, plugin_package); + } catch (...) { + return plugin_package; + } +} + +void append_to_string_list(GtkStringList* string_list, const std::string& name) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(string_list)); n++) { + if (gtk_string_list_get_string(string_list, n) == name) { + return; + } + } + + gtk_string_list_append(string_list, name.c_str()); +} + +void remove_from_string_list(GtkStringList* string_list, const std::string& name) { + for (guint n = 0U; n < g_list_model_get_n_items(G_LIST_MODEL(string_list)); n++) { + if (gtk_string_list_get_string(string_list, n) == name) { + gtk_string_list_remove(string_list, n); + + return; + } + } +} + +void init_global_app_settings() { + global_app_settings = g_settings_new(tags::app::id); +} + +void unref_global_app_settings() { + g_object_unref(global_app_settings); +} + +auto get_global_app_settings() -> GSettings* { + return global_app_settings; +} + +} // namespace ui diff --git a/src/util.cpp b/src/util.cpp new file mode 100644 index 0000000..1ced882 --- /dev/null +++ b/src/util.cpp @@ -0,0 +1,464 @@ +/* + * Copyright © 2017-2023 Wellington Wallace + * + * This file is part of Easy Effects. + * + * Easy Effects is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Easy Effects is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Easy Effects. If not, see . + */ + +#include "util.hpp" + +namespace util { + +auto prepare_debug_message(const std::string& message, source_location location) -> std::string { + auto file_path = std::filesystem::path{location.file_name()}; + + std::ostringstream msg_stream; + + msg_stream << "\t" << file_path.filename().string() << ":" << location.line() << "\t" << message; + + return msg_stream.str(); +} + +void debug(const std::string& s, source_location location) { + g_debug(prepare_debug_message(s, location).c_str(), "%s"); +} + +void error(const std::string& s, source_location location) { + g_error(prepare_debug_message(s, location).c_str(), "%s"); +} + +void critical(const std::string& s, source_location location) { + g_critical(prepare_debug_message(s, location).c_str(), "%s"); +} + +void warning(const std::string& s, source_location location) { + g_warning(prepare_debug_message(s, location).c_str(), "%s"); +} + +void info(const std::string& s, source_location location) { + g_info(prepare_debug_message(s, location).c_str(), "%s"); +} + +void print_thread_id() { + std::cout << "thread id: " << std::this_thread::get_id() << std::endl; +} + +auto normalize(const double& x, const double& max, const double& min) -> double { + // Mainly used for gating level bar in gate effects + return (x - min) / (max - min); +} + +auto linear_to_db(const float& amp) -> float { + if (amp >= minimum_linear_level) { + return 20.0F * std::log10(amp); + } + + return minimum_db_level; +} + +auto linear_to_db(const double& amp) -> double { + if (amp >= minimum_linear_d_level) { + return 20.0 * std::log10(amp); + } + + return minimum_db_d_level; +} + +auto db_to_linear(const float& db) -> float { + return std::exp((db / 20.0F) * std::log(10.0F)); +} + +auto db_to_linear(const double& db) -> double { + return std::exp((db / 20.0) * std::log(10.0)); +} + +auto db20_gain_to_linear(GValue* value, GVariant* variant, gpointer user_data) -> gboolean { + const gfloat v_linear = std::pow(10.0F, static_cast(g_variant_get_double(variant)) / 20.0F); + + g_value_set_float(value, v_linear); + + return 1; +} + +auto linear_gain_to_db20(const GValue* value, const GVariantType* expected_type, gpointer user_data) -> GVariant* { + const gdouble v_db = 20.0 * std::log10(static_cast(g_value_get_float(value))); + + return g_variant_new_double(v_db); +} + +auto db10_gain_to_linear(GValue* value, GVariant* variant, gpointer user_data) -> gboolean { + const gfloat v_linear = std::pow(10.0F, static_cast(g_variant_get_double(variant)) / 10.0F); + + g_value_set_float(value, v_linear); + + return 1; +} + +auto double_to_float(GValue* value, GVariant* variant, gpointer user_data) -> gboolean { + g_value_set_float(value, static_cast(g_variant_get_double(variant))); + + return 1; +} + +auto db20_gain_to_linear_double(GValue* value, GVariant* variant, gpointer user_data) -> gboolean { + const gdouble v_linear = std::pow(10.0, g_variant_get_double(variant) / 20.0); + + g_value_set_double(value, v_linear); + + return 1; +} + +auto linear_double_gain_to_db20(const GValue* value, const GVariantType* expected_type, gpointer user_data) + -> GVariant* { + const gdouble v_db = 20.0 * std::log10(g_value_get_double(value)); + + return g_variant_new_double(v_db); +} + +auto double_x10_to_int(GValue* value, GVariant* variant, gpointer user_data) -> gboolean { + g_value_set_int(value, static_cast(g_variant_get_double(variant) * 10.0)); + + return 1; +} + +auto ms_to_ns(GValue* value, GVariant* variant, gpointer user_data) -> gboolean { + g_value_set_uint64(value, static_cast(g_variant_get_double(variant) * 1000000.0)); + + return 1; +} + +auto remove_filename_extension(const std::string& basename) -> std::string { + return basename.substr(0U, basename.find_last_of('.')); +} + +auto gchar_array_to_vector(gchar** gchar_array, const bool free_data) -> std::vector { + std::vector output; + + if (gchar_array != nullptr) { + for (int n = 0; gchar_array[n] != nullptr; n++) { + output.emplace_back(gchar_array[n]); + } + } + + if (free_data) { + g_strfreev(gchar_array); + } + + return output; +} + +auto make_gchar_pointer_vector(const std::vector& input) -> std::vector { + std::vector output; + + output.reserve(input.size()); + + for (const auto& v : input) { + output.push_back(v.c_str()); + } + + output.push_back(nullptr); // char* arrays passed to g_settings_set_strv must have a null pointer as the last element + + return output; +} + +auto gsettings_get_color(GSettings* settings, const char* key) -> GdkRGBA { + GdkRGBA rgba; + std::array color{}; + + g_settings_get(settings, key, "(dddd)", color.data(), &color[1], &color[2], &color[3]); + + rgba.red = static_cast(color[0]); + rgba.green = static_cast(color[1]); + rgba.blue = static_cast(color[2]); + rgba.alpha = static_cast(color[3]); + + return rgba; +} + +auto gsettings_get_string(GSettings* settings, const char* key) -> std::string { + auto* s = g_settings_get_string(settings, key); + + std::string output = s; + + g_free(s); + + return output; +} + +// The following is not used and it was made only for reference. May be removed in the future. +// GIO recommends to not use g_settings_schema_key_get_range in "normal programs". +auto gsettings_get_range(GSettings* settings, const char* key) -> std::pair { + GSettingsSchema* schema = nullptr; + const gchar* type = nullptr; + GVariant* detail = nullptr; + std::string min_v; + std::string max_v; + + g_object_get(settings, "settings-schema", &schema, nullptr); + + auto* schema_key = g_settings_schema_get_key(schema, key); + + auto* range = g_settings_schema_key_get_range(schema_key); + + g_variant_get(range, "(&sv)", &type, &detail); + + if (strcmp(type, "range") == 0) { + GVariant* min = nullptr; + GVariant* max = nullptr; + gchar* smin = nullptr; + gchar* smax = nullptr; + + g_variant_get(detail, "(**)", &min, &max); + + smin = g_variant_print(min, 0); + smax = g_variant_print(max, 0); + + min_v = smin; + max_v = smax; + + g_variant_unref(min); + g_variant_unref(max); + g_free(smin); + g_free(smax); + } + + g_variant_unref(detail); + g_variant_unref(range); + g_settings_schema_key_unref(schema_key); + g_settings_schema_unref(schema); + + return {min_v, max_v}; +} + +auto add_new_blocklist_entry(GSettings* settings, const std::string& name) -> bool { + if (name.empty()) { + return false; + } + + using namespace std::string_literals; + + auto list = util::gchar_array_to_vector(g_settings_get_strv(settings, "blocklist")); + + if (std::any_of(list.cbegin(), list.cend(), [&](const auto& str) { return str == name; })) { + util::debug("entry already present in the list"); + + return false; + } + + list.push_back(name); + + g_settings_set_strv(settings, "blocklist", util::make_gchar_pointer_vector(list).data()); + + util::debug("new entry has been added to the blocklist"); + + return true; +} + +void remove_blocklist_entry(GSettings* settings, const std::string& name) { + using namespace std::string_literals; + + auto list = util::gchar_array_to_vector(g_settings_get_strv(settings, "blocklist")); + + list.erase(std::remove_if(list.begin(), list.end(), [=](const auto& a) { return a == name; }), list.end()); + + g_settings_set_strv(settings, "blocklist", util::make_gchar_pointer_vector(list).data()); + + util::debug("an entry has been removed from the blocklist"); +} + +void idle_add(std::function cb) { + struct Data { + std::function cb; + }; + + auto* d = new Data(); + + d->cb = std::move(cb); + + g_idle_add((GSourceFunc) + + [](Data* d) { + if (d == nullptr) { + return G_SOURCE_REMOVE; + } + + if (d->cb == nullptr) { + return G_SOURCE_REMOVE; + } + + d->cb(); + + delete d; + + return G_SOURCE_REMOVE; + }, + d); +} + +auto get_files_name(const std::filesystem::path& dir_path, const std::string& ext) -> std::vector { + std::vector names; + + for (std::filesystem::directory_iterator it{dir_path}; it != std::filesystem::directory_iterator{}; ++it) { + if (std::filesystem::is_regular_file(it->status())) { + if (it->path().extension() == ext) { + names.push_back(it->path().stem().string()); + } + } + } + + return names; +} + +void reset_all_keys_except(GSettings* settings, const std::vector& blocklist, bool delay) { + GSettingsSchema* schema = nullptr; + + g_object_get(settings, "settings-schema", &schema, nullptr); + + gchar** keys = g_settings_schema_list_keys(schema); + + /* + For some reason the delayed mode breaks the binding between gsettings and the plugins. Until We figure out the + reasons delayed mode will be disabled. + */ + + // Gsettings should have a maximum of 256 delayed changes in delay mode (see issue #2215). + // If surpassed, the whole application crashes (it happens on the Equalizer). + // Anyway we set the maximum at the half (128) for satefy reasons. + uint keys_changed = 0U; + uint max_changes = 128U; + + if (delay) { + g_settings_delay(settings); + } + + for (int i = 0; keys[i] != nullptr; i++) { + if (std::ranges::find(blocklist, keys[i]) != blocklist.end()) { + continue; + } + + g_settings_reset(settings, keys[i]); + keys_changed++; + + if (delay && keys_changed >= max_changes) { + g_settings_apply(settings); + keys_changed = 0U; + } + } + + if (delay && keys_changed > 0U) { + g_settings_apply(settings); + } + + g_settings_schema_unref(schema); + g_strfreev(keys); +} + +auto str_contains(const std::string& haystack, const std::string& needle) -> bool { + // This helper indicates if the needle is contained in the haystack string, + // but the empty needle will NOT return true. + + // Instead .find method of C++ string class returns a size_type different + // than std::string::npos when the needle is empty indicating that an empty + // string IS CONTAINED in the haystack. That's pointless, so here is this helper. + + if (needle.empty()) { + return false; + } + + return (haystack.find(needle) != std::string::npos); +} + +auto compare_versions(const std::string& v0, const std::string& v1) -> int { + /* This is an util to compare two strings as semver, mainly used to compare + two Pipewire versions. + The format should adhere to what is defined at `https://semver.org/`. + The additional extension label, if present, is ignored and fortunately + we don't need to look at it since Pipewire does not use it. + + Given two version strings v0 and v1, this util returns an integer: + - 0 if the versions are equal; + - 1 if v0 is higher than v1; + - -1 if v0 is lower than v1; + - Whichever other number if the comparison fails (i.e. giving one or + both strings not respecting the semver format). + */ + + struct SemVer { + int major = -1; + int minor = -1; + int patch = -1; + }; + + static const auto re_semver = std::regex(R"(^(\d+)\.?(\d+)?\.?(\d+)?)"); + + std::array sv{}; + std::array v{v0, v1}; + + // SemVer struct initialization. Loop the given strings. + for (int v_idx = 0; v_idx < 2; v_idx++) { + // For both strings, execute the regular expression search, + // then loop through the submatches. + std::smatch match; + + if (!std::regex_search(v[v_idx], match, re_semver)) { + // The given string is not a semver: the comparison failed. + return 9; + } + + // Submatches lookup + for (int sub_idx = 0, size = match.size(); sub_idx < size; sub_idx++) { + // Fill the structure converting the string to an integer. + switch (sub_idx) { + case 1: // major + str_to_num(match[sub_idx].str(), sv[v_idx].major); + break; + + case 2: // minor + str_to_num(match[sub_idx].str(), sv[v_idx].minor); + break; + + case 3: // patch + str_to_num(match[sub_idx].str(), sv[v_idx].patch); + break; + + default: + // sub_idx = 0: the first group which is the entire match we don't need. + break; + } + } + } + + // Now that we are sure to have two valid semver, let's compare each part. + if (sv[0].major < sv[1].major) { + return -1; + } else if (sv[0].major > sv[1].major) { + return 1; + } + + if (sv[0].minor < sv[1].minor) { + return -1; + } else if (sv[0].minor > sv[1].minor) { + return 1; + } + + if (sv[0].patch < sv[1].patch) { + return -1; + } else if (sv[0].patch > sv[1].patch) { + return 1; + } + + return 0; +} + +} // namespace util diff --git a/util/NEWS.yaml b/util/NEWS.yaml new file mode 100644 index 0000000..c0f00da --- /dev/null +++ b/util/NEWS.yaml @@ -0,0 +1,511 @@ +--- +Version: UNRELEASED_VERSION +Date: UNRELEASED_DATE + +Description: +- Features∶ +- + +- Bug fixes∶ +- + +- Other notes∶ +- + +--- +Version: 7.1.1 +Date: 2023-10-27 + +Description: +- Features∶ +- The spectrum has a new option that allows the dynamic vertical scale to be disabled. +- Improved compatibility with the latest LSP releases. + +- Bug fixes∶ +- Fixed an incorrect drawing of the impulse response file characteristics + +- Other notes∶ + +--- +Version: 7.1.0 +Date: 2023-09-07 + +Description: +- Features∶ + +- Bug fixes∶ +- Fixed a small bug the prevented the noise reduction voice activity threshold from being properly initialized. + +- Other notes∶ + +--- +Version: 7.0.9 +Date: 2023-09-07 + +Description: +- Features∶ +- Added a new control to the noise reduction plugin that allows the voice detection to be disabled. + +- Bug fixes∶ + +- Other notes∶ + +--- +Version: 7.0.8 +Date: 2023-08-29 + +Description: +- Features∶ +- The Filter effect has been improved with new parameters since it has been ported from Calf Studio to Linux Studio Plugins. +- Noise reduction by RNNoise has been improved with the addition of Release and VAD Threshold controls. +- Noise reduction by RNNoise can now mix the original and denoised signals to avoid the output to sound too "dry". + +- Bug fixes∶ + +- Other notes∶ +- This release is intended to work with versions of Linux Studio Plugins equal or greater than "1.2.10". +- EasyEffects is now buildable also with libc++. + +--- +Version: 7.0.7 +Date: 2023-08-11 + +Description: +- Features∶ +- The Expander from Linux Studio Plugins can be used in Easy Effects. +- The Equalizer bands now have an additional gain control that allows for more efficient input of values that are hard to set in the scale. More details at https://github.com/wwmm/easyeffects/issues/1383. +- Added the ability to select and load multiple files in the opening dialogs for presets, Convolver impulse responses and RNNoise models. + +- Bug fixes∶ +- Fixed the Solo button in the Equalizer band settings. + +- Other notes∶ +- Easy Effects folders under `/etc` have been deprecated and presets located there won't be loaded anymore. At the moment only local presets under `~/.config/easyeffects` are automatically loaded in the Presets Menu. In the future we will implement a new system to install, manage and import Community Presets. + +--- +Version: 7.0.6 +Date: 2023-07-28 + +Description: +- Features∶ +- An "Experimental Features" section was added to our preferences window. +- The native window of the LSP plugins can be used. This is an experimental feature intended only for advanced users. So expect some bugs. +- Fractional semitone values can now be used in the Pitch Shift effect. + +- Bug fixes∶ +- The input/output device dropdown in our PipeWire tab is updated when the system default device changes and `Use Default` is enabled. This fixes issue https://github.com/wwmm/easyeffects/issues/1989. + +- Other notes∶ + +--- +Version: 7.0.5 +Date: 2023-06-11 + +Description: +- Features∶ +- A new `Level Meter` plugin based on `libebur128` has been added. +- The Pitch plugin now uses the library SoundTouch instead of Rubberband. Hopefully some of the mysterious crashes that were happening with Rubbernand are not going to happen anymore. +- Improved compatibility with recent PipeWire versions. More information at https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3196 + +- Bug fixes∶ +- Active Equalizer filters are not set to `Bell` type anymore when the number of bands changes. + +- Other notes∶ +- Rabberband is not a dependency anymore since it has been replaced by SoundTouch. + +--- +Version: 7.0.4 +Date: 2023-05-01 + +Description: +- Features∶ +- The presets menu now asks for confirmation before saving/deleting a preset file. + +- Bug fixes∶ +- The plugin reset should not make its controls innefective anymore. + +- Other notes∶ +- Speex is no longer incorrectly listed as a build dependency (speexdsp is still a build dependency) +- RNNoise is no longer an autodependency. It is now required by default, if not available it must be explicitly disabled with -Denable-rnnoise=false + +--- +Version: 7.0.3 +Date: 2023-04-06 + +Description: +- Features∶ +- Updated translations. + +- Bug fixes∶ +- A small mistake was done in the last release. Making a new one to make sure people have the right branch in the package + +--- +Version: 7.0.2 +Date: 2023-04-06 + +Description: +- Features∶ +- The Equalizer "sort bands" feature is now ordering bands on GSettings, so the result can be saved into presets. +- Improved performance when resetting keys. + +- Bug fixes∶ +- Fixed the "Large Empty Hall" preset selection in the Reverberation effect. +- Fixed some misuses of PipeWire's API that can potentially fix some random bugs some users are facing. + +- Other notes∶ +- As we are removing code deprecated by `GTK 4.10` the minimum GTK version has been increased. + +--- +Version: 7.0.1 +Date: 2023-02-26 + +Description: +- Features∶ +- The spectrum plugin update rate was improved. Different sampling rates should lead to similar update frequencies visually. +- The update interval used by level meters and the spectrum can be customized by the user. +- The equalizer band gain slider value can be updated in larger steps. Fine grain control is still possible through the keyboard up/down keys. +- Small improvements to the echo canceller. + +- Bug fixes∶ +- The echo canceller probes were not being linked to the soundcard after the move to multiple filters intances. This should be fixed now. + + +--- +Version: 7.0.0 +Date: 2022-11-02 + +Description: +- Features∶ +- It is now possible to add more than one filter instance to the effects pipeline. +- A new `Speech Processor` plugin based on the Speex library was added. Besides providing noise suppression it also can detect voice activity. It is a decent alternative to the cases whre the rnnoise library does not work well. +- Improved compatibility with Linux Studio Plugins `1.2.3`. +- GraphicEQ presets can be imported into the Equalizer effect. +- The application name has been changed to `Easy Effects` to adhere to the naming conventions of GNOME Human Interface Guidelines. +- The documentation has been updated. +- Improved presets autoloading. +- The Autogain silence threshold can now be configured by the user. +- Dry and wet controls added to the Stereo Tools effect. +- The echo canceller now has a residual noise suppression control also based on the Speex library. + +- Bug fixes∶ +- When the mouse was hovering over a chart the wrong value for the x axis coordinate was being shown. This regression is fixed. + +- Other notes∶ +- Because of the new multiple instances feature, the preset format has changed, but the old one is still compatible to be loaded. Anyway take in consideration that saving the current preset will always write it in the new format. + +--- +Version: 6.3.0 +Date: 2022-09-02 + +Description: +- Features∶ +- Multiband Gate implementation has been migrated from CALF to Linux Studio Plugins. +- The preset autoloading code compatibility with bluez5 devices has been improved. +- Wet/dry controls were added for some plugins +- Effect interface is no longer loaded when the related lv2 plugin is not installed on the system. In its place a status message to the user is shown. +- The documentation has been updated +- Improved debug messages +- Updated translations + +- Bug fixes∶ + +- Other notes∶ + +--- +Version: 6.2.8 +Date: 2022-07-25 + +Description: +- Features∶ +- Improved translations + +- Bug fixes∶ +- Fixed a bug where EasyEffects could crash when closing its window while effects were being applied. + +- Other notes∶ + +--- +Version: 6.2.7 +Date: 2022-07-18 + +Description: +- Features∶ +- The bypass state can be saved to the preset file. The reasons why this was done can be seen at https://github.com/wwmm/easyeffects/issues/1039 +- The preset autoloading code compatibility with usb devices has been improved. +- A dialog is shown to the user when a preset fails to load or a preset/impulse file fails to be imported. +- The SideChain Gate plugin from `Linux Studio Plugins` is now used instead of the one from Calf Studio. + +- Bug fixes∶ +- EasyEffects should not crash anymore when the user locale is not properly configured. +- A workaround was implemented in our icon to deal with the lack of proper SVG support in QT. + +- Other notes∶ + +--- +Version: 6.2.6 +Date: 2022-06-22 + +Description: +- Features∶ +- When effects are disable to an application we now set its target metadata to null. This will allow the media session + manager (wireplumber) to properly move the stream to a new device. +- A new configuration option was added. It allows EasyEffects to ignore streams whose purpose is to monitor sink + devices. This will help to fix some of problems our users were having when using OBS. +- The code that shows the stream sample format has been improved +- The rnnoise library is now optional. This should help package maintainers to build + a Debian package. See https://github.com/wwmm/easyeffects/issues/1000 for more information. +- Our logs now show the source code line where the messages are being printed +- Bug fixes∶ +- The "enable effects" checkbox in our window was not being updated when third party programs like pavucontrol + moved the stream away from our virtual devices. This should be fixed now. +- Fixed a crash that could happen when the maximum autogain history was changed. +- Avoid crashes when pw-mididump is running + +--- +Version: 6.2.5 +Date: 2022-04-30 + +Description: +- Features∶ +- The interface of the pitch plugin was improved +- Our application icon is now compatible with desktops that uses QT +- Our blocklist code will use the `application.id` tag if the stream sets it +- In order to avoid problems with the mouse scroll the entries in the applications list shown in our `Players/Recorders` tab do not show a volume scale anymore. More details about the problem and the solution for it can be found on https://github.com/wwmm/easyeffects/issues/1211 and https://github.com/wwmm/easyeffects/issues/1427 +- When no application is available for display in the `Players/Recorders` a message will be shown to the user +- Many translation updates +- Bug fixes∶ +- Fixed a bug where EasyEffeects crashed when the number of points displayed in the spectrum was changed while our pipeline was active and the spectrum widget was visible +- The pipeline latency value displayed in our window could be wrong in some situations. This was fixed. + +--- +Version: 6.2.4 +Date: 2022-03-07 + +Description: +- Features∶ +- There is a new setting allowing the user to select an inactivity timeout for the pipeline. When no client is playing to or recording from our devices the filters will be unlinked after the timeout is reached. This is done to make sure we do not waste CPU power processing silence. +- The autogain plugin now allows the user to select which of the three loudness are used to calculate the geometric mean. +- The autogain plugin now allows the maximum history to be set and does not use `libebur128` histogram mode anymore. This should avoid the cases where the `Integrated` loudness gets stuck forever in the same value. +- EasyEffects icon has been updated in a way that should make it visible in QT desktops. +- Bug fixes∶ +- The command line option that returns the global bypass state is working again. + +--- +Version: 6.2.3 +Date: 2022-01-29 + +Description: +- Features∶ +- The crossfeed filter should deal better with PipeWire's dynamic latency switches. Jumps in volume level should not happen anymore in these situations. + +- Bug fixes∶ + +- Fixed a bug that prevented mono microphones from properly working with EasyEffects + +--- +Version: 6.2.2 +Date: 2022-01-27 + +Description: +- Features∶ +- Support for the next PipeWire release `0.3.44` +- The autogain filter should deal better with PipeWire's dynamic latency switches. Jumps in volume level should not happen anymore in these situations. +- We added an option that allows the volume and mute state of our virtual devices to be reset when EasyEffects starts. It should help with the cases were our devices are muted by the audio server for unknown reasons. +- Better support for computer suspending. +- Updated translations + +- Bug fixes∶ + +- Fixed a bug where trying to create an autoloading profile without having presets caused the application to crash. + +--- +Version: 6.2.1 +Date: 2022-01-05 + +Description: +- Bug fixes∶ +- Fixed a bug where setting a equalizer band `quality` to `zero` would lead to an application crash. + +--- +Version: 6.2.0 +Date: 2022-01-04 + +Description: +- Features∶ +- LibAdwaita is used to create some parts of our window and for handling the switching between dark and light themes. +- The settings menu has been redesigned using LibAdwaita widgets. +- Equalizer APO preset import feature has been improved to apply not only the Bell filter, but also other supported ones (at the moment only the Bandpass filter is not available in LSP plugin). +- The `Reset All Settings` function in our menu should work in Flatpak now. +- We have a new option that allows the user to disable our menus `autohide`. This may help to workaround some bugs Popover menus currently have on gtk4. + +- Bug fixes∶ + +- More robust parsing to import APO presets saved with comma as thousands separator in central frequency band. + +- Other notes∶ + +- The fmt library is a new dependency https://github.com/fmtlib/fmt. At least while the c++ compilers do not implement its features. This is expected to happen in the next years. +- GTKMM and GLIBMM are not a dependency anymore. We now use gtk4 directly. + +--- +Version: 6.1.5 +Date: 2021-11-17 + +Description: +- Features∶ +- It is now possible to combine impulse responses in the Convolver interface. A new impulse file is generated and it should be visible in the impulse list. +- Improved `x axis` drawings in our plots. Now the number of labels is adjusted dynamically depending on our window width. +- The documentation has been updated reflecting the new EasyEffects features. Old references about PulseEffects have been removed. The documentation button has been added in the menu section. + +- Bug fixes∶ + +- When a spinbutton is filled with an out of range value, now it is updated with the lowest/highest value rather than resetting to the previous one. +- The application window now remembers the maximized state and restores it on the next opening event. + +- Other notes∶ + +- The `tbb` library is a new dependency https://www.threadingbuildingblocks.org + +--- +Version: 6.1.4 +Date: 2021-10-16 + +Description: +- Features∶ +- The Limiter and the Multiband Compressor plugins can now use an optional external sidechain. +- The Autogain plugin now allows the user to select which Loudness is used as reference for the volume correction. +- The APO Profile Import feature of Equalizer plugin now parses the "Pre Amplification" parameter. +- Optional Cubic Volume can be enabled in General Settings. + +- Bug fixes∶ + +- The Spectrum plugin was supposed to enter passthrough whenever it was not visible, but this was happening only when our window was closed. +- Improved support for Assistive Technology. +- The probes used in some filters like the Compressor and the Limiter were not being relinked after changing the order of the plugins in the pipeline. It should be working now. + +--- +Version: 6.1.3 +Date: 2021-10-03 + +Description: +- Features∶ +- PipeWire monitor streams are now excluded and removed from the applications list. + +- Bug fixes∶ + +- Hopefully crashes like the one reported at https://github.com/wwmm/easyeffects/issues/1172 are fixed. +- Prevented a case in which Spectrum was crashing. +- Pavucontrol is not added anymore to input applications list on systems with localization different than English. + +--- +Version: 6.1.2 +Date: 2021-09-20 + +Description: +- Features∶ +- Improved compatibility with WirePlumber. This is needed to run on systems that decided to use it instead of the built-in PipeWire session manager. More information at https://github.com/wwmm/easyeffects/issues/1144. + +--- +Version: 6.1.1 +Date: 2021-09-17 + +Description: +- Features∶ +- When trying to add an autoloading profile for a device already in the list its target preset will be updated. This way we can change the profile preset without having to remove and recreating it. +- The preset autoloading support implementation was redesigned again. It should work on more hardware now. For more information see https://github.com/wwmm/easyeffects/issues/1051. +- If the Limiter or the Maximizer are set in the last position of the plugin stack, new plugins are added at the second to last position in order to prevent hardware damage on eventually high output level. +- Removing an application from the blocklist, its previous enabled state is restored. + +- Bug fixes∶ + +- Sometimes when removing imported models from the noise reduction plugin the current used model was not properly updated. This should be fixed now. +- When editing presets files in an external editor, duplicated entries won't be shown in our presets menu. +- Now the blocklist is correctly set when switching presets. +- Now the status of the global bypass button is correctly updated when changing plugin stack. +- Missing icons on the system should not be shown inside the application info UI (if an application icon could not be shown even if you're sure it's correctly installed, please open an issue). +- Some icons not showing in Plasma DE with Breeze icon theme should appear now. + +--- +Version: 6.1.0 +Date: 2021-08-17 + +Description: +- Features∶ +- Updated Chinese translation. +- Updated Italian translation. +- Added support for the compressor parameter `Boost Amount` +- The multiband compressor plugin now uses the stereo multiband compressor plugin from Linux Studio Plugins instead of the one from Calf Studio. +- The limiter plugin now uses the stereo limiter plugin from Linux Studio Plugins instead of the one from Calf Studio. +- LV2 filters now are spawned in PipeWire graph only when loaded the first time. Once loaded, they remain connected until EasyEffects shutdown. + +- Bug fixes∶ + +- The echo canceller sampling rate is now properly set. +- The threshold parameter from the deesser plugin is now saved to the preset file. +- Improved band splitting for crystalizer with new default intensity values. +- Depending on the input gain or output gain values the corresponding level bars could not be aligned. +- When adding more equalizer bands they are set to `Bell` instead of `Off`. +- Equalizer APO presets loading is now working properly on locales different than C. +- Improved linking management between port filter nodes in PipeWire. +- The crystalizer plugin signal amplification was too high before. It should be within more reasonable levels now. + +--- +Version: 6.0.3 +Date: 2021-07-16 + +Description: +- Features∶ +- Improved the resampler used in the plugins that require one(like the rnnoise plugin) +- Updated translations + +- Bug fixes∶ + +- Setting multiple autoloading presets should be fine now +- Transient windows are now properly set for some plugins dialogs +- The convolver impulse response menu was improved to workaround an issue where the impulse files was not loaded when only one was available in the menu, see https://github.com/wwmm/easyeffects/issues/1011 +- Fixed a bug that could make the pitch plugin to not be properly initialized +- The saturation warning should not displace its neighbor widgets anymore +- Fixed the locale in a few widgets +- Fixed wrong alignment in a few widgets + +--- +Version: 6.0.2 +Date: 2021-07-11 + +Description: +- Features∶ +- The Loudness plugin is being used again for the reasons described at https://github.com/wwmm/easyeffects/issues/820. This means that http://drobilla.net/plugins/mda/Loudness is an optional dependency again. + +- Bug fixes∶ + +- Fixed a segmentation fault that happened when optional dependencies were not installed + +--- +Version: 6.0.1 +Date: 2021-07-09 + +Description: +- Features∶ +- Improved equalizer interface. +- Now we use a sidechain LSP compressor that allows the user to select and external source as the sidechain input. +- We now support the LSP compressor `Boosting` mode. +- When `split-channels` is enabled in the equalizer the imported APO preset will be applied only to the channel being visualized in the window. This will allow to import different presets for each channel instead of just settings the same values to both. + +- Bug fixes∶ + +- Fixed some segmentation faults that could happen when creating a preset autoloading profile or removing presets + +--- +Version: 6.0.0 +Date: 2021-07-07 + +Description: +- Features∶ +- This is one of the biggest releases that I have ever made. The amount of changes is so big that it is hard to talk about everything here. +- The following are just the most import ones. People interested on the journey that got us here can take a look at https://github.com/wwmm/easyeffects/issues/904 and https://github.com/wwmm/easyeffects/issues/874. +- The application and its repository have been renamed from PulseEffects to `EasyEffects` +- gtkmm3 was replaced by gtkmm4 +- Gstreamer was replaced by native PipeWire filters. +- Many features were reimplemented from scratch. The preset autoloading is one example. Another remarkable change will be seen in the plugins selection menu. Now the user can show in the window only the plugins that he/she wants to use. +- Boost is no longer a dependency. The price paid for that was a little change in our presets structures. With some patience it is possible to edit PulseEffects presets in a text editor and make them work in EasyEffects. Hopefully someone will come up with a script for this in the feature. +- New libraries are being used and some of the librarires that were optional before are now required diff --git a/util/autobuild.sh b/util/autobuild.sh new file mode 100755 index 0000000..62418eb --- /dev/null +++ b/util/autobuild.sh @@ -0,0 +1,148 @@ +#!/usr/bin/env bash +# This ugly script helps to build a new version of Easy Effects +# Currently for DEB package only +# Author: Mikhail Novosyolov + +pkg_name="easyeffects" +git_upstream_url="https://github.com/wwmm/easyeffects.git" +stdate="$(date +%s)" +day_name="$(env LANG=c date --date="@${stdate}" +%a)" +month_name="$(env LANG=c date --date="@${stdate}" +%b)" +year="$(env LANG=c date --date="@${stdate}" +%Y)" +day_month="$(env LANG=c date --date="@${stdate}" +%d)" +time="$(env LANG=c date --date="@${stdate}" +%H:%m:%S)" +timezone="$(env LANG=c date --date="@${stdate}" +%z)" + +dir_start="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +if [ "$(basename "${dir_start}")" = 'util' ]; then + cd .. +fi +dir0="$(pwd)" + +echo_help(){ + echo "Usage: nv|nw|new_version, ppa, lc|local_test, check_fuzzy|check_fuzzy_po|cf, full" +} + +git_sync_upstream(){ + if ! git remote -v | grep -q "$git_upstream_url"; then + git remote add upstream "$git_upstream_url" + fi + + git fetch upstream + + # git merge returns 0 only if merge was successful + if git merge upstream/master + then + : + else + echo "" + echo "Merge conflicts! Cannot continue!" + echo "" + exit 1 + fi +} + +debian_changelog_new_entry(){ + if [ ! -f debian/changelog.tpl ]; then + echo "No debian/changelog.tpl, cannot continue!" + exit 1 + fi + if [ -z "$new_version" ]; then echo "new_version is empty"; exit 1; fi + cat debian/changelog.tpl | \ + sed "s/%new_version%/${new_version}/g" | \ + sed "s/%day_name%/${day_name}/g" | \ + sed "s/%day_month%/${day_month}/g" | \ + sed "s/%month_name%/${month_name}/g" | \ + sed "s/%year%/${year}/g" | \ + sed "s/%time%/${time}/g" | \ + sed "s/%timezone%/${timezone}/g" | \ + tee -a "${dir0}/debian/changelog.new" + mv debian/changelog debian/changelog.old + echo " " >> debian/changelog.new + cat debian/changelog.new debian/changelog.old > debian/changelog + rm -f debian/changelog.new debian/changelog.old +} + +check_fuzzy_po(){ + for lang in ru + do + if grep -q "^#, fuzzy" "po/${lang}.po" + then + read -p "Fuzzies FOUND in localization ${lang}" + else + echo "No fuzzies found in localization ${lang}" + fi + + if grep -q "^#, fuzzy" "help/${lang}/${lang}.po" + then + read -p "Fuzzies FOUND in help ${lang}" + echo "No fuzzies found in help ${lang}" + else + echo "No fuzzies found in help ${lang}" + fi + done +} + +new_version(){ + # env USCAN=0 util/autobuild.sh + if [ ! "$USCAN" = '0' ] + then + if env LANG=c uscan | grep -qi 'Newer package available'; then + new_version="$(env LANG=c uscan --no-download | grep 'Newest version of' | awk -F ', ' '{print $1}' | awk -F ' ' '{print $NF}')" + fi + else + : + fi + git_sync_upstream + git commit -m "Updated to ${new_version} (autobuild)" debian/changelog + debian_changelog_new_entry + check_fuzzy_po +} + +ppa(){ + pushd debian + ./build-ppa.sh + popd +} + +git_push(){ + git push +} + +local_test(){ + dpkg-buildpackage + last_version="$(head -n 1 debian/changelog | tr -d "()" | awk -F ' ' '{print $2}')" + sudo apt install ../*${pkg_name}*${last_version}*.deb -y && \ + if easyeffects + then return 0 + else return 1 + fi + debian/rules clean +} + +case "$1" in + nv|nw|new_version ) + new_version + ;; + ppa ) + ppa + ;; + full ) + new_version + if local_test; then + ppa + git_push + fi + ;; + lc|local_test ) + #new_version + local_test + ;; + check_fuzzy|check_fuzzy_po|cf ) + check_fuzzy_po + ;; + * ) + echo "Current dir is: $(pwd) ." + echo_help + ;; +esac diff --git a/util/changes_since_last_release.sh b/util/changes_since_last_release.sh new file mode 100755 index 0000000..7307f89 --- /dev/null +++ b/util/changes_since_last_release.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# using git log to view the changes that have been done since the tag given as argument + +read -r -e -p "Write the last release version(example 6.2.6): " LAST_RELEASE + +echo "" +echo "Changes done since $LAST_RELEASE:" +echo "" + +git log v$LAST_RELEASE...HEAD --pretty=format:'%H %s' \ No newline at end of file diff --git a/util/clang-tidy.sh b/util/clang-tidy.sh new file mode 100755 index 0000000..5f81430 --- /dev/null +++ b/util/clang-tidy.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -e +# write a custom script for ease of use, meson clang-tidy target can't do fixes, and also has somewhat broken threading + +if ! meson introspect --projectinfo &> /dev/null; then + echo "Error, meson introspect command failed, make sure you are in a meson build directory" + exit 1 +fi + +if [[ "$PWD" == "" ]]; then + echo "Error, \$PWD is empty" + exit 1 +fi + +# save current dir and get repo dir +# we need an absolute path without any .. in them otherwise these various layers of scripts get confused +BUILD_DIR="$PWD" + +cd .. +REPO_DIR="$PWD" + +# back to build dir +cd "$BUILD_DIR" + +# only scan c++ files in src, we don't want to scan the generated easyeffects-resources.c file +# it is fine to use -fix everywhere, since it will still exit with error even if errors were all automatically fixed. +# however we do not use -fix since it is safer to just manually fix things +python3 ../util/run-clang-tidy.py -p . -config-file=../.clang-tidy "$REPO_DIR"/src/*.cpp diff --git a/util/crystalizer.py b/util/crystalizer.py new file mode 100755 index 0000000..221120a --- /dev/null +++ b/util/crystalizer.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 + +import numpy as np +import matplotlib.pyplot as plt +import scipy.io.wavfile as wavefile + +rate, wave = wavefile.read('test.wav') + +wave_y = wave[14000:15000] +wave_x = np.arange(wave_y.size) + +t = wave_x +original = wave_y + +standard = np.copy(original) +deriv2 = np.zeros(original.size) + +intensity = 2.0 + +# the boundaries are better handled in the plugin code + +for n in range(original.size): + if n > 0 and n < original.size - 1: + deriv2[n] = original[n + 1] - 2 * original[n] + original[n - 1] + elif n == 0: + deriv2[0] = original[n + 1] - 2 * original[n] + original[n] + elif n == original.size - 1: + deriv2[n] = original[n] - 2 * original[n] + original[n - 1] + +for n in range(standard.size): + standard[n] -= intensity * deriv2[n] + +aggressive = np.copy(standard) + +if intensity >= 1: + ndivs = 1000 + gain = np.linspace(1, intensity, ndivs) + dv = 0.5 / ndivs + + for n in range(standard.size): + v = aggressive[n] + + idx = int(np.floor(np.fabs(v) / dv)) + + if idx < 0: + idx = 0 + elif idx > gain.size: + idx = gain.size - 1 + + aggressive[n] = v * gain[idx] + + +fig = plt.figure() + +plt.plot(t, original, 'bo-', markersize=4, label='original') +plt.plot(t, standard, 'ro-', markersize=4, label='standard') +plt.plot(t, aggressive, 'go-', markersize=4, label='aggressive') + +fig.legend() + +plt.xlabel('Arbitrary Time', fontsize=18) +plt.ylabel('Waveform', fontsize=18) +plt.grid() + +plt.show() diff --git a/util/environmental_variables.sh b/util/environmental_variables.sh new file mode 100755 index 0000000..0c39629 --- /dev/null +++ b/util/environmental_variables.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +export GSETTINGS_SCHEMA_DIR=../../data/schemas/ +export G_MESSAGES_DEBUG=easyeffects +export ASAN_OPTIONS="detect_stack_use_after_return=1:check_initialization_order=1" +export LSAN_OPTIONS="print_suppressions=true:suppressions=../../util/sanitizer.supp" + +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' diff --git a/util/flatpak/com.github.wwmm.easyeffects.Devel.json b/util/flatpak/com.github.wwmm.easyeffects.Devel.json new file mode 100644 index 0000000..baa63cc --- /dev/null +++ b/util/flatpak/com.github.wwmm.easyeffects.Devel.json @@ -0,0 +1,97 @@ +{ + "id": "com.github.wwmm.easyeffects.Devel", + "runtime": "org.gnome.Platform", + "runtime-version": "44", + "sdk": "org.gnome.Sdk", + "command": "easyeffects", + "finish-args": [ + "--share=ipc", + "--socket=fallback-x11", + "--socket=wayland", + "--device=dri", + "--filesystem=xdg-run/pipewire-0:ro", + "--env=LV2_PATH=/app/lib/lv2:/app/extensions/Plugins/lv2", + "--env=LADSPA_PATH=/app/lib/ladspa:/app/extensions/Plugins/ladspa" + ], + "cleanup": [ + "*.a", + "*.h", + "*.la", + "/bin/analyseplugin", + "/bin/applyplugin", + "/bin/listplugins", + "/include", + "/lib/pkgconfig", + "/lib/python*", + "/share/info" + ], + "add-extensions": { + "org.freedesktop.LinuxAudio.Plugins": { + "directory": "extensions/Plugins", + "version": "22.08", + "add-ld-path": "lib", + "merge-dirs": "lv2;ladspa", + "subdirectories": true, + "no-autodownload": true + }, + "org.freedesktop.LinuxAudio.Plugins.Calf": { + "directory": "extensions/Plugins/Calf", + "version": "22.08", + "add-ld-path": "lib", + "merge-dirs": "lv2", + "autodelete": false, + "subdirectories": true + }, + "org.freedesktop.LinuxAudio.Plugins.LSP": { + "directory": "extensions/Plugins/LSP", + "version": "22.08", + "add-ld-path": "lib", + "merge-dirs": "lv2", + "autodelete": false, + "subdirectories": true + }, + "org.freedesktop.LinuxAudio.Plugins.ZamPlugins": { + "directory": "extensions/Plugins/ZamPlugins", + "version": "22.08", + "add-ld-path": "lib", + "merge-dirs": "lv2", + "autodelete": false, + "subdirectories": true + }, + "org.freedesktop.LinuxAudio.Plugins.MDA": { + "directory": "extensions/Plugins/MDA", + "version": "22.08", + "add-ld-path": "lib", + "merge-dirs": "lv2", + "autodelete": false, + "subdirectories": true + } + }, + "modules": [ + { + "name": "easyeffects", + "buildsystem": "meson", + "config-opts": [ + "-Ddevel=true", + "-Dbuildtype=debug", + "-Denable-libportal=true", + "-Denable-mold=true" + ], + "run-tests": true, + "sources": [ + { + "//": "Should be type: git for downstream sources, e.g. when using flatpak-builder with easyeffects as a submodule. This ensures the commit can be found for the build debug info. Type dir works everywhere else I have tested.", + "type": "dir", + "path": "../../" + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/$FLATPAK_ID ../LICENSE", + "mkdir -pm755 $FLATPAK_DEST/extensions/Plugins" + ], + "modules": [ + "easyeffects-modules.json" + ] + } + ] +} diff --git a/util/flatpak/easyeffects-modules.json b/util/flatpak/easyeffects-modules.json new file mode 100644 index 0000000..56df845 --- /dev/null +++ b/util/flatpak/easyeffects-modules.json @@ -0,0 +1,336 @@ +{ + "name": "easyeffects-modules", + "modules": [ + { + "name": "libsigc++", + "buildsystem": "meson", + "config-opts": [ + "-Dbuild-examples=false" + ], + "sources": [ + { + "type": "archive", + "url": "https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz", + "sha256": "c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17", + "x-checker-data": { + "type": "gnome", + "name": "libsigc++", + "stable-only": true + } + } + ], + "cleanup": [ + "/lib/sigc++*" + ] + }, + { + "name": "libebur128", + "buildsystem": "cmake-ninja", + "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release", + "-DBUILD_STATIC_LIBS=OFF", + "-DCMAKE_INSTALL_LIBDIR=lib" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/jiixyj/libebur128", + "tag": "v1.2.6", + "commit": "67b33abe1558160ed76ada1322329b0e9e058b02", + "x-checker-data": { + "type": "json", + "url": "https://api.github.com/repos/jiixyj/libebur128/releases/latest", + "tag-query": ".tag_name", + "version-query": "$tag | sub(\"^jq-\"; \"\")", + "timestamp-query": ".published_at" + } + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/libebur128 COPYING" + ] + }, + { + "name": "zita-convolver", + "no-autogen": true, + "subdir": "source", + "make-install-args": [ + "PREFIX=${FLATPAK_DEST}", + "LIBDIR=${FLATPAK_DEST}/lib" + ], + "sources": [ + { + "type": "archive", + "url": "https://kokkinizita.linuxaudio.org/linuxaudio/downloads/zita-convolver-4.0.3.tar.bz2", + "sha512": "62d7841757f10c094e43ed755e187f947c5743f302ed2a1ee6064a850c18921466f4505d8a2a7b3ad23619db7f1ad7307e1dfb2e8a1e7685e60ece2ffff4f6ca" + }, + { + "type": "patch", + "path": "patch/zita-convolver/0001-Fix-makefile.patch" + } + ], + "modules": [ + "shared-modules/linux-audio/fftw3f.json", + "shared-modules/linux-audio/lv2.json", + "shared-modules/linux-audio/lilv.json", + "shared-modules/linux-audio/ladspa.json", + { + "name": "bs2b", + "rm-configure": true, + "sources": [ + { + "type": "archive", + "url": "https://downloads.sourceforge.net/sourceforge/bs2b/libbs2b-3.1.0.tar.gz", + "sha256": "6aaafd81aae3898ee40148dd1349aab348db9bfae9767d0e66e0b07ddd4b2528" + }, + { + "type": "script", + "dest-filename": "autogen.sh", + "commands": [ + "cp -p /usr/share/automake-*/config.{sub,guess} build-aux", + "autoreconf -vfi" + ] + }, + { + "type": "patch", + "path": "patch/bs2b/001-fix-automake-dist-lzma.patch" + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/bs2b COPYING" + ], + "cleanup": [ + "/bin" + ] + }, + { + "name": "speexdsp", + "buildsystem": "autotools", + "sources": [ + { + "type": "git", + "url": "https://gitlab.xiph.org/xiph/speexdsp", + "tag": "SpeexDSP-1.2.1", + "commit": "1b28a0f61bc31162979e1f26f3981fc3637095c8", + "x-checker-data": { + "type": "git", + "tag-pattern": "^SpeexDSP-([\\d.]+)" + } + } + ] + } + ] + }, + { + "name": "rnnoise", + "sources": [ + { + "type": "git", + "url": "https://github.com/xiph/rnnoise.git", + "commit": "1cbdbcf1283499bbb2230a6b0f126eb9b236defd", + "x-checker-data": { + "type": "json", + "url": "https://api.github.com/repos/xiph/rnnoise/commits", + "commit-query": "first( .[].sha )", + "version-query": "first( .[].sha )", + "timestamp-query": "first( .[].commit.committer.date )" + } + } + ], + "cleanup": [ + "/share/doc/rnnoise" + ] + }, + { + "name": "soundtouch", + "buildsystem": "cmake-ninja", + "sources": [ + { + "type": "git", + "url": "https://codeberg.org/soundtouch/soundtouch.git", + "tag": "2.3.1", + "commit": "e1f315f5358d9db5cee35a7a2886425489fcefe8", + "x-checker-data": { + "type": "git", + "tag-pattern": "^([\\d.]+)$", + "versions": { + "!=": "2.3.2" + } + } + } + ], + "cleanup": [ + "/bin", + "/lib/cmake", + "/share/doc" + ] + }, + { + "name": "nlohmann-json", + "buildsystem": "cmake-ninja", + "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release", + "-DJSON_BuildTests=false" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/nlohmann/json", + "tag": "v3.11.2", + "commit": "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d", + "x-checker-data": { + "type": "json", + "url": "https://api.github.com/repos/nlohmann/json/releases/latest", + "tag-query": ".tag_name", + "version-query": "$tag | sub(\"^jq-\"; \"\")", + "timestamp-query": ".published_at" + } + } + ] + }, + { + "name": "tbb", + "buildsystem": "cmake-ninja", + "builddir": true, + "config-opts": [ + "-DTBB_TEST=OFF" + ], + "sources": [ + { + "type": "archive", + "url": "https://github.com/oneapi-src/oneTBB/archive/refs/tags/v2021.10.0.tar.gz", + "sha256": "487023a955e5a3cc6d3a0d5f89179f9b6c0ae7222613a7185b0227ba0c83700b", + "x-checker-data": { + "type": "anitya", + "project-id": 227581, + "stable-only": true, + "url-template": "https://github.com/oneapi-src/oneTBB/archive/refs/tags/v$version.tar.gz" + } + } + ] + }, + { + "name": "libportal", + "buildsystem": "meson", + "config-opts": [ + "-Ddocs=false", + "-Dbackend-gtk4=enabled" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/flatpak/libportal.git", + "tag": "0.7.1", + "commit": "e9ed3a50cdde321eaf42361212480a66eb94a57a", + "x-checker-data": { + "type": "json", + "url": "https://api.github.com/repos/flatpak/libportal/releases/latest", + "tag-query": ".tag_name", + "version-query": "$tag | sub(\"^jq-\"; \"\")", + "timestamp-query": ".published_at" + } + } + ] + }, + { + "name": "zenity", + "buildsystem": "meson", + "build-commands": [ + "mkdir -p /app/share/icons/hicolor" + ], + "sources": [ + { + "type": "git", + "url": "https://gitlab.gnome.org/GNOME/zenity", + "tag": "3.44.0", + "commit": "7bf8c8910d34bfb2b883b32118b93b68d44dd77b", + "//": "flatpak-external-data-checker doesn't work well here, since it thinks that 3.90.0 is more recent (despite being an alpha), and 3.91.0 fails to build since it can't install translations properly" + } + ] + }, + { + "name": "fmt", + "buildsystem": "cmake-ninja", + "config-opts": [ + "-DCMAKE_INSTALL_PREFIX=/app", + "-DCMAKE_INSTALL_LIBDIR=/app/lib", + "-DBUILD_SHARED_LIBS=ON", + "-DFMT_TEST=Off" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/fmtlib/fmt", + "tag": "10.1.1", + "commit": "f5e54359df4c26b6230fc61d38aa294581393084", + "x-checker-data": { + "type": "json", + "url": "https://api.github.com/repos/fmtlib/fmt/releases/latest", + "tag-query": ".tag_name", + "version-query": "$tag | sub(\"^jq-\"; \"\")", + "timestamp-query": ".published_at" + } + } + ] + }, + { + "name": "gsl", + "sources": [ + { + "type": "archive", + "url": "https://ftp.gnu.org/gnu/gsl/gsl-2.7.1.tar.gz", + "sha256": "dcb0fbd43048832b757ff9942691a8dd70026d5da0ff85601e52687f6deeb34b", + "x-checker-data": { + "type": "anitya", + "project-id": 1267, + "stable-only": true, + "url-template": "https://ftp.gnu.org/gnu/gsl/gsl-$version.tar.gz" + } + } + ] + }, + { + "name": "mold", + "sources": [ + { + "type": "archive", + "dest-filename": "mold-linux.tar.gz", + "only-arches": [ + "x86_64" + ], + "url": "https://github.com/rui314/mold/releases/download/v2.3.1/mold-2.3.1-x86_64-linux.tar.gz", + "sha256": "17e7ed0fd4877fbf24d13a830bd325ce3ebd05434800af9296b6c576fcc0414e", + "x-checker-data": { + "type": "anitya", + "project-id": 241732, + "stable-only": true, + "url-template": "https://github.com/rui314/mold/releases/download/v$version/mold-$version-x86_64-linux.tar.gz" + } + }, + { + "type": "archive", + "dest-filename": "mold-linux.tar.gz", + "only-arches": [ + "aarch64" + ], + "url": "https://github.com/rui314/mold/releases/download/v2.3.1/mold-2.3.1-aarch64-linux.tar.gz", + "sha256": "dd4a967aadc9f03f7777f7dac74349c8ff453c46967484e041044beb11d4dde9", + "x-checker-data": { + "type": "anitya", + "project-id": 241732, + "stable-only": true, + "url-template": "https://github.com/rui314/mold/releases/download/v$version/mold-$version-aarch64-linux.tar.gz" + } + } + ], + "buildsystem": "simple", + "build-commands": [ + "install -m 755 bin/mold $FLATPAK_DEST/bin/mold", + "install -m 755 bin/ld.mold $FLATPAK_DEST/bin/ld.mold" + ], + "cleanup": [ + "*" + ] + } + ] +} diff --git a/util/flatpak/patch/bs2b/001-fix-automake-dist-lzma.patch b/util/flatpak/patch/bs2b/001-fix-automake-dist-lzma.patch new file mode 100644 index 0000000..e303b57 --- /dev/null +++ b/util/flatpak/patch/bs2b/001-fix-automake-dist-lzma.patch @@ -0,0 +1,13 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -4,8 +4,8 @@ + AC_PREREQ([2.63]) + AC_INIT([libbs2b], [3.1.0], [boris_mikhaylov@users.sourceforge.net]) + AC_CONFIG_AUX_DIR([build-aux]) +-AM_INIT_AUTOMAKE([1.10.1 -Wall foreign subdir-objects +- dist-zip dist-bzip2 dist-lzma]) ++AM_INIT_AUTOMAKE([1.11.2 -Wall foreign subdir-objects ++ dist-zip dist-bzip2 dist-xz]) + AC_CONFIG_SRCDIR([src/bs2b.h]) + + # Checks for programs. diff --git a/util/flatpak/patch/zita-convolver/0001-Fix-makefile.patch b/util/flatpak/patch/zita-convolver/0001-Fix-makefile.patch new file mode 100644 index 0000000..6b0b3f1 --- /dev/null +++ b/util/flatpak/patch/zita-convolver/0001-Fix-makefile.patch @@ -0,0 +1,33 @@ +From 5980950dbae82c6a03b38b8e66e07a8b29068a00 Mon Sep 17 00:00:00 2001 +From: AsavarTzeth +Date: Thu, 19 Jul 2018 21:55:38 +0200 +Subject: [PATCH] Fix makefile + +- ldconfig should not be called by Makefile +- Add missing symlink for major version of lib +--- + source/Makefile | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/source/Makefile b/source/Makefile +index 776c067..a15bea9 100644 +--- a/source/Makefile ++++ b/source/Makefile +@@ -34,7 +34,6 @@ VERSION = $(MAJVERS).$(MINVERS) + CPPFLAGS += -I. -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS + CPPFLAGS += -DENABLE_VECTOR_MODE + CXXFLAGS += -fPIC -Wall -ffast-math -funroll-loops -O2 +-CXXFLAGS += -march=native + LDLFAGS += + LDLIBS += + +@@ -56,8 +55,8 @@ install: $(ZITA-CONVOLVER_MIN) + install -d $(DESTDIR)$(LIBDIR) + install -m 644 $(ZITA-CONVOLVER_H) $(DESTDIR)$(INCDIR) + install -m 755 $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR) +- ldconfig + ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_SO) ++ ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_MAJ) + + uninstall: + rm -rf $(DESTDIR)$(INCDIR)/$(ZITA-CONVOLVER_H) diff --git a/util/flatpak/shared-modules/linux-audio/fftw3f.json b/util/flatpak/shared-modules/linux-audio/fftw3f.json new file mode 100644 index 0000000..ee10c75 --- /dev/null +++ b/util/flatpak/shared-modules/linux-audio/fftw3f.json @@ -0,0 +1,41 @@ +{ + "name": "fftw3f", + "config-opts": [ + "--enable-threads", + "--enable-shared", + "--disable-static", + "--enable-float" + ], + "build-options": { + "arch": { + "x86_64": { + "config-opts": [ + "--enable-sse2", + "--enable-avx", + "--enable-avx-128-fma" + ] + }, + "aarch64": { + "config-opts": [ + "--enable-neon" + ] + } + } + }, + "sources": [ + { + "type": "archive", + "url": "https://www.fftw.org/fftw-3.3.10.tar.gz", + "sha256": "56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467" + } + ], + "cleanup": [ + "/bin", + "/include", + "/lib/cmake", + "/lib/pkgconfig", + "/share/man", + "*.la", + "*.so" + ] +} diff --git a/util/flatpak/shared-modules/linux-audio/ladspa.json b/util/flatpak/shared-modules/linux-audio/ladspa.json new file mode 100644 index 0000000..d3637ff --- /dev/null +++ b/util/flatpak/shared-modules/linux-audio/ladspa.json @@ -0,0 +1,17 @@ +{ + "name": "ladspa", + "no-autogen": true, + "subdir": "src", + "make-install-args": [ + "INSTALL_PLUGINS_DIR=/app/lib/ladspa", + "INSTALL_INCLUDE_DIR=/app/include", + "INSTALL_BINARY_DIR=/app/bin" + ], + "sources": [ + { + "type": "archive", + "url": "http://www.ladspa.org/download/ladspa_sdk_1.17.tgz", + "sha256": "27d24f279e4b81bd17ecbdcc38e4c42991bb388826c0b200067ce0eb59d3da5b" + } + ] +} diff --git a/util/flatpak/shared-modules/linux-audio/lilv.json b/util/flatpak/shared-modules/linux-audio/lilv.json new file mode 100644 index 0000000..0ed1db0 --- /dev/null +++ b/util/flatpak/shared-modules/linux-audio/lilv.json @@ -0,0 +1,80 @@ +{ + "name": "lilv", + "buildsystem": "meson", + "modules": [ + { + "name": "serd", + "buildsystem": "meson", + "sources": [ + { + "type": "archive", + "url": "https://download.drobilla.net/serd-0.30.16.tar.xz", + "sha256": "f50f486da519cdd8d03b20c9e42414e459133f5a244411d8e63caef8d9ac9146" + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/serd ../COPYING" + ], + "cleanup": [ + "/bin", + "/include", + "/lib/pkgconfig", + "/share/man" + ] + }, + { + "name": "sord", + "buildsystem": "meson", + "sources": [ + { + "type": "archive", + "url": "https://download.drobilla.net/sord-0.16.14.tar.xz", + "sha256": "220fd97d5fcb216e7b85db66f685bfdaad7dc58a50d1f96dfb2558dbc6c4731b" + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/sord ../COPYING" + ], + "cleanup": [ + "/bin", + "/include", + "/lib/pkgconfig", + "/share/man" + ] + }, + { + "name": "sratom", + "buildsystem": "meson", + "cleanup": [ + "/include", + "/lib/pkgconfig" + ], + "sources": [ + { + "type": "archive", + "url": "https://download.drobilla.net/sratom-0.6.14.tar.xz", + "sha256": "9982faf40db83aedd9b3850e499fecd6852b8b4ba6dede514013655cffaca1e6" + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/sratom ../COPYING" + ] + } + ], + "sources": [ + { + "type": "archive", + "url": "https://download.drobilla.net/lilv-0.24.20.tar.xz", + "sha256": "4fb082b9b8b286ea92bbb71bde6b75624cecab6df0cc639ee75a2a096212eebc" + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/lilv ../COPYING" + ], + "cleanup": [ + "/bin", + "/etc", + "/lib/pkgconfig", + "/share/man" + ] +} diff --git a/util/flatpak/shared-modules/linux-audio/lv2.json b/util/flatpak/shared-modules/linux-audio/lv2.json new file mode 100644 index 0000000..e65c899 --- /dev/null +++ b/util/flatpak/shared-modules/linux-audio/lv2.json @@ -0,0 +1,22 @@ + +{ + "name": "lv2", + "buildsystem": "meson", + "cleanup": [ + "/bin", + "/include", + "/lib/pkgconfig", + "/share" + ], + "sources": [ + { + "type": "archive", + "url": "https://lv2plug.in/spec/lv2-1.18.10.tar.xz", + "sha256": "78c51bcf21b54e58bb6329accbb4dae03b2ed79b520f9a01e734bd9de530953f" + } + ], + "post-install": [ + "install -Dm644 -t $FLATPAK_DEST/share/licenses/lv2 ../COPYING", + "ln -sf lv2.pc $FLATPAK_DEST/lib/pkgconfig/lv2core.pc" + ] +} \ No newline at end of file diff --git a/util/news-release-template.yaml b/util/news-release-template.yaml new file mode 100644 index 0000000..c54ebfe --- /dev/null +++ b/util/news-release-template.yaml @@ -0,0 +1,14 @@ +--- +Version: UNRELEASED_VERSION +Date: UNRELEASED_DATE + +Description: +- Features∶ +- + +- Bug fixes∶ +- + +- Other notes∶ +- + diff --git a/util/run-clang-tidy.py b/util/run-clang-tidy.py new file mode 100644 index 0000000..b048112 --- /dev/null +++ b/util/run-clang-tidy.py @@ -0,0 +1,398 @@ +#!/usr/bin/env python3 +# +#===- run-clang-tidy.py - Parallel clang-tidy runner --------*- python -*--===# +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +#===-----------------------------------------------------------------------===# +# FIXME: Integrate with clang-tidy-diff.py + +# https://clang.llvm.org/extra/doxygen/run-clang-tidy_8py_source.html + +""" +Parallel clang-tidy runner +========================== + +Runs clang-tidy over all files in a compilation database. Requires clang-tidy +and clang-apply-replacements in $PATH. + +Example invocations. +- Run clang-tidy on all files in the current working directory with a default + set of checks and show warnings in the cpp files and all project headers. + run-clang-tidy.py $PWD + +- Fix all header guards. + run-clang-tidy.py -fix -checks=-*,llvm-header-guard + +- Fix all header guards included from clang-tidy and header guards + for clang-tidy headers. + run-clang-tidy.py -fix -checks=-*,llvm-header-guard extra/clang-tidy \ + -header-filter=extra/clang-tidy + +Compilation database setup: +http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html +""" + +from __future__ import print_function + +import argparse +import glob +import json +import multiprocessing +import os +import queue +import re +import shutil +import subprocess +import sys +import tempfile +import threading +import traceback + +try: + import yaml +except ImportError: + yaml = None + + +def strtobool(val): + """Convert a string representation of truth to a bool following LLVM's CLI argument parsing.""" + + val = val.lower() + if val in ['', 'true', '1']: + return True + elif val in ['false', '0']: + return False + + # Return ArgumentTypeError so that argparse does not substitute its own error message + raise argparse.ArgumentTypeError( + "'{}' is invalid value for boolean argument! Try 0 or 1.".format(val) + ) + + +def find_compilation_database(path): + """Adjusts the directory until a compilation database is found.""" + result = os.path.realpath('./') + while not os.path.isfile(os.path.join(result, path)): + parent = os.path.dirname(result) + if result == parent: + print('Error: could not find compilation database.') + sys.exit(1) + result = parent + return result + + +def make_absolute(f, directory): + if os.path.isabs(f): + return f + return os.path.normpath(os.path.join(directory, f)) + + +def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path, + header_filter, allow_enabling_alpha_checkers, + extra_arg, extra_arg_before, quiet, config_file_path, + config, line_filter, use_color, plugins): + """Gets a command line for clang-tidy.""" + start = [clang_tidy_binary] + if allow_enabling_alpha_checkers: + start.append('-allow-enabling-analyzer-alpha-checkers') + if header_filter is not None: + start.append('-header-filter=' + header_filter) + if line_filter is not None: + start.append('-line-filter=' + line_filter) + if use_color is not None: + if use_color: + start.append('--use-color') + else: + start.append('--use-color=false') + if checks: + start.append('-checks=' + checks) + if tmpdir is not None: + start.append('-export-fixes') + # Get a temporary file. We immediately close the handle so clang-tidy can + # overwrite it. + (handle, name) = tempfile.mkstemp(suffix='.yaml', dir=tmpdir) + os.close(handle) + start.append(name) + for arg in extra_arg: + start.append('-extra-arg=%s' % arg) + for arg in extra_arg_before: + start.append('-extra-arg-before=%s' % arg) + start.append('-p=' + build_path) + if quiet: + start.append('-quiet') + if config_file_path: + start.append('--config-file=' + config_file_path) + elif config: + start.append('-config=' + config) + for plugin in plugins: + start.append('-load=' + plugin) + start.append(f) + return start + + +def merge_replacement_files(tmpdir, mergefile): + """Merge all replacement files in a directory into a single file""" + # The fixes suggested by clang-tidy >= 4.0.0 are given under + # the top level key 'Diagnostics' in the output yaml files + mergekey = "Diagnostics" + merged=[] + for replacefile in glob.iglob(os.path.join(tmpdir, '*.yaml')): + content = yaml.safe_load(open(replacefile, 'r')) + if not content: + continue # Skip empty files. + merged.extend(content.get(mergekey, [])) + + if merged: + # MainSourceFile: The key is required by the definition inside + # include/clang/Tooling/ReplacementsYaml.h, but the value + # is actually never used inside clang-apply-replacements, + # so we set it to '' here. + output = {'MainSourceFile': '', mergekey: merged} + with open(mergefile, 'w') as out: + yaml.safe_dump(output, out) + else: + # Empty the file: + open(mergefile, 'w').close() + + +def find_binary(arg, name, build_path): + """Get the path for a binary or exit""" + if arg: + if shutil.which(arg): + return arg + else: + raise SystemExit( + "error: passed binary '{}' was not found or is not executable" + .format(arg)) + + built_path = os.path.join(build_path, "bin", name) + binary = shutil.which(name) or shutil.which(built_path) + if binary: + return binary + else: + raise SystemExit( + "error: failed to find {} in $PATH or at {}" + .format(name, built_path)) + + +def apply_fixes(args, clang_apply_replacements_binary, tmpdir): + """Calls clang-apply-fixes on a given directory.""" + invocation = [clang_apply_replacements_binary] + invocation.append('-ignore-insert-conflict') + if args.format: + invocation.append('-format') + if args.style: + invocation.append('-style=' + args.style) + invocation.append(tmpdir) + subprocess.call(invocation) + + +def run_tidy(args, clang_tidy_binary, tmpdir, build_path, queue, lock, + failed_files): + """Takes filenames out of queue and runs clang-tidy on them.""" + while True: + name = queue.get() + invocation = get_tidy_invocation(name, clang_tidy_binary, args.checks, + tmpdir, build_path, args.header_filter, + args.allow_enabling_alpha_checkers, + args.extra_arg, args.extra_arg_before, + args.quiet, args.config_file, args.config, + args.line_filter, args.use_color, + args.plugins) + + proc = subprocess.Popen(invocation, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output, err = proc.communicate() + if proc.returncode != 0: + if proc.returncode < 0: + msg = "%s: terminated by signal %d\n" % (name, -proc.returncode) + err += msg.encode('utf-8') + failed_files.append(name) + with lock: + sys.stdout.write(' '.join(invocation) + '\n' + output.decode('utf-8')) + if len(err) > 0: + sys.stdout.flush() + sys.stderr.write(err.decode('utf-8')) + queue.task_done() + + +def main(): + parser = argparse.ArgumentParser(description='Runs clang-tidy over all files ' + 'in a compilation database. Requires ' + 'clang-tidy and clang-apply-replacements in ' + '$PATH or in your build directory.') + parser.add_argument('-allow-enabling-alpha-checkers', + action='store_true', help='allow alpha checkers from ' + 'clang-analyzer.') + parser.add_argument('-clang-tidy-binary', metavar='PATH', + help='path to clang-tidy binary') + parser.add_argument('-clang-apply-replacements-binary', metavar='PATH', + help='path to clang-apply-replacements binary') + parser.add_argument('-checks', default=None, + help='checks filter, when not specified, use clang-tidy ' + 'default') + config_group = parser.add_mutually_exclusive_group() + config_group.add_argument('-config', default=None, + help='Specifies a configuration in YAML/JSON format: ' + ' -config="{Checks: \'*\', ' + ' CheckOptions: {x: y}}" ' + 'When the value is empty, clang-tidy will ' + 'attempt to find a file named .clang-tidy for ' + 'each source file in its parent directories.') + config_group.add_argument('-config-file', default=None, + help='Specify the path of .clang-tidy or custom config ' + 'file: e.g. -config-file=/some/path/myTidyConfigFile. ' + 'This option internally works exactly the same way as ' + '-config option after reading specified config file. ' + 'Use either -config-file or -config, not both.') + parser.add_argument('-header-filter', default=None, + help='regular expression matching the names of the ' + 'headers to output diagnostics from. Diagnostics from ' + 'the main file of each translation unit are always ' + 'displayed.') + parser.add_argument('-line-filter', default=None, + help='List of files with line ranges to filter the' + 'warnings.') + if yaml: + parser.add_argument('-export-fixes', metavar='filename', dest='export_fixes', + help='Create a yaml file to store suggested fixes in, ' + 'which can be applied with clang-apply-replacements.') + parser.add_argument('-j', type=int, default=0, + help='number of tidy instances to be run in parallel.') + parser.add_argument('files', nargs='*', default=['.*'], + help='files to be processed (regex on path)') + parser.add_argument('-fix', action='store_true', help='apply fix-its') + parser.add_argument('-format', action='store_true', help='Reformat code ' + 'after applying fixes') + parser.add_argument('-style', default='file', help='The style of reformat ' + 'code after applying fixes') + parser.add_argument('-use-color', type=strtobool, nargs='?', const=True, + help='Use colors in diagnostics, overriding clang-tidy\'s' + ' default behavior. This option overrides the \'UseColor' + '\' option in .clang-tidy file, if any.') + parser.add_argument('-p', dest='build_path', + help='Path used to read a compile command database.') + parser.add_argument('-extra-arg', dest='extra_arg', + action='append', default=[], + help='Additional argument to append to the compiler ' + 'command line.') + parser.add_argument('-extra-arg-before', dest='extra_arg_before', + action='append', default=[], + help='Additional argument to prepend to the compiler ' + 'command line.') + parser.add_argument('-quiet', action='store_true', + help='Run clang-tidy in quiet mode') + parser.add_argument('-load', dest='plugins', + action='append', default=[], + help='Load the specified plugin in clang-tidy.') + args = parser.parse_args() + + db_path = 'compile_commands.json' + + if args.build_path is not None: + build_path = args.build_path + else: + # Find our database + build_path = find_compilation_database(db_path) + + clang_tidy_binary = find_binary(args.clang_tidy_binary, "clang-tidy", + build_path) + + tmpdir = None + if args.fix: + clang_apply_replacements_binary = find_binary( + args.clang_apply_replacements_binary, "clang-apply-replacements", + build_path) + tmpdir = tempfile.mkdtemp() + + try: + invocation = get_tidy_invocation("", clang_tidy_binary, args.checks, + None, build_path, args.header_filter, + args.allow_enabling_alpha_checkers, + args.extra_arg, args.extra_arg_before, + args.quiet, args.config_file, args.config, + args.line_filter, args.use_color, + args.plugins) + invocation.append('-list-checks') + invocation.append('-') + if args.quiet: + # Even with -quiet we still want to check if we can call clang-tidy. + with open(os.devnull, 'w') as dev_null: + subprocess.check_call(invocation, stdout=dev_null) + else: + subprocess.check_call(invocation) + except: + print("Unable to run clang-tidy.", file=sys.stderr) + sys.exit(1) + + # Load the database and extract all files. + database = json.load(open(os.path.join(build_path, db_path))) + files = set([make_absolute(entry['file'], entry['directory']) + for entry in database]) + + max_task = args.j + if max_task == 0: + max_task = multiprocessing.cpu_count() + + # Build up a big regexy filter from all command line arguments. + file_name_re = re.compile('|'.join(args.files)) + + return_code = 0 + try: + # Spin up a bunch of tidy-launching threads. + task_queue = queue.Queue(max_task) + # List of files with a non-zero return code. + failed_files = [] + lock = threading.Lock() + for _ in range(max_task): + t = threading.Thread(target=run_tidy, + args=(args, clang_tidy_binary, tmpdir, build_path, + task_queue, lock, failed_files)) + t.daemon = True + t.start() + + # Fill the queue with files. + for name in files: + if file_name_re.search(name): + task_queue.put(name) + + # Wait for all threads to be done. + task_queue.join() + if len(failed_files): + return_code = 1 + + except KeyboardInterrupt: + # This is a sad hack. Unfortunately subprocess goes + # bonkers with ctrl-c and we start forking merrily. + print('\nCtrl-C detected, goodbye.') + if tmpdir: + shutil.rmtree(tmpdir) + os.kill(0, 9) + + if yaml and args.export_fixes: + print('Writing fixes to ' + args.export_fixes + ' ...') + try: + merge_replacement_files(tmpdir, args.export_fixes) + except: + print('Error exporting fixes.\n', file=sys.stderr) + traceback.print_exc() + return_code=1 + + if args.fix: + print('Applying fixes ...') + try: + apply_fixes(args, clang_apply_replacements_binary, tmpdir) + except: + print('Error applying fixes.\n', file=sys.stderr) + traceback.print_exc() + return_code = 1 + + if tmpdir: + shutil.rmtree(tmpdir) + sys.exit(return_code) + + +if __name__ == '__main__': + main() diff --git a/util/sanitizer.supp b/util/sanitizer.supp new file mode 100644 index 0000000..823f176 --- /dev/null +++ b/util/sanitizer.supp @@ -0,0 +1,4 @@ +leak:libEGL_mesa* +leak:libfontconfig* +leak:libsigc* +leak:libglib-2* \ No newline at end of file diff --git a/util/sanitizer.txt b/util/sanitizer.txt new file mode 100644 index 0000000..de206f1 --- /dev/null +++ b/util/sanitizer.txt @@ -0,0 +1,5 @@ +meson setup _build --prefix=/tmp/ee -Db_sanitize=address,undefined + +G_SLICE=always-malloc G_DEBUG=gc-friendly ./easyeffects + +export LSAN_OPTIONS="print_suppressions=false:suppressions=/path/to/blender-lsan-suppressions.txt" diff --git a/util/test.wav b/util/test.wav new file mode 100644 index 0000000000000000000000000000000000000000..941c63baec9ff800a79187f77e83f899adb41cd3 GIT binary patch literal 709186 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�Fm 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%0Ay=I%bg)C$3}S^%HcW3nxYiCx^UI%%k$< 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

+yAcFlDwsrlifpbn|pHs%K%mtsgOWJ<+ih`MUfP zxh%b@LCjn#%X%?7dos;q8Izp6$xRsL&zWpuKS<~q4R$`eVEeO;Q21skBz<><^jKTs zC4OXfe$SW{Yh>oqp%QPi;r%Rdt(ZuDRseEzLqrZ`52~z~Ibi~C$UDn*F$P|qEpP>~ z;T0~SocNc-ctjpCyOMHZ@3?;1H(s6A8jCtt@_>k@XlLh%C1ZwA4*VP!-~BT0o(8+B zSgsiUm={%(kJ~tl>*DqsXuhrzdtSu#0mr#N(|LmU*(;|5Im&^U5|HxWK!_bR9%65d zl^Aq>4dh%t#vszB8N@HV@c%P%x09-dM@O06%v;Rd_X;Dw6eDi2N}k)4E6&nR*Rzz1 zebG8nC5k-nk5hGYPdS42TXUtJYU74WlCO#KtoUxmHY7hi&h19-B&Qr~oS1`I=h85J z&o(rWgNQN`-1Lh2!AAsxddNNlWkaPIXYAZPOksM$WcL`;pWkH=cgG@YNRzo=Ma*Aj zPWEQTw0+FJsS2W#CW7Y61j(&J95zS@JppO&cS6q9g^*r18AR`orWHM-`Wl$-9lhJ^ zZm49XlTjZz2J3+ zvw6*{JzVs@)R{LEZ`hN|23&H}%?@VjG+(Bxf9dYO_g7|Re8U1dC?IFiPvG+2U2^=@ zxvzj>D|SM8_azWZv#7Et1<>CO;s#BIi1PpEVy6E9$lU7!>fm``u8xrWfVH3PA*XM5 zP&(4CCU`8A_)H@wvopk(b^)dBdq!+|rrCW#;^!vCoM+^#VdU~6wh?tR$gQXLG#be5 z%F{QsKye3Oc&-PQSU95CXO@3U=fue)% zxOWhjebI8QM;JGES;BRPgShOFIrkb7tjkf#}_o6CHj9A*&@PO-W_pRve;KY_Vy9ZY_v15?Kc z(0AGi5wkMDw`~r6dX7M@%@)8Ro1yTB0GjmzQ8ggHi?qfbB`=v(rd3Wec z5wrgP`N~=S!9H`Ol)+VXn+Xp2o27k4h4HHywpbBEqozr`Da ze$2p>)*h(+LOr_OZ>49k44m>KUf*IBk#5p`Kf0YaI36DW%Gg$*&&s3yM}408i#@ON z9?a?8$FnjQvCzZR54!t5CiX94U;QlY^E)|h0(HZ3&}I5S;7`t=`1ndo`=zT&oa1M;oz0aW?(xDkUD4L6Bbw4|FsV%+4BP6D zCEHeGsxSj{KR9C00~y+_dB~G4p5j@H3wWZsDK-?zv1EQvOeyGsKFfw;^{qg(Ec_G6 zIfaD_dtzBmAB^`INxtL(lGDm{&U92A{S`$HeR|+5RGwao+0CNScj8w3JZh7~I*1ua z%%0zWqYS_tVq?xlmoa}x9lOK@e_`YIH7Ku%#qHBKqz- z)3O%b9=*a5f7N18qJ>ad_5;7ndxt&KnhF6XTY*?yg753DLa*+&0=dKl{>W1BzxWL! zeaj{HY;1ZYCN)mR>Tox-`pE~Wn?<|5C7AJb3%+Z<2NfZQaM5F$fsyO5#O461>M1AM zIvPut>#+7Kz2}=aqg5{_Bt8&QUxK(%>oJ)cTh@CIVnnljxHe*kG+Vm+XfJ9*E+Toc zXeRI!{Vx53^9rj_yMnmtPH(ZK(;MvT{|HTWl{i5A0%fmEnE4Iy{;P}l-QFNMe26WK zvQ`T)WS}?JYLEyzLDOY-`bPxO?0%i3fulMP(2q8_1v zvMoHY&r43Me$?zWapHea57ypYbc*Pv%c&bnz1oE%RP=1+b`MOvW-@gjoStym{bH&A zP(5!Z`egit#@OYk-?bQ1UH_C=jY;#aaO2b=TsNbgLA^7Al^<>fVSfw&+g+~UxO_U8 zdjCp02Yayt%hW!HRGJqGCY#bpfNMej$0jQ}F zKM$01qBE0gR4R8OmNa!oxs_1Kt&(Y!>-VFEubPJ_KAJdrF+E)cHfe z>0EC}?du4B9yU;}YYqW@t-))IGX!N&KkW1bQ19-7je&?MCm&oHnb0#z4miW)nk?Z z(+icRb(z8Bt0foU0bb`9$@MJ{8g&0WQt7TK=y%`4pk1|AV(bv3kC|wvCNeJlH%7qS z#?25~y$EVN+JeF+h`8bndBl1)5dVely$Vh~Vq#-a56Mr*smI7gr>5L@ERP>QfaQ*S zAhDs1i(ORYkmaI}IJBQPQpQN?t`ZYFEU6c0a=H2%)E&5I;AW5qlxuq^Ra}-of-@8w^{~3GD_}Nlr6jW^(Oq7cM`s zj^}z`As22UHzrI_QBHw1Cia2o4y&N3(*e+BB*NNTV`y z;>8tsAuk61gkp&K?E!oYD}$wbZ&1(TCWKjB2UvF&8m1%z`B;G*KA^T*EU`{R=TP%L z`ytzxX1G<}%gte7>G`pi9% zc3wR2)EVyYu}a$AQC?A{J8@5BwlVeGVKiR|Rp~raRbsDSX}gILuaPO++e%z4(R&%v zHN-R|AyvkD`J>>&^yU>B%a;Gv&6hR z$&&Lg<)t5X z9TS7qvOlTw)+Dq;%X7b@Yt9aIiCBphx(VtOdKwxa0!Vm`)+k0>#;=`Jny z6!Ud`9vX;ioNxZ*OT8P)>Yi&0ey^yzLY&|Wm;fU-o`vtu=i%Doe6aai0I)C@=J}q4 zhO}r1To4GBJ3JuZS4+^;<#dzo2_=Fb)c;G2j5xYy^j!m z8;}o5WX9-EhTN6+xR}o>+c*|!kATxQZ*F~YrZ(Awry&dC!+Kcm= z>5+QQ7-%~O1IBt_&OhzZ?&S?>F0NjF(_juhu2RR1WOjdEV@~m{!0uWxBSsMQYx+y> z58bH??pm15i4)0XV?G&llRHT{EXu8^#LT;{WD(Cge4YE;{LG82KJwg6GW5yqh1Qq6 z(DCsa#5Q|z#KjaWy}1*o?N33!C1){v))|BW*Ri3)YxEYrVaVTYg!9H8f_5+5a{AY_7y=n`$(9 z*Wt$*kI}jMJoX)+L)|_njC8a^{rRt)_9I-E?!$F+_i*CJaq&zmyByES9l?pI#KoP4 z<2B0f+EF%vys6}}z=i;tISw9(E=9dCrL(0pU#YhYLCwGf%m_JxRh1d!X1I=#XWwH( zbTc9PdUK&+avP!POocFP-vGhiua8iEq=yg?*IW3|vA0*KUv)4Jz+_}+tq{_c=KhxiP%S7(9VoxCT z`lc9U!K=By-6@{FJDC$#+dyn4W>syYrlM!m0w-g*V)#BZar?7fs94h}= zfsJ#M$!&U8x*(|5MDCJ2{&BhVO zHe;*&3=D8GqN{xlQl}Zkv&jY9EhxH(#oS}{Z!Qx5%PQg!Cl&$sKk^qBzZ<&fUgU`= zVai+NH19bbFnSv-IF%0M=L6c66O+dWY_n!}No zj*)Q&jP^t%zZ)uhC6n*^0Alem@(!HC)5{8Q-VPIn#XUja(Po@C{x11@IZmFj6OBs; zqtDx9u6C9g$a%_=W_)Mi7Y0LgVmI1wkU#P78b%pPM$9l~4vJ*DKGPYU-enfKzS=gsaC8*T)|8c>&CHEt8rg>@F4 zP~;(I>590kLo#o0-Y;dEiu(1I_NBJfvDkJ0UhI1{1WQnEa#}O;dW-`{*&2wxwVK?(lpi&%li0|jd&zO>Fk(8nLTwb~ z%Y&AK6F~;uG6K{OvR*KI>(!gWMH|8w^=5qNN?Xa%gijEboaWPg|jJ zeOFXBu|=l~#hjQRoMso&_sV$KXpoHB zwi}j#pNhD!yW=J9P-4|82+x}fQIF$97bgAwb0A>bQHZ##gP`QmKrVZz8+VTx-;7k5 zzm4W}mg03g4oN(R^1oYQ+&DQZ<3CC>V*LcpeKr>I^mox*p1zcqU;mGb`}o{_9Z)~r z0u>j0MYpTUY4=Sg&WUZ6i{ah2jWDe)21@qRxvo4xa)-yyd;rbkUx4nT8Pw~ZLz?Rw z>2E+86i{8e4?4#ZSg@LdTestoqCEl@@kt>13AOKMfaO`5Jx5Q2njzyL+#kTpI1TFm zp_%Bw-=$fhvN)FM!m|v-Qs&iD-08Ek7GDQ%!_y6WF}Qpi=2p34M9XvB{CFfMHeDXg zQW6d{&e*OA8B7cJu-N?u)=xIR|VfxPkLbZ_1Dn=lJd(=u~}#9C#T}dg~-y zdvO+&P0veRy%>+PP@8B5a>;_p{2anx-vY~@Ps0|wB`_U-qRgK`&j z2X}!XW*g)T42Gad4xkKv%Zw34%zQ79Y3`I7^kaYJu3EZ_CYJE>YB^f>BA(8bjTo#U z&h;;pkzKzIYaRZ=z?4}Sddi9Jw0T^&zb*MnD9>2?&On?Lm8R!#X72SDtGSWN>U^st zx2-ykGLwEsnAY__E9>kuqc!wA7G@@_FOx+)HGO2X_bZ<>}K(7U}$r&7j#zZ|X zSa}pvn`}j|KgrM5Yb>f7=sfUHjrxDvW6ibaJkZMyBi4>adt(UFyco6fCZRdm26e5y zrTM3E#b8!*JV}}tY9^m#az;*qxQi;Wi$Z<^F6LK>0W0ko8XoT9P9t`4^5SqYXQGYn zk3PrkF?V=xIvd!d^)ee`Z+6GPH!cw zJ@|^4>n2Q_e*;bL?_iPcG1AT&+s3{?dEOfgrOXJdIV)w={V%RTk-_NtvIQz#p7FrA zEUp}OoohFlxUMdfN5l~;iI;QRpuR}CJf!;(Qnnd&TgM@FiP7-L5_Or4+%@An7rQl- z+rsiMzhcGhEvVc~J-{EOcuiY{i573s{?HHf?$KOm5z$P@==}pfn?K-?UNRxBuce^C z?+D#KVVLk9Gsb+twf+7@?dVzzX<3HDrd`6k%7bWS*g(7E8In&{f7cr`J$hqN{|{XI zJ%Mt!v-9HDoMHZp%9*_O2+KOtmx;`1*{j!FoJ0B)zv6a%h=E-Z$*KFr#Vn<=YCe+< zpUS|AV4t0jybB|a} z>!VB=6UcP=GUBs2Fk`1cW=_#CS9=}HwWaya+PBQ=oq1>khSU0iM?--ZGWq(`zMR}M1b_pk;lw~ z>bIRh_SwKF>rFi24w4HluF3{W{#=aLs`uiG0okbc&BC~_6G%KD4DiXuipwV@f00|w zX*6v*g%!;&;^Z)-yVFUunz0&#<~pKgFwM}ZW2!64Q_)O<`43Y|^D~XwjyS|kR5HK) zZp7SEsmD1pAAW|_e7nNxURE=6%Lb;sbWd_hihZJrgT&{IXazL$2LCIbK;2U6@3;{k z$P=>GQy%YX98>@PP$lM#lmp{6Z?d@EqPIM9q$`G7 z&%k;MU&>I9mbz?KZ_jX%S0bx8VNh&7XsFxRjC@9PzODR{uOGTs`b;+@9b?9K&spwm zJFuHI97Nww=1&no{5hz|UIwZ9<%G$ZQ3KhKaVZVf{&AGvb7vs_ z*(LDWauLX309B=DsZ)^)p)(LNem?^aKMq5|g-p==mqtv|ZIC#B0Tj;m1jh#*sqcQ8 z+|bTU_W4DgGR>FQZT^|-=4_@ecP%#$_#fAv{LIt;xWVOTsD}Ecq-ronOYYs{ose0Qh5Rq^nk`+&3ZueWD8GK2~;8Y4Hq0#?1 z)C@iXs__YsI65A_ca4R*we;QZ{DsNnCY329k=NaBivG>opw%tvNbLfQ z+{+80-YXGwhT|X~bs4($uYwWs_dvZ^cx_z_OJAR(j_^eY3b;ycynIkMI}KhgX~dU0 z3`hFxg&=hjRL-Z_*DlJ;e>A}4?E8T4KSEoZZ{XJB6I9w&gZ*kj>Xt>Ep9ct z{%a*E!uez_R!*3Lun zTA=mtxe{MLahfldPjEuZj=hk)IVk3>#f(V#S_O*x6XK_HS@$vdijVY8>r~8QpVYJZ z{dQ0|*cT#R5_`)+4UPX<5yNna^!yYv3=z5~TzPo`cOATog`M<-v|d{vZea?fzdH!0 zU!8=+X<1;=e?R!`TSDD-@~>X_!Xj2iG4<7+2I@Lu8$ zuG4))9fu;DGNI=|sRx(cA{TT1&c>WIhtazt5$!B@qdZ|JHmnRMCXze4ICRCrogI+e zg;?Iz7fZG%P@6^$v87g+a<&8Y_M1srP_I8+Q8{)3^%h5GuVg+iWt%?(#&1+!Jex z#$)I+;$=-Ag474WSZ#l_pRb{xVIBE{RT%pqjTkvCRg{Hb;_tj;gUBThT?8b`?Qp+&=eEWUGZTFP8+eq&`0zHr)kgR~P!9< z9m$PHK9M8a4nxLh4yWH-g~ZJTF!$JY(W_4xM$7*uKha(Et}MdHaW^rs^cGTo zjaam4Xf-?$ix$mA`Tcg38H`4(aVI zrCx86x+yr%_!+vUkPp769-zf(aE!hR)cb@lo<$IM&j?Rgn^8Bv10=a1lMNo>?o&)&lD2oaRcK$-Kc9!4w(rE~OF0qD!kwJ z4chLmMbB-OD9^nk-CrDBa&STBdAcW%N3!rTMt>KO93HqQ|2h_SA^xmlljJcqhBtCe zFQXxAToki=VPN8pgd8p`A}os;aTOD})M7rV+yRAAmqGpfJ>2d60fH}8 zKrLNq8o!)@uH*8cc6JWXj1uP6?}Pg1Ya!0f5qvy}XaAb^&fVIn^to=_f8kB;ccdMr zWYb>Y?Lee?8k#q&F}7$Cc4`)jviKy7%Q}wM%EL(6YFv*R-wVgt2@-3@Z|EQBMb1c(-w_(Pg~e_E32Mi00*i(F$i=OP&m|ee zTRjPPN1cIQzhy#3+moQkxJbLITd*jl4)%7p^w^Zp)+20RM~_a`9X)dH+If`j>*685 z-pOO~U0aV!1{)7KYvZAs^aVaoy9^6~_%$xhu>88a6dwB5Y9Q=e_z zYQ}ZSvys;`Y!sHvn2$@lCE!x)G<>(?5`G?Dfaw`|SYmq-KRO;k%IIKhOJ~$yttUoP zDJO;~SKKxkWFHo&7^u*HRk^Of_-})Yk$NvK{G56vA7f$obGq9yl58jVA zNpmu|CMWVlbw=(fzVDk5#oo3m+ZUbEF=|zc^wL z`7|DVLCY3Tkj}G6{93H&KLV9?wkUqzWDV1}@j-i4(xYokwowClPfr3dT;cSd$3Wd7 z2k70TC9&YE_d8AhV3pwlV!P?VBu&CrXu|;CQWhG_%{?`MF4t4?U z$bXsKc@v{9lQ?HHSlv9zb1koOk)Icv@RQ_#^Za!yE=@cl`Ef(HUqMsKODuGFgHgN& zD|=fA4Q(uh?fq*pacc$6n1_--&T89qOnPHSxq(Qow)ur=-V6d_U4ZO*FgWgU1iSHN zOtEb;Q`|eFGVb2R%nSN~SN(EGy-nx#8&{$J&mOt#cW%*REP|FfXyVHfV&x{B*E21^`9@@~@SCk9ibk8iO$<8 z)8kN$7UN{XvaZbpt3RxTbC+#|UuA8CFHfqGW&#+eKaKP|mskebGk0U|=48z2xR+)V zFVw9txtzz?|YNxf!yYnlhhu$9ePy;+p<52JO!T zV|+mX`bSMd%PYZHt|3lj(oUr3Iv(-K!rK3?;FfL=(I@kN7>X@~S%Yna;#FORuN!&@ z)i)i5h4Q|_yP5rj&%Y~#R|z&kNWW%+ZBaGW3^w3A*CZ^PvI6V9Y|%V@DktwT*INwZ z8uMiX-ATC5w_VbICptRpe6KUp@~)D9xGrH8e()sJw&cW`{+s&A z|G-+~W5~N*0*ZI%fp}bCnm-lj?+l`&#mXm#`S*=u^1YUfoHXt_-7Ml-FXVQa#Ft!2 zy}n)aGbNrww+987@Y79n+>m8V|&KlX6WWTWVOqMzA}! z4r<-ELr~*Bi0pF=V0#cRbC3>`Kt&bsxXTpWs3Jr)bsbAM#W_MPtlk z4DN9Y2kbbDhVSG9_i#m@3kGif*qh59uFF>sJ*Ofk8zW943*2uH<`12qX0{AyCdRZI zQY7z-)d%YG8M;Ae{47X#vJsA$w*uw*A@|qaP%wKtJaUbNNbfD=GKr9~6XX$tT%RXQ zUwc<&cIn0S+Ya-<$tStpeVQLs*76FY13JE&kBQ$8;H7g-W{-9^oZUmPpQvkmUbg+7Zd}bAi?zhqSObE z6sSvDxfSgE=1BfVQ~L;}8R*R-+)h&dzy@;bI)f(nHq+n2P=JL9lq zD{#8_fW4b zMfP*npKY0OgO1fXjAk-T>pW%Ud7k+D2yBS>106hxf3lYt!2hJ;G>c@c{j>vfX0Jg% zYZs)yHLsiV3%x^^tE}peFuJpX!Qc$!FM>LEV#y632Z8_20d4P9Fkr?;pd1TS%_AOy z^;MvACggU04)dJfLVfe^Q2)cqgKuo(v9ikABk+WkN62;ykIejf*z<=8A`Yj6Vb~ss znHUe9I<5!pU%!Gb`6tNjPmCbC_eedFY%#Olgm;#{xB z0jr}i_0~po*}M)ZJBdE;LovMNa5^_Oa;qm7xVqI;ngz?aY_o&GeCec0+u+R9&kvKc zyAwEnF56Yt1C_sRZCI5Eu)vJKam z-N=5BHE@8mFSc9k4Ph%8L_AkR$T7N;j#vw6?TDCM`bvS-kIn?P*Lt&n)q1#)*#C-%oIW?njz z`P6P>ig|CDVkl(^9a})w%l0%+rCeESfvHoKOgzI<{ytyXsVCPz%jP9E-K8F8Xcpba zrwv3exeWblE_2tUbBJhd|r}FEDLe4a5Tg%dAvb z@iGmf+hl_7sZlyd9+~g~JWpD9Wka|U7)LlX6cbrDaPDMruej>t^E_hiOldn9+B$WRn>isJpZ;jxl>m|7&S7K(Z0 zis^^3z&Q(@XI#Rree*FU?f=guDU;V?(M(U;S-s)peI|ZTT)ysjzCpP!p4Ysu=3i~LYokF*$*&W`2y9|RcN*CAzJ*8SdB}w zG47v3==VjB)yg9n`|=PLulj#Blw{_}*$}l%ho{3h!D$u9$G&gM`Hcm0I->=zl z{q!jA6Md1FU-*~nBfDY!rXDEvD{U9jXZeBxvknsnesfEty%pAPr5Qnw-Q)-+|I7g5 zGEK?BT$@x}v1kukz2A-A?~Y?+)h+bj-ckt4brO!AaT5+69VKKJ{w%l-9wbb$>?(wY zQpSDZbEMBW7Wo=zR$)Z#w@X-5pMghAnV7S%06!XUV(#f%Sm}EkgTwD&>9caIipaw- zc^tZW&}{Az@ukVBqQ6Vu%^YM&M|DiTj`khoa?;I@G8hXyxK>UxE}-|F|9$Rvt|N-x z&G7XjP@K`JoCcv^YJaRP7>cRm=uUBJ80P%xiAT0>!phaB(6{J38XsSk_^a{F-{PZ} zZzR_G7tbnmz-olU53pcP0ZvOffm;e!z1D*H*kj`W*bmj0l8yN>v3|8a94V&nB6 zg?<;up)n#7tunTtligvYXCJ;ux`xyf#%X=dp&?|y#M(L-7K;tB8YHeJHhjOq{qG&- z#0=p2p5%}J*_o@akCRwxp?4qi_(~h3{xXW34ss1p?{b&Ok)UjQD=ClV3fAC1XEInf zu7?FDw?ploRS>zgBhWL4>GYS~Wu_$ex}Y}9>dt1?@cs$Q=||m2RS1OcTmZR$`vLJY zfaXw)_)!LJc^aL@5br_cKnj!656}8>a&U+VE_q=S- zB@ykOvf^UiLv)O}URnUwd!r#{Nfe}>T@8-meh}K_oXAPZ*W8`STKnUUgf&1gS?^51)g>85wFd*q&s(atn;x&;wqzKc`vCmvgMzRQcpwVn5fN( zNM}{l=FLUQAE3749e3SBbFs+3xn0&9o~3V&PM0k(VnHXgJ~19u-It?s!8|mi50~~Q ziqn%se}GDBKZQ}YMPf*cE)~c8Um^DUGH7s!g%`UwLhbq4khrg>cXpNf7?<*EE>mnI zMtNih8#ML%m7CAcV zM29Fr^}rMK52irTVREb63<3MG3Lu{nQ@}1pnKPB9EKy~8*_3Igj%N*CiOeH`B~bWlqNm zSyI|@M*a%ckdaH-(aX&4;cJ!~VN1`b{t)|S3fTS^1eq)5gO{9q5Dn`=Ump$HEq_5_ zV+52JMAJ@p6EqaZL-CnI(yXkoe$scUWb-blQtW_`PsFKB z*ayb12cYWRX0U9vfZPCMA@WWKpiVMtXgtH}j+U^@Z;p^_3t-K?Kw+K+{^!Z(K2rpy7}ga6oMwPu%{K78NM||DT`7_0YBp?!o0 z2CN={R`aYeVoNL+{m{m-zp6yvpvW-R_a4f%Y%;g%o6e07PxAE2tz3IWC(SL%WkYxG zR8DtRPMHl}x1fyE&(5t@Y^0pnCfXq_R>`~%=c`ZJbEm~yx#su{?pM?o9YS$n1&MVtFOaBlwubQV&OSZ?ULD;{&F#UgoCu;Te7RQ=CI;`ByTzm#~&y4*Gx zJ$aJUE3B@_K-aIO_^4$izP?e8o(DL_3_3{r+O4RW=!&61$dz?PQnyar3z-^QlIyu0 zhM(_=)ghzMrF|s+@-i7;c%G*$(JgfRb`PU|=fp=mB>fCU`ah5|%XD6F$FiXdkle}W zFmxNnIh{m}y%F777twq8Z~W|Cg;jwxv$m^s+64R5u5!_Z^{3+Xj?>(u~u0AXC&Qs$`iL z-Q(}5Ic1Z0gjE_>X6%tVtP#`Y7`lID z@@-puHelVy6f7Ar8tJT!{#H3$SK7s(_-Q#K_YgCl-^k*_`ZM)Dxj|{$f*bF>Fwi}g z2O9QsQ;XlZ`OQTG{j4h5Ju%q{2VxR+XIXe_D*n9e^bzs5R?Yj)YA^Pymrrv*x0B=f;9T;zA;o}|6x+pd_hxTEA3aGgV) znWvu89zD*r6%u=kGJnxnc6}$(ZV3B!B^S_=&FFMA7_(lEp}vX-CLN~?{)~R;bFm{5 zKNEF6A9>Q-7hIgFiS8Gf|Gqr>?&r~-!9XlNt{$|A2i`i&>G{oNFH{Eqa9|M+ud|46 zluPZ|Kn|IXV2W-Iu}(Xg&NzyZkDF;mCKyB}h1h2{&irQ3HG7y(ZZ8&lO;5Sg9jwmj zK9fyo1H^Y{{<=RYqcu~d7y3%MH6^(eYVud&wa)SQs45;8-Oypp#W7g;cY9*doS>{y zOHMmg@_v6Z=({*@Wy(mdoaxQA!IQXd+(Gx)Ih&;(JF!|Iu%Znpga@qXa<;_#tJ%Gg zmG}I>WN-Yz^QV0f)GiNNITk>bO)-?)7sKGH^H6yz3CsmyP+cJhk<}>AJHX19)iCEZ z#GkBZ5b`1bG$(!or)9)UD2|50^gqBl!;zdOS0!JZ&i8ahvT^xGz;`4q>TTAXK;cGWzF=%>B0Haa~6)mW@RZCgtt!J74 z;V4G#115T+#az8E>VF0?1E%?L{s#y)jTO*`3bd zOk|BU{OASo(>g)YsyasbZI%>R%}mQ=AaWe&^8h)ii$HsPI}9j00*?M^P&Mobh?%b# zNR`|Twa@p!$NfnV+*%Kwt5QK*d>pdlk4ruT?bnSEK7{yR8-IiHHWA?WV~%u|GS7U^ zh*i!s?$-?JqWcE(*N6O5u>aX z6a5x+Cugx6&q&?+thvN!UOq%6pW2*JSC_>%y(ZsPXX>al|A=2h zXPEU?UFs)-A zYj zssD5}P)6B68Cf3NGL!39x0TqQ;;dp-$4uID8PNCJbqp_hj0bBTqHVX^c(=9?ofc(d zuepb?ZJQ%_?J#+M-ygu#r%BR`BhhmMMlM>5Gpf?*zn~C77D^4zn76po_~_jIyXl?fZJPPWcbj>weJAtA+4o zskN};Q!@dd{)aW`v=@I@g~1L+bRMyb-k(b`ER=d(-t#dwem#Edkb+J-&*GlpH?jHO z5Ac`rBFyfefqo$?QOrJ2wuNgdwi(3loai(Y{ph);_c75)EY2upz0~e?V|o&gI+myR zKFgh-w#5d|!D!pL30j4waq*p^d;H8G%N(ha*^P788Mg6|wVg1_b1j;0rD9z(juk;g zl%u$VDPN!B=dtf`wsSM#yHz_O>bFjU(Vy6*E964JmX^YW=l>xbsYd^or5O1q$Ba$+ zl&8Fcoz@AMU6_fBlu42w(TD#=x$E|nzb@oiwUepWo@x+(PU^rhh3yJPoB&2nL8i+p zVp-P`nEV!Jy33`se>la+h0B!PBUyZKv9uQ~n(-4vsK$U_(L_j{F&b(Q4}<7*TTre# z$&CMN$`nmw4Mjo{*OFgcoUzi~z@VI^;ZEakasPwuP@@41>=1yi;bV||wODWHjDdUY zG5XO2EF1M3R-Ey}>e%5}TP8=5#h~5)jr)YR!lb$Fu;Pv*aV@BKIm8nEsYf6>g2hgm z%Bls}|1*x>bvh|SB`;k|Oo&)GVwnVw^a((7RiM2mln)vK_VbA6bow~u?b|Wq%rz>t zmAja!U^TUzWvMB1ZS{sJM&(hK$&wlKr%2y#uiv9_ZZKkHbtP_he~ymfCG>eehPaG4 zAY*4@+2GMA`e*#U4#I|{=~%FM6Xhq9B|jl$hS7^=xdZ;)gv5O&_oX}fTgs63S;U8K z&SmEBt}<{U*2zA1I2?SoOaje@-qOs5TnPCQ+pXw3vJNwq7jdnr z3_I<-i{=l-sPMXuwK=(1s5*g>Df=-vaR)hDsQ1`CQ<{S&U(n;nx+n~}HkaI!gV1_Z z8%!J}$LJd!P&2`S_%J_XSg)TkWo;9b4cbpWZQ9#B+w7k8E{ug=k%6<7r!+$n_e6n? zGk`MxQf|!kWxn|PXR#M^SoxfLOgujtZuhifOOMbf2H+ z6E~R`ooa@vbwj02P0?Lfj5N7P3^wzEndo%b3-w{W&=jMpV&Kyp$w6nTi{RR2y~!2`2yMcwQn zRS=Y40cDTQQVu@>h{p@+urZ+CJ_+hR`%CUy`E_D!SzLnLs=JWV<{?Domx90Q5;*ie z4apA=f%m3(sGc^Lyn1~g>||SrT@uCgAxBjIN7C7c#k8(*c=--te1|XyAtbS*^*#+^ z=X(%BG6S<6Ou4!6WaEmO`C9@way>sy3TdZ{!mS8 zz3=n5mf2n& zAY>|Rx16fTX~)JZy3|!Xps8VdxURN8H_hnIWzM~IdJVCBMm%#({KRrrb%e+sqrsF+ z8J9|%;h~=9JBJKFjxSJ6-31PJ4?(c$AP5f*L4vR!maI-vIs-+2WJ1>R44_;eB)2~a z#8`uuX@?>F5Blr3Cc(>Fn;>`u&EO&`m}YZl$_=gamVM(T-mx+_m9 zdgabE4q8vcHRAFSz+{j3;AzSAniyz#0@k;>P_-h3{C=dy*&`~Zz32g?}uTvk3go$1j#|f6U2I; zGB`2SIv?)-`5&H|rbbP}j_9z=4O4dtnE2y4FT$!Av)lng|8~TH=wfbIxRn!!kDf5YIhcpeTjuMq`bw?;n3*%cu38j2sztUfM)q7 zpf0iE(U4u^Gv^v%)9ZBFU0R^I)eP@gDl{lLsLW;OwLMQc#anRj{(V^DSO}SiUVzA` zSGa#4h--#I`0HKr?*)19n{(^je|jn59|@nepTuraCM818RWGiO+A<1axnSJ3qNOalsrVb>3uUFJq0GgyfXRhgbF~ zdpc*&OguQ@EQb7+t+?~-t8OdVVq!E?4m1ntK7m4~Js5jpH};*s53@q{pzM^%ytp6T zww%P7O;2NBs}#J_c?ar`Ey2iLfk<~O%5AxkSENko)!Uoq(GLDSw?z;`@m>QoS$irB zVTX3T$RSE|u}{}{PL-3KSYb*pFX!UOS-f@Ci=y6Uw~~=qo!ngeJH83hkmLc~4F5 zBQE=%951v);$5TH!%C>@l+NwYiyKlTi!jNbrQZ3*GA}g%{nPJ^_=L<<=bl7t03Psz zydVzs$w9gpgPl^8uPMguKYXdKoc*y^rR<)@URz1|8tE0Cm_c)q8apCI?Npo`zeYR^TbMAs^FPY~I;^>4=hM4#zkRLq{{Pr$@ zv@dwcuYTr&H?SBMVX_Lcg_iYZGPxdNIs!}b(nO0B9^{!N7qbu zOnqM;<=mX?UnBMvr};i7cMsQ3+sn=6P0=)Y4(eORQMP|CE}yuUJh3}4@SmwjpJ#3z zvt7~#4rHpoPq5VIG=FYBovCA|$gTmVxfm#FF9xyz+eH@sbw4A&H50bn^S0&>6;0o~ znC?(xrar@zca|xkg2@abnG2ez3F{zIV4I3Jx`6SJUPqx9BPNUJ*WEDzJw&B9$J(%`>8)ghAh6(NR0vZ#Kg_tbm z&&Fd}FPbk-sE#z(p*=O_uBBE;U0+Nreau5{8MtXR&F|hWu;^~@mYsi6p8pga&{>Revzf7BZScgU3Qy4EX)Ii+Jp;6L{$)b7iQbw! zmC*nGeA-baE4_^J=xb;SdWu=SZ(_!yQ!X#?)9(297`S04wHMg#MCxTF>$&x2K;QMc;`a;o>DlRnraDLy*rufawE7X$Tr1S$F*|Y0~tPd9%RH^gdPp?aGA<$1LIbQOqyxEBRd;Lh9ZT&}~^HnC3)7 zqJJ<1q|=Opo?Y@>&-$#kD105vv!2uEbns!NJ8J!JFDEY_*G1jrsx0ck6j2}dngiN~ ze&J4AOS#}x1IaCdx#RmQ-kh>qRWLm70ynkr;zHs!$*^aoWILTJYF~vg*Wx{_U|0+C z)((P3FajKL6sQON4(6z7)csiw>mq-XZxCUa*PJ$#IF%;?CuiHiYs)59E zCH5M*Vmd|wJ%=G;EA3y;FMtvj zt8~wsH%f(=;&dozZU%Bq!|1s?q5ra-;JD#1l#S0Mx5;&=>U0BoA2|f>6Lesz)*f=h z>wv!W4Ku6$V>EA|{Ph!NUm3&77soL5*f*l=kC!<^R@W*bd9OwJz3o18CezKD!Cb#& zu+*iOm^s>yseC#zYghtHExX68BOEC6UmJ8Snknu*^~XSkv(WkCS_oRV5dueVgQ(;L z@MyCIymkhGsk#RQ7E;!DSyLExy)Gnw>;i5>heKwN9+vz?=XJ_bMpU~EspV{iuus5}A!+s}f+YDV%0B!l?JKA?Oi zEYCJTjyPG_tNIPpfpgi&|N90O2SQfWfe;w>o8ok*d#K_HD)$@-x_ADdnm(LZaDA1t z+S$ew(4+)7kn*nhKnQcd$sP0BRsPGF+xAYmKj+M+D zU^KgvyV6o#4?4r{+Q=#6&h7g)bB$9b*CjsXnh}31`|-r)$G8wUmF7)R-a4OeqVB^k z^6*7l$X_jKit30o<5t`@UJ2(|xaL15|L&QJA2WOY6{dPKSmxaD^7oxk=d%dGZ$0tQ z=cDI<;ppT?j+Zf%?P+n1W)v6un$8^;b$>NvHlItPKCKcKN_8SVF& zow@R?*+t5`og6%9sMmnbM^0GUWiVbE7EP?56#Vq*EC!9rQu0bURg-Bqvk7HhW}~it znB3L{6C+zFU2W=Wq2mu%^leC4DUS`9SI3BhZpC83smqs)00T;1L18 zDLl^Jjt8*YpEv0J^#K#p{>28{?_uDMqgZRe7IX_(kA3skpr>j+1`ngogP#)$H_CZQ z^Q}CuO-(M09>GIaa_Z{UMz3!ju>^WySx8?DKF}S*zkK6*DT3=}25{@tKu#G%F5kz5 zx}z=bIwwXMMMlhBM(iTd)Vz!0sR?M)6I~;hp;Wq)cBKb#;>`pcv~wd8zZi)Dhi3IB zPE2ubpW?~M+a}4q69)@*AOCEL!B@vpcQhLFZtlZI!;X_z?HuLpF5$ze4=||S2V8Wh zQnttW%Gslbf5zob_c4=PhPf+3(E6?iMr3<@1M}YgEmcrSQn*IgRE^H%WFthg|-L)AI}?e|RX4MJcilQf7e*3pLyp zSRo0ydn|_h1dDNYWv(+$=C<#hl&?XU?%++c2+D126p0NW>c3JJyX=i9L>5}inX@=K zmUzh+x<^IlaE+;$hYqN!_;YmK{vcMVyeD)gA9^d1+?}Ge_f65JyC@2!ANmTpzj4Ya zbKe=QFhAK1$v2A*G&5Frejv##6gnF)uaX=_zF8*oZqMd~*yPJ5-sw3vaZTzP=3>j5s6b ziHJR3Q}LJ!=2}en`K&MH%(&5OA-B66q}|myo;Z4kk|89v%>O$@?G8y++$*oC_8BTbL)|sLx&x51APjd5p zC%h6r6=Pnkrw;2Lyrj>dZtEqyM;UuR%MG0K{5X<}7XA13rmruTCtlmdHFxQ(+x9D` z%n{~%u7cKUo4MfAQ8F}37d4j~Gs>wk$~rRJi9|-76DD^w>A#DD`6S8o@_gPON>Y62?9~v;m)~Zpn&W84 zMzfOEp^Wm9%<&h^`Bd9r;;|cm_5Xs5#b4l*<9|@T=QVW;Z^6P*CqYW3{@?v|@NJ|4 z%8qS=q9JEMKj0orT>c)04fqCP1^HP@Kf{NFZ}9BYXXSiBGZ%3Dl?v+VaZtW{5tNLc z1_jAFpw9_)=BFsL#;WDx!11{jDjp93*Oq=zF|{Gk^N$IZG)e9t`K6Hi=*S}_ADXA{ z$0-*iQNEGce!Ic4D(z#|-a`~O8}(UO!J|zqH7%c+w>5|SdO;BCzX>W9Qts^KR=74K z8k{HtpTA_1!csEc8xE-rLy7CK99*X_hrk;fAj9VnkaHeJ56uSQ+Bt~WcLquioq|iX zl7Uz#5HNHR`6B6Ow$K6813$3vpg&p8f(J~!_j4l9&i7#Mn`b#Lh zb`NIeUxd1;2;%Du2y@;Kl~=~Wy_`r0|F#@rx`aZlpKFxeuWH?9NZPPOIU@$wP(#2! z$CX)%RrZ9F!%=e}Toi)7(|Jko)_feHaNok-YA|!f28?dD86)Nplf+X%$~$rLuyWza zN{c>!G1GY8W;xeBGnzv~-k7>H8*c^9TSf!9(V$G)38t+U=*7HbLkNBb}+YfO+)>$Xd2RVXAlAP2RuQ*@~A+;(q|Kh(UJHYgc!M z)F)1mf6fW~KX--lG%qN4-5I1YjX}saGnoNFvv?`M^FAkj3%Y+Ci>3pV11?daQ^ySQ zw-O_$=@4ayF8FV^Sik%w$^IWkeb9BeCho8~0J!!^rP2b6{J_AP>f()l>23Py_MLH{%@32BfSWmd{>+@8-uN zWhl{b%z{heZ{Vknlrw*S3C)?Oi3z*|#U=&}>7-M*5s6W=l@15Zd9iBeK*ejPvDZPr z?Od5P5I0oP)!QY}tW+|+%$Dfh!pW_r_-}@NQ)B*);fn7!y!jv4>c<8QY#W9#f$j>Q zP0k>@rv`JGLuZ&l8K&2>kvdPfwq82sT+YSOtDm9Q`oA#xNg2j%`GU;@%P^_VXY@b# z75kfhVmn>6>|ZtNWe3%6n0ztmrJMgJLAz!DyxHq+PaJzE3jZ8#8l@ zlZ@^+EN99kCU>4R_m?o)MJz0S<1OcfO=OVD~O_t}8x zOgmJ29DYm9!otZ9P;>bemcA{3S^bZFi#)$F^N`E+&(f5#*HK+%v8{2?(6>$oW z(cS!24W_@-kGg=??xVNc0L^=ub?p<8a^x24NUcOH4$08%4^f>= z5yZL9Of!2Qqb@Paa{5Hw%2MX4O<}}q5)F|DC3jfCH9@a=!B=DHfHpYB*LUIKvyUTm$b8$|G`#5ChBWyJF4Nm)BhL@&)!Omws;3A5*=T_^dlM;2@nU(*+RBc8w!M#5t*Eq9YxF+g`4P?Z)X7sxQ#iQu`wf8ujdXx(d z&OL+bo!%;a{1InvK!bJJ;PpKdTn?u}(0UFys|eO^{sCvPnh(vJecBc{_-OCd@S%L5 z&&*oiLFoP#1`WCopCWFc3-b#p3)iJFTKm1@=6Pqh>^s#3BXM5l zbGdt^cA?of?O){2fUl)7c-<5sXZUmo^Ir(+J4?ZjGErXZdMI4$^c^%8nmZnd^9tmG z2g=exRHQ`ypX&;*yl~P1(7a55o8x0aYbK}Rl(oc4je$EJTj8BZx&H=Js8i4fN{16G zEx8Va=sq#)ulFo`{n=;8z4RH#w+ab&3*qd^LgJa`0**NWy%+5xpXX6%C7b|aRYS0t z3klEf!|rL9sq0K!w9sW>J<&ML>T{u0nMeAf&CR|Fk(7ulQ#}2_I zP2(`-_I~XA=XP{UT8H^R$D_k@XW~^}SGxDY02gmt^Pft`S$kGuu7+)_pmrL$zFx7w zx^%{0IuS1Yw--X~r(xQfL(t*$Mlj^fgV^H+2-EL?+=1JnU~3FC8X85j(mK{*kQQCPeIX^6bO7zXU^hX;JK5|Vsq!imG0w#dRPCXu2ycm1t*qUY8^*!2?e`KP!F@F||UX;XyCfa1p}$%~nMWlc_cEgypTfeSSqCeblF4-8?-j;=BZCw8c@{F=-AvJM+A%&X!5y8p zhAO_^0`I|C@OBhB*d`5ET0yI0cp{AA$kjrp0f#wKY?v^>(Sw2I5wIVhCc9;`c~2+2`^uw}6S&E{ zGZ)O8xR;SS_T+BJ+3Sc-ztdiHQ#bTFGG1YFn>FMow)RD<>JukFI5#xDWf9gru~;+T zNczUJ$iecFhgIlsU#Fe;p$28jOKte`#(Qk=6d_BxNcAxU!j&zRTqUu+FW(cUl z3{%4;;>q)pt1f6wX@)}7-(1sp3)cfYP9j;P;^;lvn!5sFTN1b8XD4 zXFdzKYhgKXS#gS$d#qu^+-KTVqnPoSz-;p~CGG1Y-0!`BRv%}|_Isi&zz>P3i_7z( zh)KEwqsTu>`9GxxN8Dtr`|K-rm|r`)!D&^tQwF`;o$F=~-&Ql*y^WCF{8BL{TW=%z zQvaX7r`}oU-s$N3avC;T_y z?JEP5`#HkpcA|CpG)caf$~klL-H003Eh|LIj*5-QZM6jcF^Ua118=o zvBe+<|(gceti(3)kGL%MGn-OV+zilEL|^MP`7@&t*-6JCZe_I@kYL&+Wbm|Ie&F ziS^dZFBSc!?o*s@hFZqeeEnY^#Zfcr_NVc6w}rEovGJli<&n5 zBwJW@o>y%sSACD=i7m3Y{4>vqf5ClwHbb{7lhLzI0v0vpG$VRRzT|h9^7%O$y$Te@ z>_hz#OzJ*EacBGWF5~3i;`Rnxxv}R-UNEYN_Na}OIZ}EW`F$5Nj6BmEQ%6-so!fn7 zhb7Pd$T!qih?puGo__b18DiGZJ@ky&;w|iZF3N6XIm4$*rg=-qMW)~Qj>)qRnTcKg z{wT8t)A@gXo+Nvc18&ujU65Sp`+x_8zvu3I(zxN^Y)&39uF1R0-7CA|m(sN~w@k&K z%z~fhT)=C?Z=hGj6TElyK8pIQILIRf$$^EDi+d|M_;gkivsAUv`d>@p$o9hW#TqOd z*oJnUH@SLdHLe+QUe1`X^0!-=`obzknMr0o6UNHN7+CpC6N^4#QE~^i<@t=U?T)Qxnt!{U;5)jXqCH_dPb2z`)UZUrGZAL zJ41Q5O61d}bDWQs_I6#EaPBXWKGPy~Hzevnh?=~SEc{>Ef6!d5AR>yTE;++oubyS} zu4nWNrCBoVVkqA&zgIQ;hQQC$n?OoCO})FDP-|1J^8T~?C4gzfDup9m`Q%Qp4x#ta}=&c#;w1>e@aP4{Q32ZBX4OeB>`EdHNnw zpXY+p{*y58*M5lH9t)wrEduot58_Nv2eN4;(6preGTki=76ViAn&EUGsMUw-GaC`7 z)hG$3Wum6j1yT0p2_H)P3PT=-w2E?;y62+fEQA4NIJttsH@kV>8RRJi#m z4K_VUfoYxhLv`C$F!YE7*-huy_+LivAj-+3MP}^MpG%^wskebQXHLrwGsxVC@C^ z{19JL+8IyXfF#(xE)_Bk9|zh`0Qt>fcgjT=Jt+%5wLhWwi1P=mq+P5h*gCyq#E@jF z7ju|8(_J}>o0hL3zh5-dies3ew!cW;My}0pK$+1I8DAFz_Fd-cI2W#CHj(%fO!e^< zGiLtF=nM(!(N-p`j$`_IyO`RzjM+~4FqLyGi@yC`;V(u@|0=#|q5L5W82Fgx&sBgt zBarIfN#O=*-*|#!n~^XqZ7F;^w+V7y?u6XC$6(&G3-rIAfvQapLQL!)NSQ@$=u@kp zV8I9|NpOS2;7%aT>;;;CM}VCLft|G)@lIP zNS(xjf}N}&?lzM6qqV6Gk2_=HL>` z%s&cP!i>sb2qCWoalM3xLzu?VAQ5|;7ta`hv}45bW6Q8=-?56rPDd^gC-ZOUn-olL z;>D;j1!MZo5KLIE$KrNc6ix2vwyz~#>01wV+W&Y(NoC>$c0pnl<2%DHyw{ri##@f# zDwk78Gei7xVJCLG6ODInMq=XAKQQysAWT>yB6VlbI;|IyYX>t2_r|Pto#`Dz_v>E0 zmHer(YyyV88;&94d!WoPOMHBu6PJJo)Q#tPg(rE|L_3%2^+31zi!g2acFYUTz`n^h z@!-i9IM4nD0|z|DXMW_Q5#v#w2RXWLK;NZ16}D;4rEKi{`Ytv)a|OejrsKrLMtXnD z!Q`sLaM+pdNY5;qQ|#mPdE(}|^o~6f&&grV!&cKiG~Ex2`4kjjEC$@^hT779x&4Ed z+s4$OeB}{lzl`J{+rbR8#?!oKDWg9x%c_#aWOs^f#%@Ng4kkOmZ3{*)YsW{ToCQpc zH}Hsdwb5;_FFN+{qa4~$^uHLWumNSBY;yfboEbrLLZ{sr1jI{8+l2@B?#8g@#HMJp z7ad2(-Pr=^x+;k_7tB%azb+Ma!?+=|GwRRWH|}JqxQof%Fgb@UjElcOyKqT6C6p)T(7Y$^Ew5Np4W)Gg z%KmSM+cXm$5l>DHBe(aA<<`zSlpbrzyF;9~EnK@y#p!I!$>qx_Pb~>i>qTozU#7mf zmC>J(}ur|}IO_nI1z=az1D97oJ3I6Wrxm|@7%^k4Bxf7NY2H~pQ zDD?QX8);^bfpw2lA96b;9WbEZ%qhxF*YC+c+*~%43-e1Yx>hlwIk`HMoywNpoa8BlZ$8@q?MNCmk0r8G7vFsTEC8>Ny^xw+CYJMh!7bYol#o zDyQcIS9Q;z`LCTvzH5M#ZO8QPLD(vF9kv~{3#;zkhk@T?(5Z$VgKPbcz8C0h`+fu0 zkt;)XAJNxB^LL5orn?b~cRKo~M`LkTB&s)fp~GD2B*eGlny+0&%_RqxH?td4Rawep zcZqqX$gD4YM0K@;lI(F2{PtgPe>9lMcR^xxgK20x%H~tos9g^b=X*imEpG_GUSLaa z4>Vr^du$w|cbFviY7&1;LGr;NIla)lb{fXy_r%n~+Nl42pBwiPi{%M&>Xj;aR`a$y zTqr)uHQ@`1BiE1%gF0Ai9s zgQ(XKI{O(^J@_14O5Xy_FCo9jJIH+a7(6{_F7)dZ^j$+|v^8O1zZyW9``%Disix9L zH2SS$G}~sT)%}_5pi|FZ&P=P$Ft5b-EcHS&@XBcm+M%_9T#~H(iJ6%n(b>s$6C>^> zbN6W`dubVY;#t6^CXn9B1!QkX)~veZ55LI_hucuMG+a{Oqxb4u`u$vJ<+8if9=n`5 z?`jJA+atj6A`F6(qan7#Hb`0>3$e?iAunq)crJ>Bi2eP6_B1R}y^U!!DWb{slcet6 zk!#P2+_=3B7n%(9md`%KuV>mz^bW6bn_K~HAT@j>9Ob8x!BoaT@xDcKK(Tw6m7Ct?6Z5I>U6*?xpzO7m zN}m47b5*p*-+7$tCLWWl<3vV|3+8m+ndXx;3)C;8-IoFS&!Qb9bt#2wqoByz3d(Pt zW9}Z`l++kh{kb;5KW-lr9YdJdy!_wU$fNJG??_vMB)fue5sXqMHBGkN~*8kfwRGS4yM zuCVg!>lk^>iKVfGX(;Dojcq2%y+Bjy1<}>bz*0YDF?Hovj2O~PQ@6Zdn<9pSHn(o`bOP)jBL2umPPrj8*navbWmk z_nylhtvuCx9#hRtaol9a9>IgLIe50uBXoZC3Zr&@!E4{j@!_Thp0J`oKfLmNE{^EC9^D!zAZ7Y6 z$DEFRo9{+9+=^>QuOn9W2n?9jgZh-66t+DvIZzw14t+gh@PhAF^tWw6v(qNLw$gxZ z)dSJ5up7EJXoJZOy@-W45`}_bG$$;^;!5F2?`!nh?u)YjioR}6ZY`b{8o^b`z{%gm zbIMfcb+tQMU3KbIFYTk1zYziH^XCy2TMB09}E z&*^KFb2ySUaxss7Y~|rYPjXvti5HaB#5{rKk)gkF>-sjL^|$eivR15Ue`|1@sZlbE zCC*2g=~-tn@~t{C!(W{ibDdC9jV`OIjsZSBBxL%o>(pAMA!xGBo+JwtJn^7qOP<@85R zXq+8!ED%nw2@o=NEKhL%M5|gbpx<2{A zwJT^YOFahj_5FtAu*!3A^(je_tc1WAyU>=%6nc*={y)eZ02-6<@WKJy!`LWJUU?y zH@whr;=)RFb``C&ETU~wzDU_4X58Y+jPvRDp!PII{dFe)f4Yn_BF$!*tzD9m>$Kh7 z#N=+AJ^3;51{#pxt{vog3;^HW8gjwZ0jEZ>^4^ZC66&K@;cR?8>VPssj|)Gja2HCO zQf7Y1pWOBIA+G;z5hu46SFJhBRhOD@IUBF(-i+JK?YUv+4ez|_0m@ET=ByT6-^Ltv z?PE?M`S)a%Yxj^`pK0m479}&?Ji?dYq_l-iPU4o0xD_1(B^h zl>Sh~`aV!`tuusAqP}KDZwQ<<16oCIgP9i(z|Y~k;Zl4&bf~!ok`{`Pb*DCzkI!W4 z&@u9ETa;(<_FP|HaPkz_bzjcaw~|CBw|^M<=b?#d6EP%>P~@``(sOmxMeGk{xhk+X zsR#az`$FD|5RgVkLw>iT@WJ6Gj2rxz-ro=4+moA+I_@$=ez*p@us>mtBtdA~{op=p zGpL>|h5Y*A;P`SWG>F><#7BiC$#)^}S0Oa-^91OQ1glmONBZ<5_*O3u?ku~b?4Xt; zJcJJC9#QV(I+Scb59XTtz$Qpk}zv&iY(<^=Uyc=D(VgDs>@*J|vi`5j) zM5712f%0`=^Zvm?{`$@mo>qhC*R%uQ=Rj=FN}x8sXSC}D$0yDd4OT(Op2m=VmS#Hx zRggOS6^mZDmD!H}Eo$oSmaNTwN$QjWiQFWT;m;A0#_~fn>+dQ#`K&!%!S$gCnQ@bV z_8t)K6H0#OnP8qW7&I5VL;5>n6vR<)xe+j3=kubHNt#*BV)ClO`6OjKLR14xD@|*#v(+cSuys7us5j=f6P?yjHa{byu$l9Mw_@-w< zqsEfH;c%|_Cy!8fjktjHejz6BO3~2zo22e>k;}ar&%f#2N=`LmH*sNj3rpU)L}rX2 zUjm#9L_i~7?JqWy7)`6Vr1&lf~%=poRQ7%B)<)^A^fjjRF;Sc>G zEMXitHE{(wlV}RM%!qwUJGe{CIl8`brguBD0NUP20@qA4nDu9fd4C8NcHIote-?ss zuYO7vu6*Np7Jlsr^K1Bo$v$(tYg-6h(h@WWe<}_zTi3IqntmwqtSWr@R)s&9v%)~G z_7)e&8N;-X=0mrD{qSv33aGyA0e8=M@O`=g5^qfe!yp&1b-2u|mnVw)(aAh4sHM_T zbNcp{o4fjQtFTE-oOzk4uD1hKK_}4kb_A#DG>4k!DBp>_1$R%2Q0sw3a2PKM_qTf! zzl9mymofd>3}!v-2;>oFPL~fc>ZgkZug>xG9=<61V?$=A;U?mfOCDxiTX#Rkeb|ge zYgV9}ZH?lYZ8C`*Z*6ueZsz>f<1xptEta&-`@es=_B2lUPsK${tViy&uYgCsZ;g#g z#-U5@dt9(m1`P~%`)G6~W3=BJmBNp5u z_TwY+us%VjPA@U!%NxvULi?KZ3wZEFB39oMiLQa`aon8*Y+HB`yV>?&NP`&Vj_>YU zDBp=B!_RM`{!v$ED@>z(yR&HMk|h!UPw5rNu3`0m#KO4LgPQ`1CC%yWl68n(qFgk0 zuc*Vx2QLZHt!Ym+LVm|ch7Y9{VxNe@7m;Zf4`s%G5}EzsGp6(T%=`w@IsZ9*uBjuh z8?{qX`xo+5k5L$NF&?9)nXzyD6|9AS;;`++^sI9WLuaL-{rEP-X=`ZLGaubAEhP{3 zO04yS_Bz4j6&i9J2U)1+m__}~&GE!9i^0T^8!>#}8hky~pqz6P#*e3e{_mLIU5k-p zf>6_EmU7PYkN6Fp_EN8l`hv1MIPazxceZHR2`DB8EAu^GxAw8;a(Ft<0jd@1}jb@ z^E5kmB~D2|X%x2~@Ss0uecHFp@OJN2o!O4v7lnUMNClG*@XTs-M`^D^ZSrKK=R3+S zZJ9MecVSUxm{8uCQ74UQTGo-YJBD!m`mx6V?!_4_h@a2U_+@V>AiMPYh zD6GdJqYmS@^Qf>#B+r|;>2xM0Jxs^55gC}*BT4z)$v@+PbZ_K>cISE7rzf+=HKp?? zli!HbE||MIT;gHZI-=?HRCEdoL*1BAw8hNAtQFpvsQ!;f$H#Ko#d7)Gq4bleqoli7 zB$<4IIJp}+vHrOI1)UqtPnUGNw~Bd#XfCw44HE+E^;IwO;c~WJ=2oXJs*7Ibb&#@x zm^`Qn+E;YI(3#}n?B;<9m2}GQgUo_jRX+~fzKz9X&voeE_Yc}lYZV@>yEElsMvRhd z5C4+vAD41J&3-7@jkR26GHJInriot1a>S!d@o@ckO$@5{v=@BG zH0Gx)(J_~N%-30JUOID~62~+(b6D7+y3{{!57Iah%DhH``Rx?&Y`+-tpD%JI##^eU$!*slz6;g)T;$c>-pA2BmxJc(Vx#`7~=3$l<8_O}Uo} z*N9b0{5{$Wa^asmNtjjDVs#!U%HBZT>Sv;TlE8$dtD>;rv}l-L>P>83N$ytLdW)R+ z_gr&wjwI)nLtf@H|9$m@?v`1Q z{P`-7^8p-%vq}~vAYv}i{R7Bs<_hWXY+?qCi!sB8W@q8k7V;hbehu8K77@GWC1mt3 zhH;ZhVf31ENJ$iY>?0~*T+GmFC=f4ATlS1i(bKp937X<4Tg6FtCAm^3z3!5;x zZ)ToTN$E*jo39dS56#RUN?EkyeP+MDkO{)-->5Ss$@v09=?8ClFK1QHr7Y?n%&>VS z3m?3bQFntyS3G7p#kZKf$|0uzXl2n_`W%rzj(S7P+Q5aFcb`Q=^)kh`OZR<7>6Q)Di#{rOD(G-Y*$K>v(CK5&Ska~KLJ*h7k-$H-KLwVu;`CrnnE}^SqOB8;cG*$`YUc&Ey`a z;qw@%`)v&n!b--%1D&Tol5c*`Fd$z%KHOzW17b!lLRHrUG>kD~sm~I0 z8=^r|<9pn6b-iR8*G*xj>83UX^JSXP`FvwEPhlm|r&;usC}z)yWbVD=nd<#Y<~r>> z%WT>MN_wsYhjH=X`6L$fM*~6pi)MYDektE0=lU%``ZNQ&x$K6jeJ#+a+XE>5{uGEE z4zJb3k6w@pMRT@5)uEFh=2S;0`Q8Z}LnbQT80VLIa9F(@v=#Hfy^%LqJ$^Eyb}loW zzb?s+4gK$>T&Vq(>zq=!t>#Bb$)%q35LFjzGDGx3<~l+H5zE$sf1`M~l24u24TH&7 zp2LWhVaeK%$rBPAp>HsC(6cREGo`j<-C?4>lM0AS{eSk@?m=K|+#dXP|74U8WTpq} z8L<|aF})5m=JjNzyZc$iNCAR_T*wur21AF}lzpJyYZ!f|D7z9+`3?`B=z>+h4n}PY ze}ye1_uoB#h0q;v9q|+P;j_k^`rLOhw$nZ02wp)`YzFpD*@0J1uE*3Wi_q`RZ1gW) zj59OVpq^NRAO577%CY&1t6A;=3vKse z{^9)!1ODN*81(%dqMRd~x{#OsSseA<`*Z37bJfo?JZs|}%4+Q6dAXyx#`%S0k7~f| zy(=laZJ80Qu1H||mO5s1tjIv_P&)*43 zB71@gnu9v#s>~c=rjdCP<$Zbnk0I#g7LR3{(y?>sDav=9M%;NEsds`M{))w@H|uF< zwF85PW}(;n2RQoc3!HZLEuOvd4ej1v(9qC^_RxHMJ>w1*4ZTD^gG@X%>?r#7+(kRX zE%g0dgXxO{(SLAzRE6E=>XwvKdNq*~OPE{tci`^H^d7p`glnrz;`+zedG79JXuU!2 zUmP6%#gyRvu$5buCpCnX44q>Zlzn}P`Ni!w-y}& z=qzzyC=OdN6w_x+$18o-V%yqlsE;sA$yt}oGjZ#bOOnvv#X@H#3pwZ|nlmX39C=o0 z`~4DmtP`j+xtF`UlyFBp$C%vYInMEVtvFs9RJ_HwKMT<{{uY+2F4GL?4AT8o zd5%pxMV`qIi!l8uWe>CZqRc5MZPpvTt`DaE{{(a@9*4u$`{J+>9%xIeO`XLYZr!_r zn`TN9?XkR#HQksw#iY!5WL6sOdMTgMQlkB>B=meM85?+T+r1uK&RPivtrq!wDW4gI z&H3K4ADcRGQr_RActK0fwQI_G(XxhEdeH?Fp7y~C$H|!YWD~)Tj^VdanYcrJ42xdv z#g{wRquhlQwzXIG;N>q?VM6d$Tot|*$>)Ms-UgtwzBwA!pWw!NwYe}iUkv~6JS*N_ zjrh`z5VOAq$jnxK_u3HFyc%3NSq)N0*CP%TJ(Ht`gUr3wrIM56+j#JuJsPgOA*4@U zPjEZQpuGKbC|Vu`+Q4nF{N*lK6|w_z%ELi+!CJ>OW+kmI^N`*i%Gq4LgT}n5MqQR$ z-0<-{4|go&`ghGRVd-Erx0r#{tHKTrvDoOO5ocNxFtei(8;zQ$Fg}bmzHwE27Pk$E zRXF`}$Hd;QF&Fyyak+0}CV#hIgF7t5uRch=ogi^1J?Dc*LT;x8#245M;;Ky`^NHl# zm7J$K`(hi|?1!MO+5*J*1&`T}A#>hcxN5j$ylL#?W7l3biCn#B%ujJ6=>`-32 zL(J*Z8fLR^WMOd*5D+jBoE!#&v3)Dbd~o@0!G!4jlKgw+6#Ja+K3Uw_@T8=xGKuN0 z3lQDi3rhOW2B`;ezor@?DK0^A9?0h>W1m}4@VywC)OrOID?NeHr(Z#F<@a!J;4AoW zwSYS9_koys#M`=0F7SK^UGWHF+@8aw^M4c9`zyGWS3v!^sy;ni*YQaXY3vi))5#}N ztMcjAPVjm5Hm$(1 ztt)+vDlmS|RdO|^q%ADVp#qlM&jqyG>~-1zTIa2)SX zyHH|}28j^UxeJh=82mq}6;2x6>4BKQtbF!$M(!O(JQZe*r$58(-4;1dV2zBD=sYf2 z*G`fIb$?0o-*t(&|B{^7GVP~MxAO*`GjR>&^9_=9+8T07HwM{RlN>P;Os{Aw^r4lRMK-BFO-a33tm%z%{Vry&3OF-Z401atOm z2kNrJu>OCLyEq8Kum68$DFnsCxJ^5#s}rxxFx}@af`BTMK;4#@eQ!rW!dM1b8Op6>~Ys$Z zODPL-pC^OE*Oidmqzi=HIl>GLZ(HQ|MACi%iPwSdyHw~f`2#op+Q!wr<0WC5Migx2 z7levVlIlQHE_VsNc0N8ZNtT7&&|6NRLeGM%}zPU7dbz?k`3q`m^m`Qn9z7qGAy zM@^GVbZU}{ccjDA={`wJ!@Fp__yQx!Y}olt5nju@hBsqOc&b_?aUCb4%+GSsc0lKV z4yYgPg63vTF}PZFg{MWIRViTQ6=pA^x#-t1AfJ`pGMWJGvT65mS`_-^Namxzb2CqcrdUWylvcBqV)0~Xoc=M}e?%Q-XZ zAn=NsmC?4Fa{v43&(o_PbtKkfW^ooucVA<_kgC~BiygByF{_%3pJyp&z4OIHR2* zqs}rjdLrd7E-8C#)73C0Oi+0fZ-A3KkQbDHqjZPem@J{4H{Rc{PJ*ah>}Ekc5UyK zO1-a2%&=fB4>Pt!Yw1uVt|{f#TA^u}nH#k4B{gvjHNF!ip=@Sf`fKHES6_qBL82M3 z!hfe+yTbRCS@4F_A(E<-pW>-@+tL*Ek)7zwJ{*fWFI7Bka|Rtl%8H=M{Q(*_zd}vZ zCs_GS9ugxG11ep_mpxA)-QjWGhtsGol2Fs}0%ZfqIXOQCzqKTn=8E~~kPaAppPT?Y zz0f7j1szWO#dUS&aYNGvlDg!fNWKMPTt|!a%n*hCfl}V6KyLf@CiilvfwtVHXi&Ar zV88k(|8H{VTBs3Vkv*G2Q<2%)%whVUG%G42PR;lkO!u=H`yWYX9~WcV#qmK1(I5#e zgOHbH5K?oU8H5n#@sbcm8$w7z2!kXEqrxBzLh?2eQulRc5RwpLLl}hE*bqW^&VBD6 z`+4@CeN>wJzOHkAzwg)DvAPiJV&s0Es7FGx#>~$F7(IOjy2`d3~1}-|i52FXJMCGj^m~^B$F@cfWu6`6WlpoTh2D8#Xh{N>g z87qC4$12OtGKK9vllQ7(K0O@3eo%AjGIs5=WpV{0$1)T9^5qAoOMDZ}(PTkn_KV!u*!SNV zbweR=FlEfoub22vBMu~k$B_f@$JZ`!|F5`4){0lx>?P<8D#l!d>iSzHZu@?3j$xAk?^u&0jtMCTf6hY<1wa^kq# zUxl|LPQcuC$#64^c092Qq3rEAkZ%tK;`)Q@K=SH7T?F#%$v|geh$POH^+z8j^aa#ypjQ=-g5?DrUK+(~P`F!~l(8#>?@HJjRSNE36>T z4gyBo0Wqv4wv(9mDYw;O<=?1tJhGW!T|y4lv@u-l9gDqPS#a%a%I;^G_8b;jBuxA> zME9WQUkl*G_w5oV!{vD_nC>qH;Zrzhx6Y>=(<<79Z-hm!b^u&D39<|Xx3_1=yR!?* z->d*zUt+PJo&e>w$AQd23$fqTkaBzgvL>hSRLLw4Ni<@jI!dpqqCyH4S9nO5p&>*v4C*6dp^m~YG>uH+Tk zA%5m&$1<*Kx`VoT_5ykNSYZ8HP*&L+0>*hlQbS_jHgbTnP})1(q}lGnoQ8mwQO(-_j$Ly>GEfa@i0wS32*BOf;7lbgrTItn9&jru^KRX`c315!00y z6;k(~GTY^G^!{8%vzoJ)xNX@~%Dl7^WR2dch^b4t&)LlUIe-z{Q6=-}?kzi@R_T`K zsH_#&RbqBfmsU)LqIy zmy9B|c;!f>9Wgdglb^-eNcZvslu1cLI)7v2r3{RJc^)HIo<)zc6X<&L2zuo0$BMB# zky!U=Sh*ba9s`jwiBi8hFro%lym!Td^@GV95`xsh#oSYKu&9m?idih{-&?rpk5OD- zrsJhW2430iA{R6Dwq30-bPQ#Lzl@{V$V$m$-=$X!&2bhHBP#+k*nAY-nE?ysNX#)Y zlg$-3FG;!Is{TP(-fk<7az2ikyN=WTC>i4>QjVtDd^G3kFn-@y^bH<})`Qd@pV6QA zpxvB)eP=4x*q1&=#KQhL2Z`_Siq-ComSo9<*2+sOox@;7_#pL4_UIF7nK@#=G}ZQ z&{e(aRZMevjBi{-)yVS+NBC% zbFIX6eZse3{|`ISr`iczz2hSB-LGQEtaE5+e30Cj3G^A#W2XCTbhY`Tc9joC&1B>j z?SmxDzA>A)WO)Vby*+EJ&q0>fPF0U-CIyWNnnM zYsG!T;-oBhZfFuONE^gOMv*abo#e==RA*BLFNf3qfom?j;PxK1QS7tOyp+?q2gMn3 zmznLbXi{q|f8G}9EQOg*?69&;Iro)k@PYv}7t*x%wszXB(l<>|>7RbfRt}2b`q61z zbfXaaj9ZIVQm)3J@@%k=k>?MRr_O@+eK$e*_?;kfPsJIDaeXlpJv#c1dsO;~X)1Fe z<|9JxGm_BAoAFV!AqI#aOTo$BQwPBVqqz}SY+)Tth~=frg&b?;?4EJ zuA&XN{qUC9)1L2xz^~0Rs1jB}#ipg;a%BaC2CsqAzt<3-A^{419U!k8otMb5Gxz6O zIM(BT5V6J;>>pPLUED7gd%qb}EgBAT|7Aem16Y${!1Ks_uwOO^=w2rAGn4lbOR8Tt zFon_Fu;mKK=(Aq(_pVlMf!vLW#QKSYgeM7*5O)Twzn(yetr8;P8#G_>3er4ogHDqV z!CMNTc;Fe z?%!C*sbVI2-ZM{GC7y?At{{2(w9UMj=AVBB<(}JIybseE9f@a&B1b{L)RAirGNxUV zM$Yyd%s%iLv&N8%;XBYmvZ8JUENszGSQ@pN9H^-v^23+jJr2IXN1>|d zz<)maHJhlfw-x*niTi%z5EOgvm;U|XoSoq6K2P#$ndedOU%f$49%NkCu?rXPaZ+~h z`oGLm=K>|IdqaLZ2I4s|_f960FRIBjx&DG_#t=^K6kgzF=9K&Ap87aWd2GSDIYXuR zIFl)DBbhe2BXvus(f#%~^X%Ff%-cg?C+r65*TBsg`+)8~5bNp()bRz?sZL?FU;ZAIQXvJC^?Vv2knQ* z&wD}iDiy7nDlw^S8!MPgo%`fY5SV^qCt?`rxGtp)8iq|q>+jjpZp8Q37(DiC8U~ln z#iWl5u=2xVEDQ=lI%A`YTW!kzmT>u$W~eLbhsjC4Sb4pV^p2)GI@i003;MQ}Y?*JX zY=ySH6(p+(?(3 zgRIdlFJeh!m)g|(qPwqtd2jJ7%E&LE%G{vm`To5yzvfD;j9ZFP=|NceG#F{8kJNb) z6nVr7ijRV@9@9bo_$-s@DZhMqI=27&B=yuTVQBXa7`bFMSDwgY6*47MWle))x>$(| zmOp_!mTek?n3tp6E_Ye+ii@43s`(D+`Q2d0z z31Yv=y~AM^Ni*b-_BFwEF=ag?Pcy60i>pR1#jZ`CQ)bo0(&}+Hi#6KAvZhr#ONMWC z%f%n(F!)6xc~Vj^#bTwulU&@?)PnLq&Y*JrDO^-}3|Bnaf$@H`QM1$yBkn8EG#54c(to>4$_5*JYjBr0FE}|mv86l}mv*$!p70nN z^Jk#^iZhyC_P~^ti_mBJN*v?X9`)X7*~Bt}%=LO8))jb+TS{*7p&)v^#Qb#T#u3Cz z*npJVMYk{`{aI1yK7TwOYZ-usJwceaD;{t5JWKt7JpBHUqtpHrlwC4l18pL{J&=wW zhDTWMd=1O~@vatAU`LB>XDdtYiJBI@?FLSGv=ixWh4S-}Xe>&=t{i9{s zOmYurl#T-ZZ~6=!{+lWB5+na1v)*{cGCtLXKx0R!a_9&FE1xi{*Jf4ukg?LNGhl5U zOs-vz7`7HJ3##L-7wSX!s?}09GBqs=zRb7^;SqU|R&0Sg4bFkzRt_tk-vIaUS5Wy+ zb#<==4b`;YRZl+KLS35TqMp{Fk-G6D2X$w=2I@Vh8mk{Rbyna0N3Is<0HVvy){Z(_ zs&w#wx)XfTs0;LBEfnux3a0Orzm1*^r48pp^7eV)-ZuvPYa9muSx7$v0o+{o0dX(E zcSaeb9ED0APW@TRXi;a16Dvt2at}oBs{Xf;+4`^gZ=dwxZMM!ll3V}eTy#-qPOtV~ z7xwc$>3h|#ARmJ{7-Cx-1W3OGDR=Ke)%hYI=M0e3fEe3X;G%}ILyNC~v)@%P`Q?F8 zPMn=%7r>?I8HrUB(P}AldC>r_A1UBsA2TgZWFEqt-c5+~Eo~OC0(3ny`Z1 z4%D&Rt&(;0@)r9I~-QYWR5aC|p@} z6YOd~hWL2}5dG+oyl|db1N@n8S(?PG zrhSCB=2M8u`pQnwlsNIQqYb##+m&lqPUhsek~*v+r=E5|Qa^-TwHO!@j?`BZy;k^k zjTN1T7h<`II4V8vVchGx7`X0lVpx>mgu$Qi`R$L=99=u_I!298!(^{DNPGn>x=UyB z;Dub~a<#AZNM9BCbOd^b@qjUxxx;`CSa5wHX6_y=@$f}Pv5c4iIaB&W@tNsB`2uiT zV+UfVNw(~{x5&y+wg}?l-Oa3>#KjzfEO=d(Ot-iV6m4~w@jY)5;Y~c7~1w2 z4js7xsqcc?t`(fJI^1SBEwWs)HF@R4zg@}|j%Rp4A+c9Bxk>#k;tgTR)7eP#d^9tL z@;BYE^eSLsL_hSMHVU1Z2huKU0A}JKbT!XL-Q+l|^>IJ8XIU7Rae;c`S240VIX5=m z#E=PySx=85ojEY*-cGFBV;^-l4oj|(fPoh5(fB#`zxxFpY+vzg$4U&(s=_f}e~4cz zW_p%LE)Qaj;-E%1(XZuIZ1XD@9d7)MVLe`9=rii0-?)jJKBc4YS_2xV&64^q87sO< z{&LFTbNT#ZocfKNKCfJ4^@AE` z9&>WbNcT7E`M#Xq9bCK@y88Tyv~$B${{a%;TFh6IlZ2VV%b97Ho>4DZ5LwP4JMGcF zXIJzMqM7Wu+GyClkL$+&7Bt(23bw!2sUj6@8$vz7G^F2%)}e40Q5LgcSeH5Vd?3B#&$h zhJ-gveq=k-$vmWtvB-`Ry)Qnk$sL+g3o2(nW2w^xR{1uW+1n*EO|qGV_1i-ZM(W_v zJc1aXJmB{sE@rpIPNT-~kL1PG22iG!7*@8StLP3hUnRSxm6(Cz^Fef|iF0~g>z+(L zx{y`uQA=5_sP^fwE%H7*Z}I{9_k9h;o2@{d3&VjwwV%l&p7UH zR^I$8(-nVax*rdj=G6&ib_`{-&yddi#8?o@j}GL9XXoi|=^!zabVq;k@-GF_?$MC3 zkdtGK%TmLM8-1>?$Ys>m94`=~h%09hd;CpnG}pGn$XfA~7aQYE-2*1FJqkRIFvaFj zru81ge19gg$f=dgP4g$@D1$*M+XR$(2ZK{O*w?rOlyd^}ntR|f=?3M!5C+Z21gF<0 zrEFgH%^Rd%GI1GzI*CxE9SJ$%L7*S95=PnSrCDb2&M8| zvCUo7+ftjWzdfjlon zd|t?#oef22A3%Ee8_-)ngYrZP1jYP<<{mQjl{*`#**J ziYE~M`yD8oJckLp-cm2_IpmdGhf%{H0Qn}N<@!tr4>v>J?W3@0|1N0Wejil!I0LE! zGb~%q^i?{+H}x@(Wlgcm=doD%NQtIqExE{x z5qI~wrk+6DRj?npk+^{ifU-YKx95^T`y%vjY(iSRC#?nB|a5tF)aNBW$ha^PuvXgG~;=U>JC?XTj);TO^F z)OFfB-o*WLuHi+kAnjIZUV{BEmSbAC8kU3!zp%ggG2KBBzic;3J_p6ZgE+?dDh53$ zMQHIE<;7po?zy97$W~{I{96OdF^86xPN&*hLT)v;JpAlzY4gL$GTpbKC39yjOXTXW zDF5{a!xn$Q8g|t!Cf!#I%avKGrv1S8IrO#MK=hfBi3PvSNV_#Om>*$a`Fs3wi|!*^ zzaZ_+P(Hl^+gCkDpYjX1^u-}mdBtP8`x-nkITn2%ti$+Pd(nmF$g`@MFw}7ePSzep zx2wq*WQs-O;^or$!(rPN?5*BG^Oc=AyCX1cdmRRx z2t(QxVP;$h^sM8A!RfuQ$e!ky<8@O1CE446al;I#JFpe~_HV}6j?oy{tr5!Zwv{qo z`j-_n-+YrTyPoV#y(w?a&J_af%(#8uT-viddwCO=it%$OC}*I<;1W5oRz#2KgTp`&2yxLPn>u&PA1z4dqn3)oRznwb%YgNfZx z;uz=#lqh2VD>e>GG&MhgjIC`yUUR5p#hAA$7Ras}tB$qaE8bv3yx9C-p8@6z9*G97>UbMQ9xIDCbh~Cd> zN6QV5Msq`AZOJ1q)7AA>w0N$f88|baJH!%c@0xomzr5#z1$%8bEc%h7Xkt*95y6?1{!&4`G zrRRHR3}~alz{uGsQwJgOBQQS43yJ@W4j%K+xqG7UP!-h7^tg@VGk8ZJV8z!F{wvHvotT;p6@Erfs=VWp2;8gre6C7m9F_! z>d(`@Z`)I;6Hm??Vv)xSA;)$xk8D>cRr-V9Ydv(Dm;goxBlxsm2A*ZUK%GQT)LX?& zi?0ch&u{R6XE*2WNWH6s>J-Zt?)WChreN_1EtJ8eH&Ap%~Q#$P4cE$m_U6Em3H_8Cc8)b^dEPb z);@z7XTD|SFU*X7cNn>5s1v%zTfbreCk6_)`n6Cg8U->3jqE=k;(Q-4OdJP=nd4#5 z=nb&PYYjvUCmsqh(X90;TS*LCaTh}K3!$LX3bF6RZF!l3>8yhJ?RNyqJV8pW>EIa? z0EKE|@ZaMS+^}pqDHf@Gp(6^QjSV?ZI8EZSf-$S>@M~4Y#WJtN}et; z%dAb0m6(i?p2T*cyp67{g)59$CcyB&D)Oi)TE7Eu_05?o$Sx`1+?pZ z)C4tAqA`8eDx6!F}Z(@I9OiR<;@{}h>PgE_qw+1NmNHXQJD~SJBbO$Ny?UJKHQ!XUv-g(fHQzc5*6MC5{r|RS zi#vSLiA6m+rVQB2ayzak2iSD-xgTLV)=s)_ig{4`Q@>g6G8rg{;7&7as5-g?oPJP_ z)}4O8-UWa>W;$p#PX@)azlec5AF4`ML)^s}DA_#+qHYfc*(*mdyCUAkIr-I~fG-Z+4)^f42&7qV+|?i+KP zlRt&a7S7=M2JZyTrrRptLGPG542Fz)p~Qrm1r^IE57Sf&ISv3clL4{!s>tsMvHga@ zEWVC9UTF|h{|dBOcL%I%Z$eh}%Rp>-DF1W>yqax<`0op-AL$2ft6D-)!%9|k`6(mL zjl}EK4}Qty{cke;3F?3^_GX%x03ocWniKC)nv0ZdZ-pMlKB&4>S5x#?>NqV&#dR66+?T<{s>HXFpo!uS3-qAM{A7fniGe?_388mBxe2FQ_w6 zClkiJ906l!w-oxgF+{E`kQ^x?On?*p^aXrhNQO>DjG26)4Vm1!9+|WaV?ui=Q7cvny{C$mMhAaGC3JL9cLO+8R)y`rlwN75HJGumr5Q6q&!F>)bSV=|^8@1LB#{s0II1!(q0^N- zOm!~_xC4%n$xzHfnbc1N{f*{= z$a5wZah9!Gr4X|0fW&=?^lXS_a~h-JSzpZf9Dt>7Xr@Scf~xDY(eC~V3~U)sTw{(o zT}#kwK^azc|AL-bUvW?A18n4Q4V~?;Ne*}Yz*G3J@DvX6u;TR7#n^n`Z&Y1sVlfZz zXxZbZv_NQQ%aQHPEhj4LTDs(X#n?61Bo2XMR6H&^wGP84uR&AqHE7w{q#8WJ?x4~>tinNcx4T4XHoV`rTk0H!e+{uYwx;#0O&O zf~iSb5|!zDj$5p@Ylt*TJXQHR>|DZ#hL7P0FPn znU3U##*(Xb$?-MW--OtE@myp@h~6`O8>_eV=l_^u=wR|Q3}Uuc zT1Nf`mB=sGESjzo8Qn?+adE1B;MAK%*>@E>)mEW{OpCfddZOounkc?IMW3YjtkCQv z9whA~<+e$b1#{(wWn0OU;7zQe(JJCYOS|FB4o_G~Rdw*mZvi2J07X|kL1^1a;?6{8 z)+blzE9N=wJ0q70Ir0h_xndb*C|Fo#E>qq($ujp{W#n;XnIBS^wdqThe7_shF6b`3 z2b4wr%z8Ip?3D=xx0X;RY6I7PF;TDah%~Dt2Pc=8?f;KISi2LtpQ?ko&r*0;KseW& zED-c^7Zr7-n6-y96a6vdUt_we*UWBdO;Cmy=}uQyMa~w1Tx$Z&c)i?f?qYT;2LZg; z2Qd!k!C9XVVaEHktH_dkuC%uXw@f7j4F1GCN34}P38lq3QvTI*^ioJ|y&a0?ZiLcS zS`cTkBBRuna6_n+mGIcGj;QG0n6k@jxOIlNpx@Jri(CcrgW`TWBOc21UD7~u5H#y@3uq#Zh^4q%@BMj44g&`mbfsf#`=)z{*hUe-!tNT5kGJn zvlcW}*@_G*McQswId&%_?i({1b5*hlo3q5Mmu|~yPP0zwcR8X(BkCSDMc=dk^#N(m z#O0UkNdDlE@l7!@o%$2(GZ(vL$EGwvnrUOO$`4C5BPBKgIX}=ihBEFG90l3uZY;Ga zd1UMxK-u4YAmfxq$`va;{sh@yg^XNwOmv^j5|TiEjf3sZOX&Kg3S8=x!(_)o+P!2z zP91XChHQa6>p^(VFGH8P`H(fZ0Dhgl4i9OZAnq9RhMXiH+CFHrCYpGUUef!Xn5xV@ z<|*@yq&eGC%FW(d!lZMop&yfhyEpY91--CQFtHp#^aEP+N2w@7uF?%4rabw>i232I zbgIqh_mh>6BiE0-J!ms1QYI?EAo?%)a2eK2qu@eQ{h3A-y)h{(=NZ znYSF=-UU*IVFUzJ>jx42MnU}R(Xhxb4i2?F1;09{LT2qy$xT~+@D)?O+s8!DH8BDi zu})aZ?Y@xwa48UX28{kIK<^ta`NEWODa79ymL-RsJY{TkjGgi~*R>ta#d|K@&sgli z*3|3&1G>~~0mQk3*v@vKd`cd^h$@!k?+i|vvmt5wI?(n_kn#{klh#pABpND~M}W)A zzu?dSI$s^#3fAx>Q2OtsS+kk=`^n&RJ`!YA{^0g^69}t*l@a$$+EvfGXgi~v8Kci%mbC#fC*Ivw5&uFZvazUlBr+DcwpMd#H%8ePd@^$<`h80zr&Ju8 z66ax{5A|FP4beP{dPp-q2{L_qLAkWEG&7}6z2qa3*q{?OXBQ0YM*RGRth9>qU3ncK z?EP>kIlDz9*aGyv0k>^*pQB8a@ohawo&A$}68Bv6YFL#eELG+L^o#{^ zoD-|zJM%oXnm#-ARbf9y^VoXi5lDH>L(I3hyYoKoa(gw;d=kyASB<>jd^#6rK%T1h zm>K1Z0W(*km;F9m8fwP3XO7~EfA>l*2z}cHSQ4@jL!yE)RRJixbCbBX;(Ur6(Sp9R zi;A30jB>S1R@XUFOAaKxh5cBl;PwPVIKT1fdPAtb;2S9cI7R;^w3@C>H#FvrS zL%!n{fZeHK;8(Xfh<+otKkI{8N4%yNe?sY_K9F;|71#?kpkOO?3H<&QG8diT)Rp4a zCuMw0pGFvUyfs$*YJ$Yk=0@s0iLMdrzaP0V$PvqyI}o$2F^bOs^O*`>R?8VfHfu3* z^8c{v%>c}?2XY_%=H{p*E}OpA+atOzgdQ6Sn)@@MO;r-yi8u_DcY@5m723!Q;pHpZ0c_7a!a@4EtvH&4Jlo@=BGvgZ`qqb4jx8vUb~ zUy{}7h?FCw{n%`jr^MmpsoSwZ%S{p!I>VQGyKx(_U{MFu8iTnlAXlZ2D<_6Eo$0SE zhS<}3>YOeIq0Rpwa&r?fHQU2XzvEOQlb*cCf^OggVhp_!tYNnV$(MS$hi zxJT3qwH=CbclArkQ2QyDryorh4g6jnT=7l zo+x%<%R4U@T_Ik&oFpdpIK(@le&z=z=F;@ZQ7T!@HWC}gu%UsJ6Zdr0i*tZ%+4tw! zvbght$fvQLbm3uJPx9D0T_`h4vtZf}Pkx()&ihVbxWgfo8H_k$^LqLklQ3rWera#K z!ea{_YLkLh;ivIV_X2c&{eqk(&oM5s7(-0=F}3^-rmoM%9D@lPEJ#4wiK6V@0rX2b zLLKTOD9b>!o;xow3yRX!C^yvM z2Kv{yfRi6&kUvPk@7K;DT-b`5{VOoK^?1x_(Fql(|@1OJWRrhO{=XnV) z2GRZ{<_5+aZsByVeBAc2oNvyCtWoc6GsB%X>_TT#fJJtPyxbr=VF6qL0X($`k z0qK0f^(T4>nmEdq^gih=`d!4cuuC7xv1uN2yIpoDKjem)joi?oRWGFOIz~OypuR_E zjGaVok{ylFEw>}}G`pjFGhcN1x(FTqScT?)mY}g~98#~B_-T7E^L9Qy@&1Xgq8%*# z8`ZanokQD;e^B@rrQf$fKNHbBY&F{X>Ty=&Hcan(0B0>ZfX)}UA$g?G_eLOPs+(iv zyuT%%pXkUd?Yx!go!>F#Okx-HVvy9cJLI_bf#_)rTvibCPF5G_XUz0*vGfnIoX4*w zHyX_}f~n(od$;5Y7c;)%b2~mz3Cef?d4q01d3h)Vdob&BnWoEBCb98!aoMu$P6GX` zR5Ua7ruU{`vK$hKpDV}`Z)6kiofp)eCf&a^SBLP@A4fR3P&lzXxp~SpZoOG1n6B=X z&i=G7P?fiEWd_Hk%G?bnjL_hT@kAP z`37P#Wa_6+Z4V~41)4dFVIuZjNI7}_E#sM&o8)N?hT`!=|S|5ogH!(RKu?T@pQpu_>IeKEP=UgZ7?X{6}Sy}4<&=YfMEvp z$*Szt39aqa2_4F$c?)@kCH5pve*+^fRa4(vRZAU$wbgIE8>myB)>8*q-%vIq2e4Hd z_$MEc<`}OI9fT_rH$ki)?K9rRfnH92wTksnm_(f@=bb=%L&%Fd3`;NUl(JSjQ~ z67mNtQsJ!KQHUtYg5Hj~@HY24&B$KD9fum~yt!47HK81O*nNRE`~$$fVwe?`2b)Z} zaP!t>xH9<`*xfII``4aA<=C50n0E*E*UBfRAgxPZXVcs$1G+fxgK*das#B{WsY56v zJNQX+V&7H@5cyJp>Ut6bTVx^_8Xjbkp=PG^9>dJ*$1;Ow95XLi#AMAVn??R4k^8RS zoyy!(|6$4+Z|DJHyc?v?K2Yf&Np7-Mtp}%-t{fXCA)34YubwVC{Dn8az4+ zwxuSh^o;`TTXGb4o(QI-C`jM55vm6!f@;$mAU7pM9t;GJ0mI3MLivVw-N18IQz&Fz3h_EeS3J=X5jkfV)QJi%g3$KRqx8dI*^CiO;bi%k63@aoh%{KdIk0w{&eAUvA_nHTy(SihEF8ug1Acidy;VOh*t?-bL1yUIdF z5YN11KhtMDS82D@VYy+sj5;EqX||A9V3e19H?j=cDvT-t+j%5?uiZN#_yS2m*9xTYZ{DNu^1JH zi6K%Fi*AlHvC=pm3l+ggTvRM5zRpGWyrJG8mNC>3j9Fvod`R5VB62M~4FT$6g6p_u z5SdZMh$RV%$8>H#-x$cv%|!2j((_MgPC@;1rf~b0#g=xFxKko~M7#Qbpc**{3u zHkx77U?PXuFta+BecH-P&f1~aJ(O!axURU0IHwy}RZ$&Kv<-sj{JCK6ze37R1&6MI zSKn6yF|i@A>srapXmZ{H#HfTuBNCy1^>tu>@qgs`ZU%~{*O>do%}jfD9g_{O59KSU zSJAEuq}-z3qFW6pZ`Y0K6W$1#*c#kdzlPhY@8;#zow<2hHy)-M$Q6Zcq`67?$#2|D z*^$`PTuwWE9{cAV9=qlzkH~PsFo*U?j0+5zI8EYF-F&wOpDSs{zby!DA^kA$kUfeV za!vEWDqGL3j9Bfgp!X$43}0f{>zHClmdf*=bu2T|2{P;lf?{U?kQWAGQ+%O(q6Zvv zXb6UsDn{NHmKs9)^!EbOURuPg{TDNlwM?0Mrtz4-tPeV~@`m*OEL=$Lf=ZRF$LTDZ zMR4Ppx)lkuNBEr=2U`p#P_5ST^z=wn@E>bEn@% z-MM1)pYRlOy&e-g?g5^tdWjClK4R}P)h*$!jVyV-Z7d$ey)2~fvOM?qwhY~-v>c3U zZ5iFZnMIja$3pxZON`@pTu)i|%*fi7l5I6DJ$f{@?7Y&m5m$s(WgdnfzKBDsvan^`Wvsi*h6TspVfx-$mP2D*Ejh2; zER;`_T-WMnwJq^2K4J3P2WVLS0)xL*pzFy>OpAPj^0gMMO4);knmVMp8qbwcf3Efk z9#W%_XQnm7V)scHdvz)vYc&l;7O$bL9V%yAxF)_2*QLKv5r>Z%=3ZijEr)`~6WS3@ zX$Gn-awzXVlUdzB5HpX|_Yf3IkE&!_uY1d$eD{+5nCdNS;+IVxX|8P&!xcArb44ri zy_4IA=BGmHw39rkdsEEy*5YK>c&Q(8asEDRIpz@Rz8#XdC&o3z0bL$Q`56ZcIeC%m z!{20!vn5ljP^NpC$V?BfsOZct$W%wNsN1Ge{%kIt2{dVrOxdp|^>qdqfNRZwj^3!|RBov9(@w;u}m zO(#SC#6{rKXSl?~CgwGhRhDF>zK`ba?ipORuV2bT8RkEE& zRaU{KBF=(JALPtUvzK$jUg{?f`^htZui^UinJUeR0W7n8JB$4Jj-`~h1Z|yupqMcT za=Na7On>5)Yy2U}G8J}a#6ZjItHELLM6fRmhN7+mK+LZ@g|&jD-wol|A5DSSxKJtY z2%;N|T%s)V-#8Z1ftVGP-4pxziUEbp<(0tfBlj}%$@Wa2>&0}j!OWI_N2RZL?XBCENpMMl0YW`ClHMXqoJ>ivNHr#qDC zh*>BLhV;N#p#23jYQ9N&M^okr_S8NIv)Ua4-vP(qewWQs$HClc8kBY$BE28WE2=~8 z{W2!*)(iivPFWjA&^nYd<;pVVIkJ)D@YSyyB6;RS2Y6JkmQeQ6S#;S+odEf~rQ9~Q zH7aocbqKm*(HH7=mbXD=wOc%LA~A1>cWb?G$3*_Q$k3FnT*?AA9ALyIW4^(cnaaxn zlIJyn_-5_EGpr$m)EW%VcavezzZsI_d6wN(i0WX0+>RU~rshCN>}fc(BvrbfOm{yI zq3?G{4j1{GtuT4M0mx+wnT@xDn?ov{f72o8bSli6NnXIh9gy#}Sh`;n%$P?rB42P? z-2*h9?ICQNJ&?PKNKSy~%;>m*g&k|bG{zF?jA@=R zgr%OhGM7&cBxjCw#v%yuTLMd$t(KS>qi(N*ssmfVL_dGci)?tSz6i22r=a?r9iST? z4MJ=`5FRxInn6L%{$>*6wo9Qumby;dTFF*7u=8k!1_F zx>9%Cbb*Vk>9Fj7xv`#wyG&opY1YN%)n{>$sT%#TndG`opR)-JOZP)=g#l*y$3Y{N z9;zM;1>Kv$KzuzQX9f7CQQn{=hwcLpSjegmltCzCmE9UZQDS@WOPwU0&4`Bxa~G}$ z`kaEj^IsqzHCQ^QRqpx33P$uI7tS4lc&{`or9FW26pY^Lj>JLddM7_YX}5?4w67qy zp*@J~L0vE~osN1bO^0S%J~;X^Pp$j_bV!i^V@2JO7m}qU_D2@y$M$CoA-v3JDrDA%i=|MkyBoc%Not%rgp=) zDY-t^#QniUHbB7c-r#VQIstSq(glZu-=Y90?yQ9|1x`?IY6p?~+`$&t42miljM*|@ z%GD(_+yI5EW1wod9t!NjrL0E9ZDR9x>jdS4YlF%~21OHVL&3IYptbh^a&ALq^~Q9Ca)U##=5Ai_+3Rl3vcSC^04B$JnXnTw{5LS{d{6Jii~?!C5XGCqOBF2yvitd zXo4aKH6lTUq5f_Xf1FN8Jo0v9B)ec&8}Qc_BR=_f0Pp;d&R;+F zkxRsgvbpg{%o{BHegGp2vv8FCO=5uG#){qfTFDs4Y3yBvUFS#&-=u>gza=rQHwR5S)pLSxx@;uK6ndG{#k-;-iT(tTza zI)zgH;?G(b@S>DQ{`r6x4Qqg7^s}Y@BdolRZ_ho&$&X91caLY-XzLw>ivlsU4r97= z92TbPFy;0fJQfp#0iWm`F=ILUb)SI&PE+X|ITg*9`$}vjxB2Zb_SYwgf1uDF;jUe`5X-3Zruh^lYWor~&0Okc>cv#$5PTn@j zr&CFH4r|$UVx8^c=9Ssfc_cb5NODJ3R6BqpCR3icbQh8b1dY)nsmIkGX-0to?;0a{ zbLo6^j*AQuYhVj$f0H}00R*gP5ak^Tt79l5MDzd9#>2sHOC55Q9%1$~cCfIg$64-B zd#D&c0$ffSpw{v$An?0zrCAQ~98VAnau4XIt%r;j)4(TwHq2VT8j6<@J9zRg@Hv_c zwxdQk+j|@6^JAdspV{CZ<_F?A#W;}O6UJMN@{zQEJI^Y&ZD1l-M^AaHf=oJ}5KB_I z^e9&b^^iE~ic1Fsu~Qz|VFN2|;R^KZfSY4C!StFYi2JgEo?DB7cykh`Ak=9Bj4=d* zb^1(D`c449vVIT{0#G?^ury!E+#CWG$>YJZcq9ZK{|h1_g27YyCoy(jP&RTX3%f33 zA(O7NuxUPEH)JDpJz<8R@Y}GbOA+|LxCy_mo}*qsBBb8v3*~cYHtAWSGObxhOc_CC zINqGe?T4_)x>hD~NJ4Hmm!5x-zrHisiaCt((~O+BO!oDfO0T+1d-=sGnbVCd{n@T6 znb%n6`TY?q-rSx%>2;8LWCq%J|~eCb-l!l2dGCkY6PP>HPgMh%E&aw?7YJe=K+J;Z&QcD%X^-@{ng&x#6~z8_$}! zVf=h9?tU~g7N`oIxiS5OU*6@Hkc(`a38}>VdVdF!(&qUOriy3t9TaCd7zqoULo4VFA`#lD{{kZ#zgD z=mT9^1WB{2u#nl{`KUjX)@uu5Z`YXih}m5re^6N$=`3F1Gzs**r+_tkG^AV{PI+!d zGsWiMQh7^a7m2QNZCG9D?k;i~!(2xb>;36@+XrW^|FwZyPPs` z<@K#x<~V?B3!S)_Q8cwL6110y6-)iHBClA=+tw1~S%0wD=IJaY-U&+nRf2n^FOYK` z%16!vyTk=h`fo6VwbnuM!oMK+YkQ#QoV1(OHp^m)e>O2+VLu~xBe@2And1C>>1-Dg z5XZ#qWcgllagfU?d1V8La3!Z#Ob;MW0{QYn8TDL=UtEu}a4y`G@>$Fy2x4YfqiHWl ze8X-gP97OvlGzfAT&N4v*9Xm+Gw@jd6%xC#{iW5I{9_3g6|F>%>C-XbNe7J0yuf9B zPGpPSw~#o>kk9H2UHm41cpf+DCQ00JL$VW4Z`M~;o>HclhPGZu?8mO+#03(e)il70t>@xMS7R?v^T zuPl>TfrclIXg1gh<1Z?ZI)mJ^G?#1mNuGOrEvI}px1Om<9F`r~)@4%#@?cB71#<52 zN_A~4&A-k?hpF<`HBLP`ZaZ>bMNSgt`>B*wb)me{g|Se%BtkmNJG80>lpkiAF@Dm| zMr1np_B+O?TLqeB-ND$;hwgc!C6{GX-%*kWJHB=!i3Mx^>nEdkBa^TDBzdK5H(xSO z%^{Y#$HWST&^dhdL_zd!1{Bvv&xnD_;?lgsM9mGYu4$H<=&Ukiy# zhKla}&{I1a9geR=wTMm1Ypk8c%i$j0 zuRMTn?YE&%=n@n?cAkj_oG>;Mca}ZC-aBXyx%~;&x=a2<;^y0YZ()etRqS!&nl$@y z>sKi4Csmafa0I)8tJht_JvpcGVv974Ej@;+Z#Qvz!dHygVsG&cYG}!8=WOx2Puzvv zh8DlN^(~z()h*E;-!SOSGklnHN7{p0^B!P+hYuLN{wGGw`9K`8zp-VTY^?ikD`uTv zi(eG6l!cAO_$C|BdNu+7Pty6v#gu+=e2|1B6d{a+B(|j`b)RDpLP$aggO(6lLI@)v zgpnj9BO!!Ai0*UlAcSNjgb-r$d;E?K-*fNxzkTfwOHKDa&pDsZ`#r=r5f^<}iP{|M zb6;qK@w1(k{XBi9kn#=aytX4&{u+Rp(37TLGwT76#RN^1*)FMqL2}W zNeA1bQT>sZiA9|5raU{wLD}It7*|k7e>;88$VVNw6YGQ}p!c3NNE{~eZ_YyUtD^8@ zEY4aPi^OnII^lNLKj8TIU+A;{1J3fhh);>3s`Flm)OA4O8Dl(zD1R+(>yHWR-7uzr zm{t1^b5BPHZb&{NR6HObN9n)H{3d@n^^a0cu(Ha3nEcOV#whh!MAO&5#mJv4nf=7B zAbws3^!tOH>a@#ZX;An#WtiJCi1+-?)N2nh`56@+iY#aGdlq4#oy6r)l>I+) zk4koh%V(MVUHe$H(=JA?G$lW1KkO_MCsk8sHga}Se&)y?Hd8+3-6y(1xVav9pEfg7 z%bP4Nxf+zKx+}a(-LCnN9T!7Pqp|d7X$ekgCCcteX1QsuOlInS|1oD*Uno99-H(%$ z%@j5PbrB(3S_#hOBY`{&AiF|zu?v`-4^x#bI;*?5J6H3-PN1(Z3yC?cWb9S@9utS} z5vyqMfmy7tGSlj8rU|94@Xh1QyXAJK8*MM=qH;~GYYT=gt(kw<>(tfohee-O!pKEC zp}Nf}djFZA`1NT}jWa-I{Wu_h4XC#@0XfGeJ69u%#->`5)1FKmqj+Z&hjt5U^46Zb6eWm-E)Hg=S~puz8!UB+kkodU?_Mt z2MWBY+wsi{Dkim8_#pOMy`iz=a?r$NKzO@d;4~u<%3Ldx-!k=xsnl!ez{tVCbn|G|)q!Rd z|Mg{oX?-|l-LQK5<#>E)5;mKbh)FwUEB#qRt+`xx_>^zu%Z-fo$SnG~EzJs=0x^Wa z->w;$|Ev!7u3u^XLs@^i1IYd&nGu?;^9S<+XkpL@XKzCI8Z% z@O>TnGt~!uhajk2xf1&INrW!L6CtMUI&i2P39h9hmHxP#8pWRxt-Kx8<}MY)%fix4!EB27x-cEb@B~=5#)p**K>E|D4mbI@6B0 zCWeQvQ22J5Kqody{;2cu` zR)Zfv%J92@1rkj9whvMVuTgkdp43}QnM?bsd=EzZJwc^C%n~}%pW*x>C=T2K?}+)- zrO!5?`!wjnJ*nSD+|$$9EO6m6Mm__Dsj4{_D$0FGbJ=fBoodt{8H<%&d!yH6>Ouv@ za}DkJsfoV5su~#Bj=K9JvlhF7EOVc3$|SlRn2kNga%H1qy*I{M9NzZ1*$DOc#15`}hu5jq}S?iTqTh0eph+cYuY0`+ZOuwFa z$`PhHLJSo-Z}@p6sDG}8OQAbp!>-*xbAHHKxEg5J5BWDcLjKWK;Qyc&gmfY2g;fFb zKe&;}4r%)b&Yaw}+;pvgdsWp#%474g56L`o_%X`aZ&BFNl&f^A1xeQK@ zd9IuEjTpHzb3K>efe~DLTzNh}eXDl209xKi~#(g(vXXtkW!^Tq=4=3E_?v%iMdv9i(b9A}aby3$QcGvqMZ&SUL>QPx>g;o459ZYKvH-Ip#BzE zmYbOVL^zYVg1Yu`f@zgn&=7Z0ol`Cl$Dc*+*`V~YGl!=#*%cDmlkT^~Nzo2JCXj=P znNCg-%u_mZI{R>$(;r+`593cZQ(WAkr>dds`7=xrxV)#*b(dS>q;Kf z!ETIxn?7>pR#V~6%RcVmrb<0GZR;<3$7Zndh5dnCsPJOae%jaUhmVDNpk1!wnk}ib zlacR}$yq?nHhbA?Etn?H7gVGD1yk*ovOibU@=TFjqN3_$b;XCFo0BYnzO-J{$w$=(T_ZocC2)+>40KZSzn!9`}-Q^4}mud_`4nOV~6 zf`=o`2-;MG@YHmr^PyW7sBnEEw_8}=AV)}|%!|6z1@d=mC=)giVrKpW8U2#!yl@2U zew~DX6$io1W&_Yn8ub0$LF`o>Y<5t0ly-^<1MDGUO*f@aSXD(X;-9V%(y$SbLyT$u zqij`xbFRkHi&yAQaQ*Jv+*m7)lXqJ*#jF=(XF2tb1*f8oWQg7c0)i52>usdpTso;PvQca4Wvvp3V% zAsymNPC)3^Q!uAz8kmAd!kY_q=)W&wc3^@lky&-=Qnt^X%7X{J45F0 zI#4{J7C7{%2Q~o}Ox}-_Uw4IwYScw7ZVLriSK+IA@7crDeXW@>%!Q@w-Oi#-dSXyF3l9 zrk#Mbn=&awx>o5xTeWk8!285Tv%08wH0AE3oQwQi=ngjBS}XhLP>mA=)UF57Zcb2g zp#hXe)C2h*W9r0NnImWZd#giLPvSrHk0VC;PH>w=UHyX_VePDq5dD27zFeN7bx$a zT=+5hGW_`a2`t%Ot!K9u^?E-0RljFOwYoiz&Z^c^+v}dPJC=90b1toierMz1mo5?f zlat|;c^&9))4Zqwor9l@fXqYGm$>nfWfmr~$Oc`R`NiLKKkm$E|0mL1KG$jn zp*Lnz2WTq<#q5MGt@lIkgwxR2_Z$ovavVC3&Vt6}>5$cLslvjL@33OXNTq|O?=cA8 zw3rU@IrAWMs}3kT1`R!SL%YZn2wSoS4z64cQIjA@NJ~s2jao&xMAaYOmj!1oB>wt%fTt3h+=d;@$QQ7>$E3$yyO#R z_4$D5`lpzF>lQlHxq>6xnaJ~Z0n=h{kk7FgZ5!Odu#30RW9db_bn6g?zTS*Es!dAI zV#>}fbf!9j?mm}s(YQxgnD7qQzI=;5^`7FaHD(;2a|88b@1lElITnrhid*-pq&+)S zQsCU*n7rmIj_>joBdq?zO`^4w(xQPB`MRC-G^?jH>Fy9oH)@!)wst>hmP-$bp5Icu zj?P_IRFeE_WfqpC)SDfL<-;gDcQuXJQHL?McLpvUp-1<|tI-&=04voa(Hz|ih4#dBwXKCt-P@xB zP>&#GB+8v>$~$9B^?f+YGX>i%i^GJ$(HOOVJ_h71M{rz^)r*o9-q5?-H!<1kBW7D! zN!e-E(!VFIq?mw@m{MAX{YKp*7xi`g8eU9iuh(dL_Zwerswq7`Z6%q)UgGCQr;zeG z7-5RRs;bFo+b9w}mIPt^cXX`m-TRF{fxl{NqUOB9go9jQ~hQXX0rblvnb#HE%5U6-4h_A!FAwgkt z#bA5Xkdvxi$MuTC<=xXYbncBo)p9Ko;|=8utnTuzTwkm%SLAW51GEGaG)~w;=G3V4v5GilX0^4t6nV&AQ%KLkWGcbhCC<%gqoFVpdB$dy(S*o2x|~- zQI6!&8)d%~d9WJO{@y1>ZXLk&j~0=qbUC+NAI1$nEx76NT2be}LQs2pv9iN&|KDS8 z)P_gKKjdalV&bmqhn8IdC~R~`^TI+-^K?%0L|?gIOuGPP&+1WD)rYCiQg)Xdbs1v= zA?A4$NJyUqRS&`->dFwvY|xTeFXx!&-2qJ1 zXRM$qI4u$nkb9qx=jzOlqIyl5?Db>BYE_)Ost8rCp%L|BGUs4PXc7jzSdTPULfIdd z(itU z!~uZR3C>V8u@RJ?=?GP)0kp||Afa+Jls%!Z|4Cw@H*$ygq~<^w4+uye2v+OY!Te^s zAhRF~x{N#nNvbn2q+&n$bT$Cx$HDGiEbJSR3Sq}GA*#+k*swkmy1h99FenS`er7@) z75%fJG#_d22;`fk^I{D;r`KghXJo-gY#>EVe#n2xiFbV^*xvjH5;_GbZjP{}jX^%6 z=qy=G=4TQEmN^;LGQUI4wj5rxhy{<6|A2pAEhK#D0-yWT08v%2Mtc8%NTb29C_*2UvKYcLBjH;Zrd5ru3jGp1lSh-YtfG!Ktpxucz5IYv9>xT-9tcuWTtQd0LP4gRrWlfW%GbD%GQ0 zVgj(#I}O33)?ZLOhtBjj8bD-Ani*ZY#i&cb$Xg4a3+y4=u?bMm4CGm8se2!Y+ZGDc zErFn-B=Fw52VU42fn0nLc8>D*JISSb#~Zxfbq4ha+I3KlkG#$hSujuOS!X^Wru&Fl zVEJb;Y~RhI+Qbvcp}-ISO~6v;Zh0UrNef~q<9@oV&T?DpV17FzPq?(G%KIdUCSe-xpvuoxrj zUq^TMLS>%y$omeKb}*ymco7ySUsoI`vfpIBa8dbxU2T7txKj_%>h@hcTULbRi^OiL zpJTSoV|;Oq{=b@XJQDm3^G8>cI&ZHbW$mRsoPm=4{XSA!GjHkDU3cmHMJLH4q^9Kk_b1FN zd4qwMzf!-`MtT|9NZBEp>ei7qxPM3DcH;Kam$CHRA?!A16K29qgHiV;*K> zAuqsGxQW!&LYuZHm7S!_jdbfYj~LH>7+&Us#q)-s5F0{{}>bZ3> zzxHo#zL&wtv&cOcdvo>8SE8z7g>Pg-4b$A(z#@-@GUE0Nx{0+#-M!1?`=R^_?d)YH zo-U%hpfar$Op|Ox^|>{o>b+U?-08<L<8FDse3oe`^o8DG;3rq*5M?oIx1X4|VCRGNOXl#(n) z_Z}v@)vG$%VRke6-oauN{l=lL;2kHX-dWSnn=Ei<6EKf?$wH=WW$GVK1;g*}B5}-k z{L3>+eu22D+%&zKSlMO^Grxb$@{`^%&rk0ewCN-{jC!`B*Qw!Y>? zXXV!-cY<=xGrlPz=2|UCdejie`3u>X7J*;x7NDL4_-7t~A9e?z`tc0VqXFJHZG?z+ zGohj$1BZ=PU{mt|Gdy-;s`9Tsa%M^Un=J52k>52p51fzwkP@VMbf`8R8N zFYi?H`}$49KgvL!?{J!HW=C+{z5b%+?f}7fq^aU|3H@oScvuCx%1dz6H=uw+YU(R3KL?G@C)^6PIko z5q$|B!t}Av;oZ>pu>IO+$oTpO;9DW|ZfgK?XoKnTLh#Iu1=)M3ca-4BFf*ioEdu@l2K)){gfVhX?a+*4Yhp^?e zKQvJ%`RrIw-;amr@@cW22fa0G%K4M5o{_!h7jXx3WQdh2LWd$ zLq%%iO-5O3rv_a3?A)ML~KQy78r^TX8po8lJL zH-5oB?{I>OeLa=ks>6QDpthX_IZG!&-sJ#D&FBRNr@qSF!T2)-lFluLnC@wi*_Q*3 zxB^|c848Zxf;y=emCs|*-0d)CIDH0=&^;rE=04y1K;Wgn=;y^5%4$7Qm{7V_i-n|WK2Q#-`Lw(-1OnZsWp>M3gp@Rd+dk=H26Zj9W z3o#)zAWl;UtZvq(pGSID7K$uCW<4vr^S8pdk33My+_H^KH`^@8-0HGpT{!VUICW_- z>bWg3fLme&`Ob)u$B7flZ62iZXy;qpX6aj=w6zw}92Cjv$~DVq|M#dGk`od$&o)JE zCl3tnMtLdfDI`_XqP~3u3U}wD?3J;6bjFdIpEJhpCO{|D2CTGTde9@;A ziw=@oddPhY@qd9OfiF>Y`4Lw2ev09P-eAVepXg++F1@Z*TRN2APD>j8rnl`O&8XH%8ab+^RA_H6rO*C}Pyc#`5o;e} z>A2fy9&ujr=|n%@hwno7@4^ZtD@u9(Vw!6z#{P1xInpxN8_)hgjlUzanuZvGciC__6&J zObIfgadsvqdSwv9V;|a#I*WxLZc@+l5p`G|V`$0+)EwD}!H55l=T=;ma7&bVwlsTF zGKkT-hg^0*<{YKDR9+Gf96y1Z2A>jjlj3vftdwgADHl{x)O{s(o3`c`WnZMsr^dJE zmGigpd}9{(d^$~W&1$zC6?J=e3+Da;)|4@HS*6lx$L-({<*xj(QP#6s_NhL z)x>59>Y+^;vF8*9lHpztrm^v*9{)7vc54gEX_&!`Ted6DHre}C_GKV(M_c*mOy|Tv zu{rl_*^HaqRtS`Br|eTLC~M;k)PDf-s)3nPcZBlOnq}h!)1LdHvD-kd8l~piNg1M6 zy-$#{H}PNBvCM{tnChPsEJWPF^zE%E<2BV+$=8PV6;u@;eRaL|`s$n-h%)Cb%;187 zNnv<=y$+-D=V8`=fcal;D!dExTpgpc8`B-lWlrmIl%5)Kv;}gY2{MGo@6S}T zx3R!8&zOJx_8{6*Jzt)O({r(eIx{w=889YiIas-ef_ZB@APyPm(~c;eMsq)b1rFHD z!qRLY@UAad+#|uN-3CbSeh^%K=7OhdHW1I8I)GVF)G`@-oOIy5;!o=NZ(%YUhd2sc zufM?q&xLZ;@A0{E58Zevk;ONc82uT@KXHi}hg?u{_OgGSJQa-Qm&|ivOBVQz`s&6y zj5vGD|Br3tbKA^h7hc9=Cnzl*1jOZoW{xM7c@uH(fq3{}w&X$amVJpbSpH0Tvxv0}TJtd(M3=j9i-xDV`Ys=hLAJ z?RLWMhJ(YUflB|O`27qhy}VFyKCaRxgZ@JboOj*{Pp9mMI~BCkynPf}at<$gorj?3 z+2Cy1p)kC0Z z&egzkcO`wF>QYa?v%+UK+EEZ_iZYRx$s{Rv@mSJb}*wNDtXaGr285&N^@n z(m?**?=0m`BHh{Mv$AuCm}^~PnXhUA&Sfs(t!W1pQ9fW`eh~53XsDdF7}j=(19P_p z;5xYm5d$a#zrvsF+%sVx$#Q{fR*2s^kY zmwEyAfn4?Ig2GufJ?P8H!^vgmYRs__Nd9D8^dte3%PCoyL?y^`*J(00w_*`QY$UI@WAE~W#nerByOy=rSrwAOJ zd&7^RI%tN;lodThUX?@eG&l*|9xNeWs6XZ7h|%4Kco0*rDvT84l^*nUT<>e{ZNrUo zrg3xd4(?`io>QiaSAO`$vs0~=+;xR>2h46d2+7@o;*`J8Z)6wDck}#zesyj*mg;6< zfoZhDXE$!l=CW5vW+1C4Ut;;6D9iZtAd`I_As?tmN4a&GN$4p|Wa^{indX`ulO0_- z>J_X)bAx$wYXo_hdV(fzBv>wnKtbbS%J(znYE$BfKV$l8S&VuYOt(rDR88}JRbgLq zb(ajerca)NsoPaSdFD_@xw6Z0W}!Q&yrU#OjGzreK@;A9Y0N_f_2s*wC2lGwo;_Dr zf2R0|DZ|I3XL4@bu%8<`5EJtK3QqY|UeV$dkAHQEYadX@&6@bLX=)^f5znk4DKjg1 z2P5<2Osel(vy<{?Tb=N8zs?x7yc?Z0*z8LwmOs3Szcv@(kiY`86>p+*S_zKqUWW5u-p9yQ7jR_T6G}EcgC}5ouVt9i zAsQb&UV%R#3Db%xTTYqt(AAuLTF0>eIlh7CL4R$R+3>QjE| z;w@ZT`w~{vRY`7A_rO+C@9+jv|CKeQh$AmCxlbM@ zUp;|dtB+w=@qQGncazJSSZO}1aaH1S%p1A{!+qx>@vs%19QC$%q{|r|ooM0ZryC%- zVKF{#Bs$nGA>Kzk`rO`trTvy8?P1W=xiPBRQ}%l1Q7*Gxgfz>zKq2sbz2uff|D_S@5KXE4!x9ldhRl&O+X+2`X!c0e0#ZTl=FBK(;@veWh32A(ept% z%Oh~B(} z@*is;{bL#w1)T)1DFu-Iq6kja%z-z@HYt4}zjpnByqaJbOr6cp86a$lhGLhcN~bRI zdIE&D+6Jzj_QSh$310j%gQ>I#stdUgP_Z5YcXtEr=2S+ma9?sP6KBOJ66=CRU)s+i zwKYI{*9-j81_F6Lh#f`!bgTDFX2{FgB>NH8%=1fY76}trrE@ydPv5BI$?^lzndRF< zX7lMMi~O$@1iu)oaN%YD7tQaWcllE|a_uctt$qs{>)VjrItPT}9S}S!4g$JFf#16E z#0B<&oTs!GD2#*+X-RO(lm&5_`H)dm29|LZU>$KEyzAw|^y-IU`yM(YR`pW)`XLRh z!6Max$YD*CY&iY=K(r0{mkK-}WNl-x_p4yuy(!;EoiWep#~HC88FjnJMNPf=hna#d z`D(7pD_qo^JSrL*zYt{xh-R#$^eUpy=^$z|aq;_K0d=)IV4QOULRT3TUV_6Play>p z*i3uKNNZ2OSIVw$*1?AETOsoGJ}{ox2j?sGkhpC%1Y2zf>h{3#I}&8)U4mKfO^|bV zA4H@@LP)nBN+(rj`Z#FEK+36AkX0{@^18c$c(V{(b3Yh2ZHHLRT8R7*1)fJoK|E>HRyK_S23avq!Zat-zE_J8VaqN&H9q?<8wx+PRoI!F3h>k=1`o zAhc?m@-?<;mZz}Y&( zSD8egtpvCqu^#;5SAg??Sx}NR6>O}hgLgdf7y3p+W%N`iFt>#0Sy!3SX%16W5A~J( zB;*$2)Pv#P>B*e#x!mNQOz)g)JX*M@xP#^AmSwscqtCa;oc_*O;OdDH+XakTT3_Lq z68jr%-aDfF?~r>0%_Y=xbo^ITwXqTGtBqrn?O<=3RtN15dS(O>zj1~yM4s*Z|DAM3 zOK|SiOkw27T@YeHLIN8Es@CvZdUG|{l^yr8Y|K%fk=;)@MzOw7064+Uc2`q0-|lo|XM>w!Faz*erz6F2%EP7IJ*L?mntC@6j{2x^!oPgOt&)jkF0n zNiIQMrQ^Pyl1;z%(q_LF(lPfI(wN?Dr8!&vki6!5OE2g6NcWF-kutZnmx60Fla6+@ zmj+(8lfM3GCsp33-eOmkG^_6$oPY8*I@~^mvP*aVZt6#FSVatz1qz?R96e7tFRETn z$JAC4=sz(Iov){2$U6hl9Tfw|reVqRox~sAjsq{#`O0PnRz`J2-Hxx^UPl?bhuf9z zw3C%1CU`8w3hjQhE4_fWUGvdUE+IV6#Y;1DG4{_Kv>c;;U&E^y^!xelr zG#8gv+lJ?TW3k{C{r6p$C{8x*@;&ISG2v(PBVtfL$Dr|#u`v1^iudCbhMMdz)t#si z3}t(%Kfak*W+S=f#tg2Ruujx=IW7ch$^A!nM9t@VpgVAzx$V|7!x8G2wY$okf7hb^ zO)rRx9tUsk4TI0FE@1RHO+AukG$+_2Xj;_!|D5N*ZNa2FC#V|S@KwFC_{jZenF*qr zYLzRq$~BAKm7PB^hkc1dd{#%9b@drc0m3Ok?es=6t-eFEsg&6jk3R=c>x* z`BER2k>ij>caLLk6B1cwH=4Dy{Ey`n(vAmd7Va?)?7e1#=oJQ5=ZF3OnNyj?^c5aV zW4&9@joIjHSdvMZvhBI5phCg8ZZ@MkD2o@Ur$qdviaEuMa`DXEHB~uN=vtHsrg52q zA$7fI>OP9=x?6EmpEjcE*jACcb)w13lWPalIcse^y*n0jQ?sR_($k(w?#2H5X)f}H z3Hln!yThm{XX+_$S=L-T$m&TM*%*JQ3ZrM`gEE{0QuP< zs$v^FYDBx7rBgt^%NHX4wg(%pTA*Il5%jx9z@%F`82Mo{JbiQ!HiTYnMmLoG7yE1y$FqvIMpK%DD zwiTMK&w;$5SHNAk4EBE=_)y@oiv)ge6b z8@(S(SmfEKj9Bc<*g?lEAo96Wp>!DhJPVEsCrIQw+&Y1ni*#J3m?s@NV-aykG?mj;8a*c~(mPY8bI1!a^S zmpKE}^?;Heqrj`%VyJG|1ft&om{jL7@sb|G*Xi$w>sk)wkMd-<6l8o`2sx=fkn)iH zSO3m{vo1U7Ya&6jXICI${8hMm>mpcxItu!QTOiLj7RVW`WZeCF(0g^jJaD}}9ZU}= zK;9Y3cu$y5{?vI&AHd0d1Z0n+Gjgx45b(!fFuR5k|27tk?kgap!!mF__YZjG27+56 z^<+odfYm2Qurk&GI&1&G$3b@rhuICme*xvWR0|dUs{HvU1_rZ#M6(6*_YwpAtb8UV zE)4h7wEI89XWu7sQM(JOKmKAm$%~mgIy2*}znE#xG=X>`V%ZEGonbGCdsa2@|I5>fE*Nx7uoo; zL}8Z89$oE!V~AHe4}^L#(C@j>#a?-@_KO@Cs51DGA;MnQBFy2%V^{xk^;2#{0^-WzDhaqCTKI zr`|FT{1MD6-(KJ)K`*&OlWOSpsTLYO7ZLkuIr*mVi7L}lZ_OXu1lcPovq*@;Nsf|V zjIs(4QRV|#_I(w1u)c8@>IU{w&co%00>DY%7pmU&0m`d@=0qSwW(@`LJ%DT7zsN`I z3e+Emd|fYvYno%63PRi*5NFJXq@&@AW3D`txKW+%F$+C^H0=$d;rdE$uHszZs4ne} z>`*)ZCJ#w4a&p>pnitZZVL$CKOL^Y$hM4uTBW4A5KsReQl=HVTOF$h}pg7jZd&fQB z&^}|aJEuFeXjq*qm_Gi=ocs^7l;+eq4x!m$R9|pz>kr{IeW2>6K>5QzAbv;-pp2<< z4+=JPfUH)30(HN@zV%RubeRdCi=!dos1APBidB3Qu6CiyIW6Uii5b@17PO%kg)(DX z7XKoV(mnUBO9aJgP)2=&gdPc@N236DX7*5iJFC5xu?T>PCIMV zb&tS-%~xT*IS%dSti+}9@fh-(=9KqVqKy;no4&5X$QFr;`}TA2dOY=EEoNR#M4{<^ z47{C7?9I#g!}A8VykSNg|3ZB9G!MsI%O%&kh+(%2X*NZDv$Seb-D{1dJDb}{TXWRX zn5(s<%BfFKb(cI$9f?`KF%5&xWn#hMGw9SIAH}|A^xt+DZ5tBL{lRN=&3ugoH|agU zun=tzA{P3kLXtL_FCDW z<+#+4RyTK&3Kq7P($m^Y+ml*LL%ubV)=v6`x`wy#syPRfrk=u&H8?h$a|^Qr9%AE* zcX7_oTevS=MCyW~$~Os9Qeu$qtY{fST$Ld$h>Ot>sTZa2;^}UT<@5SurML{wkKcjX zA&2nY*Hf7I_zdRVK7JcRr->>~-(YV8O>c3|f|_%=&&^+=+`0ug1g!It+D*LV9j0y~EOO@wEHf zLVOM*Mh?G*5txsjsi(2agAH^>?20L!u5sf&HCF{Y=BjLmpEWIdDnCQGQ~V}QY$C1= z|0q&+ojD~QV&0qd%+$h9b}Y)z_sspfn7H1umwWp3CtpNAQP+8< z!V1;yAHdu^bj;g!H8a0*XS%D!f@;=GLG`wqpq;)`BzG$}?{7tYL{XIekE*ftb9Kue z<;uJ~&ox_le)SA)%E?mhyTo_mD!(>9o^8f5ng8JJtWwStadYY`y8+esMxZ@j4Qv|O zDCfWYjh&R|YQnuJ2s@ty>E5(kD%FGYnmEw=gn-}n#vpsz4H4T>0E>cpU?*AE)2o#n?m{9 z#t?Ft&Hx1?fqGWt?V*{YpM#RU^_bZf0)~wS=LPE^VZ#m>|8le9C34soLV2S0^q#3k zdzCB9I5U&{#d8!7uKfI!Gd?mGzTyp6_Qw@li5FCLkIAfO%A|tvWk>kD&=x8))0no~ z3)zEvR`qpCu4(Ch!AZY~`rwTrrA-9PKb{1^1NK6x+W|PWcsD!>Uk`D?Gr%i605YZv z5YWO0;^uV&=Z0<|?=^{)OYi7cEVJ=r7GJj^XfOLJvn2DniC|wh9?BLThKyZ>pmKf& zFBUw3JDo3pP4!eLiJPT(77e?pKkqOc++IzC4bx&_lJ7bw@4bW09ed$a;|%aya}Z2X zl!c#o5Gsc5hSE>T5Po=rlB-Isy$+VD5@3wyO68m_?~m>TEQg5JiSTahcDS>AGw4>u zE4**3Aw$4^crfUuF_4+7GB1I+^GXjuo?FWIl8iBZ$aiH+e9tsyzo-XO2WeQ@w=m}a zU^VmnYZX%+>`43a3Lompal@``ZtBE|*}a8p+B^`;QnCb1s*$-m*Mba(2B5WlLUSnk ztkR5>d~&|JW|wodZo7oQ9$AdKrjQvu6twfAA#mvmh-tVIlIF)lWKukk(+n;Rj0dZy zv=fY_x$VVhW&f4htRom=nnOT7oq^taDY>ZlFzPZqTul58@_*6}(9>x)lnxFBZN5Lm z>~vGU-(F{`L;k-XnP-P{3R7Nou6X=q4des^KWP96b0&aCQ-9@5DlKCt6*KUsDUrwret z@V(xQCC2J`;%5-IHq56BcsqM3T}bbs9?H*y+$#_w8Ypv6bqavaQ48YE#XwANx{pzo z`@}-xU(5rmaXt{)?=kZnmB@5m4l(_cnjkagY3~OOFRp>4`s*NS_8LfCJs+}qG04AA zzzp+_3Xwh?x&N9s0T-|?9a!qTCMcLb^`A{gT##Q;s-`|RAmDKZO;5T|S zq|O}xd7T&px@#b6=%1k5{ukJ~_J-1P9U*v3M`i9D?C+#-WHlj9Q1zb+=sxrSkBigE z{V@}4x=(_vpg!O**c!}*5lqf)7~N_x@=-H;X}rP|$@zFpahQ-Rl-V!e%POy(X3 z7dSDXxwf`7np?F&E2jZSu04zzzXC^&h(ouyg>(j@z18`3m|C1jJ3{i#zc66IU#Vz2 ze-}n|+>0LV_ahXaMElOUNIM_&Nj#0?Cm|Y&FQG9u9|!(<9cL}Li&Jc#VDE^>SSR5H zCbs)d`RAHavwn>v@1d=vl+$V{&!@gL<;6RNH8uUiJ}in`g()MK;_-7UaXh4;ZJ+(v zF5@&N1l+`;;Fst!ln1_6jlvckHoyk)Z=O_);eIuISq#W6OHz#c48OR zc?@a$FCOgo3#U!3A>A5UO}fA5Ew+1g17kj&!B=&R=<_`r+g-YVZWqmX%BLK!=6%BX zp*5t$1vZkgX&ov4L_Mj?@S2iUv!7U1ySmi5x}Bu@<|6eD=^`Z@_maN8?;tHZ=penw z{f=GMTvHg|^i07wHb(qa!tv6qd@S#J1w$-n@%}PmLwIIj<>bwnI_w|R^&Nzj_Zp*3 z^;cXUQqH}%Rq~Xd9nlmv6p2fTmJ4$*Xv`+GenMaWSv#@HV+ZD^ZKK&@5(c{_AUU+r zVc0ArE)M$rQlo#0C#u!HNZlv&sJ;QGEZKu*`_nipMMU=w=WuE24dRA9!I&mxSoHfU z7W6+#ox%hp_ZJ%TwdlHkJc?82+7&<(Q6Zj}yziF}YC#PojI1BbXR|0M9qu ziEb}LF?d=N41e}S$yQmW_2-sLe{*f|JnFTnx$bH(H}3Dmb$jNEs^?5l^`(3jaeAqT zA*km4OZ${#K9sNUQI$OuWR|C9MH|6%>657bF^QYwR&in+ar4mLTy-=;q zuVyb7%N88wGUqFLpes2--BF%9SJ)c4s#|NW>U=7fxHW=i0L_@{j36(NMKEpc#LSad zv&@e9@*^$*B{=_O{^RB{9HucK0#1#YQkhMD(wvf)xe!+4Ff)i zWf;LL!&dRY&?)<^$jl1 zwB^iCWKuc{xklO8*p5IBZHSy!NsRA1%*OXAQw@K>EZ#R*_Bs^=d$$6ImZ1t${Y|l+ zoQBkk&!();>a7rvyF}@F5$}+xTkfXb@djpd<1RB-)rRsv>724S0y29i!>qH!YaP7@ z!u8{b=~EkM$Is}#!YZ5(&`$IVxjef=X*1%-KcU&h`AaM^unyDw*_C*lG?$_og~o9` z^B$JPh&{`Q5zOM>lre3+cg&$_bMRQ^4RRKjm>rDv+N@;Yaz;*2X1r4uLfZ@m{BH#e z(d~q8asSUK8LU&_$J_)Uj+EjcAy+5FO{ASo{cTXyd<%ST5DUV+P$;Y64*s?(AeOE& z+q17nxvcqv70=PEptYcx76%@%7*t#5{(l}bzdcxP)Bw3_Chv`D|G~&9!PMccnE81K z3%q=uSzi8PF|JNDH|wmhrSvz6vqaDS%!R}=yP<;2>c?4`Qy4R3tzz2S+gaJyyUc33 zt-_Eh$V5Ms5uUaa}mH z3|k4_m*SOdlK_-$YFis@wxu!6pnl9$sb_()J6Xu~jZ9lwk7-9e7c(ENQ|2Kl_b+kE zKyi)jd%3G3Skfg%`4#X|dy(I$6==`CWb)aY=F_x8j1;J&D#$Zu^1>*)l!BaTvL zZz;$Yu|SsD;Qagx(#j$Pa$f=G7!(u=jqxKAXYcnT1Eo(=)kzVwZaXF zP;~;`8k$Y^bOgVt)UP@ECsZyN1LC4dpx*H}INS|{(*Koo{&6+mUmU*(cN7;PX?8~} z#IE0|&-=K3%t9j-l5mmAnB5T?(UnjX7aKLtZIWn~YXVri7~60?%>`|->zI+hu>(S0u?g;f;C zN_;eOxv{j5PP2+e>fPuTGU}@^;`@48H_`ctI#lA0LO*1vVa>T@99f!&$;1@*ljq3`ME*i_Lfu`4xQe#78(MY!X;R17xGLQU0cuJpgl^QZsAweQ?( zgc!(ULuaT}^%!{nFU%|a6IYLZijzJo!|DIt#I{4OW9HmK6t><$mxL$S%cTV)(%YD1 zEpo|Mb344FiDnt5wwv3VZYFjx(cHqcVEacVyK#=DBWwDbx(^#}ikmgg^jWUT)U?pq zR5POmi9v(4qkjC4t*}1}eHZ4VKIk@RX#7Np-#$cyA@hE${ z8S{GuqW#D@s6W0Gty8w5&!T+(VU7UQ9mH{FDTP>2{XPn;-I|S*eT@!n%@;k z{`l-qXrF6$0xR3=F)lp`-MrFJKAQRo@6)jS*)a@xeFkeB4VZ8t7h9%K{=VH0v|l`q z%^kKN^>ri{wPSQ=ba_Es(qV@ZS`b| zes09H8Sq~YwSI>n3p^*t`eh2TZ=1Yy555u%lLxRs1?8{P8>M@(m?aUr|4tsG!Kcv~ z%o8lkdiEE=QU~03a}lRI52rISPxCuuw5D1GWqdzIGdsaN!$nX#-!zI|EalssT%Mi5 z<#UN!GhhN2`E+Ur2kB??#--BtW!kv|yu$Y$CpWTmH%y&157j5;p>q95%p7om92liu zl=Ei9-5_7@Fi6@cNX#EY@f+rmOzyoNwKSWfTw8%o%GAGWpq!hB3hX*>pq}z^=)Wun z48=K+VLc70>4}iMUV!k`_gUJeJ=A@RVYWJhbOwrmpt48exr&G&;JfI+PO8mF5;_!ib;v+XfXDMgm*SrH(f0_fqS+`(#uU{pHxotr%=yo0iw_9IBz>EnJ zcgcR8I}m#WjxLS?noAQmH51-7(z#;@^*;~M*I%1X9lkU${F)4t?(KonNb0?v-wj1g z(NG#44)O&7(6H`HiT&05y&80OLEs&`4K(G6&?$KzanKSW=-&j|*=Qj`GfwKqse3w5 zUat?h+;fq5blM%0p{Wz?pueW#|?mhmpwp#;b*3MXBAWrN5kU&^?N9xBQJ2;^X3)@~nxP%#Vk zY>We;V-l1MIs~q^P_Dm8)cAsv~eJ|Oo=bkdv zC{LaIgwdi}$la!!xks^)%cA^=C-c~79&k!frDQWZZ({G>r#aQ1bAaYTl!fXA-gVRm z?m+XEuyagx{64dO)XG{*6yUVi12WsphsZY@rPsK}+I(nRbOoj_JqxSm90vWK6<~07 z1Nm%JPY48%=%Zfv*L+ zTN%9_5_x9TBTk$StQ!A0mh>Ki9>sFZY(w3awLNLi8CIY+4i_) zs*aInkg<*1!LNNHxOpA`YbZUx-q3upIST3%!XS8z1{7VjP-3?W^v6!Zkn36C)H4N2 z=Wdm{EBU)eL;Vji6-~Pt5?aElD;|-R4wTyYcdd$R5waBSY zOFYRU|2ZK&+jJ>i$ko`{Xbng*>Lz6vEqQA>?HjpUaUl&gUGzWi(586mYkNs*#a&)5QAgi9>wOlKOi|l(cSwDzI%8G%ly}45~nl3snJM0 z8I+y!z|ZwC)x9HN3`<;#zFzSBU2qA4JX4K*~>zr>r=!QK@gW%DNgUdw}jIifGSOiN{$D zUL9CNa@k6pS$q%6BCer)w+T!368k-gT-Gb^U`rVF5%C^+eDavMn!n@lj*VC};W^Em zh!c@rjUk<1V4+uAQ}Ot&CSyon(`tWL)AtL8n7&TwZ(8xQgQ>jB9})}o&9)Qh>T(jx z*^j7kF-we2zxrzktIi^2KJdkbvzY%fL&}YJudv-&BR{Mk3Wi{ld;RkDH!+rcBGCf`4`7xYOW`i zIIToo)=msa-HSy}4`X`Ix@kQ@E%=XVigYG=OvCqOvw=AUlEN;1XPWru; zyH_x?Kg}PBH}=lH5TTI#>{p6#*SC2R4^?eW$1|gkVe$k$#w?3R%9EgM*et9cDWLXG zH6};&N6m!4xyO>z-0bDT&2=DXZZBnVr%$qm#ks6v?-`nL>|&Z>8fNajoO&q(nR?j- za`b&{)K$MV>dX^)+~uQO^iRmYHcLHUO=^}9xG9^JY-?cZudGbbxQwY%$BEus6b5@D zdFs)S;fYg5^+8>H9oNr}rV^Hj-1?y+SQy;p3S1~wmWayPp}+||d-cf=^B-7n|F zq~>Y+Yo)%AC2u!Z&*~%jYiYJm+|EJb{ng7_q2RLb-8pq{xV35uITgu^+inC`$1Aut zsXw>o&gVMSKCVtV#RIz>;99>7?lH&8n@9Jh*NH1u9cz!2`zL2$5SKN^2;%IBya;p6VGk8&uxd=BPU?>dV|!Xck?*|Z3m}-^RdH_ zb0q z);Ja{A(YM9SH}!+n>kffGwL8ywx$iZ1%Cn=7I$JlD8b&Zht#pwIFq}sv5wK+9NaR- z!Mi&vA?^Nl7@fZt%F7SK@F#n~zIFqQmQ4aN-{-c5vggF46&YdPp-)&T_1%uklOZ+c zGEm$Uyw?!}i~Q1+cH1N;o!)SbnQ^xuW_ie=Y^0r_#A6j_Z&UjB0DA62>mV)oM68kg zMgboF5d6Lmh&f#KbvYB+-nJhpYklz;*FB%gb@M-Xk=ue5^-+M{FcBJ*3n60Ncc4w# z3{mOiM;aFZMJj^c7HdH}V58)46M69or@n>2UYo%2xfZOlZBY91n8b>D>USQRo*Aff ze;QWbp?rEKW%lPEB!3jmBC9iLS8|p*7H42k-y|R>0|du^C*=jjJeF^LA}H3JfV`d; z;ODRc7&+Ap$^YJfAw`9tPrMHMzbqm*biUNFOkK1W9N(;vc3e({^Pn{}KziRw8Xpad zG`nDb_hgCDA)W(EI%EK`V<56I0yGE5LSXyXEb{qX7WY*Va~fL90`Gnbt|7Fev|kU_ z(Qy)^%6^U~gvY!mH$V*WJJx&BjE82v&Rllsg3(+NE$Gr_G3$vFOjUE4xRjTexQEu& zKa>0m#LHqf7{jzL`Y_oyF9h|E7Qy^(3KQ824Ik5NsZIyeXYHof<4#!hVLQ+)Ug8}o z)^>;1Q7uf7p229p!)&$~=9Yv^^{E4_3Iu4#_k&d{7fJjppORUUBiiHO6cBXOyInCB zLiUXXV*zoCi+^XQq*?{sUXdAkFU0@#iZA`yrgT!rBRi&_ek9y|wup_we zkBB?m3&;Tn8sGmhS($;^wgoZq>mWMX#oUIh^1Y|ErpBl#+{tadEnFX7&09^cc&h{L zdLI;X>br2mkdL`+)JQMgAG!k3ITv^LEf*a%;TKn6lUp33!(p7BmyRKWbFkb!3vI`e zG5Glo3@?g8nr&n2kx&e24MVs3tytL{kDW>nq3~-a5(flnR*lp%!kM`=Bk6P<`;WMW zT~r0=()Jd{$SN`P#$Pz|WLwkCX>yY(se|ch=xc15T8kpfGD34j+Bf2@WK>2ZW2r5h z{C|j^zQ3SnzXtTl{0FDrYmv@8`+Gh@wV@D+*@{*3cVgKjExIbd#i@tmaZhay=GQ(z z&B5omrs@S|^JZ+=Nk4Wx!+z&#P;YpQd#2w<<0y{irI*p;Z7%MAc@cxFuHn>_hX^<7 zu*;km#Kg3r;&weA&3uecUpz$h-Wn{je}$iZ+|iU$-raPmuA6C@TYFP%K?6<-D#cKb zix}f~3^U&!#^V>$aL9~H7*TN*BMWoU?dfGS?#xBn&*1coy>w39B>4v2FN!_Eudu>- zI!0(!m@$7WQal;y*(PP&6B;zMlbenSgZ(i4{!Aoy1eRregQcsYutQ2LZYkX%?Q*@X zQD}I(1{<W>qRy1yH|ET8+b{F+$FRcW@7hk2wcQ;&H@ zd7GL7%SQ@ME;_EZmT-Dza(PZCj9u%3B6BUXvNIZj)44dea&!KbWh%Ns>lr&xE`B34 z9Hic=H4KA7b|KwS$uk{-mVbL;Ye1sJ#}uExZt2Guxs{nUZ!M!45pk#H(X58%@zduB zlw}h60n$Fg^1}(P#6qJrI8iW*iVWb5h*M!rjeP8 zX-DDM6NoDh3Eu61T6gDZ*C{638`Cud;nveQ6W zM)2vj4l)M0QtqZqI*(;$-DG7msozhW@8r)%P=08# zaLrJl-Ztp&ErHk(eh}&64>Y@_-g_j(ZlHX$`)G*l-5or>wF5%Lw)3GP<}rj?3a%MrKMVO+1Ms`q#njLu05*d+Hq@XS6gpXfjuM7H*>e^0#OeF zpnmEKu#cx+{s1~>Q?B1)Yh|?GB{qnQVBMTxR4a0g=CT=rZ@*2Fb33<}E0hM2OZX}6 zqgp&bXB|a7y)hs}kARQ{;+-#C25Dbj?kz0j1hG8( zdO)Df6Ljb1NIuK5w+3Pul|tKwYS^Wz2bWEcAh_#QP>x6hnty|sGtl$?M4g|;5L+I9*;2hix#^3%2Q<`6c)1?}CpLd7yQuz?GE>&V)R<+YZ;QDRw zzv>|2|-SHGp!CUZDD76j&zrgm>TBgXPI9M&H{^JMM2{ebZO!A_{0Yv|h%2NKH zSMHZmf!yI<>b6xzef4(YdnQS_PI0d<&e+8FSlRm;PxIiHLPOtFrgmwd-F6%B$mu1HkSF*Mmz22t?_M+U^Gfr1@;2Wt5ZQlp#$id3{pl{U z8EDo)|F3k|Kj1i|)$WFztS`asMjn&>eb87Eoy%K8(>Tpv3Jl*~XUSC>$}Jk8)cgpN zdOQNp)13IRsghI1Wx#MKSyIJx%V^G@>1m|<3jIA-v2R1YpgJ$5eHTWoQmMy7vtvfS zYo-ex$I{0AE|^!!1m&Gn(KpRShp4_M-65;(jk@ygf-L(d@@lrBnN_4w^<)zFI2lh_ zl0>e3zmXft*NUzKZuZ=3ls$?rF#Gpp@`7y2hrVFytslq<+a9Wpcb8rl!ox|B6R;3e zgJwc=@`$U<>5Cmqn|GciN0zfzODmJ_Cf@_)*x=i4PJdmfWEl z^bTE&hBRLvG`gc_y4*c^<#Mmy6FE zI6k;@gU&Nm*lA!RzSwWYqYjU-sS|l+GOyyrljqQWM>4J-AB)NBwHT}nlFkS&Pp19% zF-#sn^A%^z&l!a^VLHnDT*fnYPjS;2JJb7polU2D*qP>iOZ%IM>udV`ZCg`z zSRLiYXr@Ma?fx4cVfRlODGT)yhiq*k-yEF<%dVk*YzEdu?m)^}BlWA%-tPcvW3wR0*_7h)p1v=b!Ohv+d@ly^nlv=5w^is(Mj0h31b#yCB3 zO~w*qyLv1(515AZK7*~3y)d7*$F#i#qK|}AU&bigKHsRS>dU>G5_yI88n@i(hOvK+ yr*r2N%vma+{q0_;xLm~b{sXwKbAad_Fv=!gqaAUpk@Bq)zufhoj@UZe8UGKKy;?y4 literal 0 HcmV?d00001 diff --git a/util/update-release-files.sh b/util/update-release-files.sh new file mode 100755 index 0000000..906a0db --- /dev/null +++ b/util/update-release-files.sh @@ -0,0 +1,393 @@ +#!/usr/bin/env bash + +# Update metainfo and changelog using a NEWS.yaml file. Also configures NEWS.yaml file in preparation for the next release. +# After running this script, metainfo and changelog should not need to be modified directly to adjust release notes. + +# Release workflow: +# 1. Update version number in meson.build +# 2. Run this script +# 3. Commit, tag, and push to GitHub + +# Important: this script is meant to be run at each release. If you do not, it might produce incorrect or confusing results. +# Also, reusing old version numbers for new releases might cause problems. + +# some functions reused from https://github.com/wwmm/easyeffects/commit/04bd3e968f7e0ba79b9672882590affe445dc330 + +# no means just refresh changelog and metainfo with current news.yaml file, will assume template is present representing a future release. +# The future release at the top of NEWS.yaml will not be included (since you are only regenerating current releases). + +set -o nounset +set -o noglob +set -o noclobber +#set -o xtrace #Debug + +readonly APP_ID='com.github.wwmm.easyeffects' +readonly SCRIPT_DEPS='date dirname realpath xmllint xsltproc sed appstreamcli appstream-util mktemp' + +BASE_DIR='.' +CMD_DIR='' +REPO_DIR='' +METAINFO_FILE='' + +# Configurable +DATA_DIR='data' + +init() { + local cmd="$1" + + readonly BASE_DIR="$(pwd -P)" + readonly CMD_DIR="$(dirname "${cmd}")" + readonly REPO_DIR="$(realpath "${CMD_DIR}"/..)" + readonly DATA_DIR="${REPO_DIR}/${DATA_DIR}" + readonly METAINFO_FILE="${DATA_DIR}/${APP_ID}.metainfo.xml.in" + readonly CHANGELOG_FILE="${REPO_DIR}/CHANGELOG.md" + readonly NEWS_FILE="${REPO_DIR}/util/NEWS.yaml" + + + if [[ "${BASE_DIR}" != "${REPO_DIR}" ]]; then + log_info 'Changing current working directory to repo.' + cd -P -- "${REPO_DIR:?}" || exit 1 + fi +} + +log_info() { + printf "%b" "\e[1m[ \e[36mINFO\e[39m ]\e[0m $1\n" +} + +log_err() { + printf "%b" "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1" >&2 +} + +exit_err() { + log_err "$1" + exit 1 +} + +check_deps() { + local missing_deps='' + + for dep in ${SCRIPT_DEPS}; do + if ! which "${dep}" > /dev/null 2>&1; then + missing_deps="${missing_deps} ${dep}" + fi + done + + if [[ -n "${missing_deps}" ]]; then + exit_err "Missing commands:${missing_deps}\n" + fi +} + +check_metainfo_releases() { + local new_version="$1" + local old_version='' + local xpath='string(//release[1]/@version)' + + old_version="$(xmllint --xpath "${xpath}" "${METAINFO_FILE}")" + if [[ "$?" -ne 0 ]]; then + exit_err "Failed to find any existing releases in ${METAINFO_FILE}." + fi + + if [ "${old_version}" == "${new_version}" ] && [ "${MAKE_NEW_RELEASE}" == y ]; then + log_info 'Current app release is already in metainfo. No action taken.' + log_info 'Since you said you are making a new release, ensure to set a new version in the root meson.build.' + exit 0 + fi +} + +get_version() { + local file='' + local version='' + + # Read main project meson.build file + file="${REPO_DIR}/$(< meson.build)" + if [[ "$?" -ne 0 ]]; then + exit_err 'Failed to read meson.build file.' + fi + # Extract version string + # Works as long as "meson_version:" is defined below "version:" + file="${file#*version:*\'}" + version="${file%%\'*}" + + printf "%b" "${version}\n" +} + +get_date() { + local date='' + + if ! date="$(date --utc +%F)" ; then + exit_err 'Failed to get the current date.' + fi + + printf "%b" "${date}\n" +} + +convert_to_changelog() { + + # converts a specific type of yaml news file to a markdown changelog file + # At the end copy a working template to the top of the changelog for the next release. + + log_info "Copying file to changelog" + TEMP_CHANGELOG_FILE=$(mktemp) + + cp "${TEMP_NEWS}" "${TEMP_CHANGELOG_FILE}" + + log_info "Adjusting changelog formatting" + + + sed -i 's/---/ /g' "${TEMP_CHANGELOG_FILE}" + + sed -i 's/- Features/### Features/g' "${TEMP_CHANGELOG_FILE}" + sed -i 's/- Bug fixes/### Bug fixes/g' "${TEMP_CHANGELOG_FILE}" + sed -i 's/- Other notes/### Other notes/g' "${TEMP_CHANGELOG_FILE}" + + sed -i 's/Description://g' "${TEMP_CHANGELOG_FILE}" + + # replace ratio character with colon + sed -i 's/∶/:/g' "${TEMP_CHANGELOG_FILE}" + + + sed -i 's/^Version:/##/' "${TEMP_CHANGELOG_FILE}" + sed -i 's/^Date:/###/' "${TEMP_CHANGELOG_FILE}" + + sed -i "1i # Changelog" "${TEMP_CHANGELOG_FILE}" + + cp "${TEMP_CHANGELOG_FILE}" "${CHANGELOG_FILE}" + +} + +remove_unneeded_template() { + + # if just refreshing the existing release notes, we don't want the template to be present since it is for the new release + + if [ "${MAKE_NEW_RELEASE}" == n ] + then + log_info "Removing template part from temporary NEWS.yaml file, since not generating new release" + removed_template=false + for i in {3..1000} + do + if [ "$(sed -n "${i}"p "${TEMP_NEWS}")" == "---" ] + then + sed -i "1, "$((i - 2))"d" "${TEMP_NEWS}" + removed_template=true + break + fi + done + if [ ! "${removed_template}" == true ] + then + rm "${TEMP_NEWS:?}" + log_err "Could not remove the template from your NEWS.yaml file. \n" + log_err "Please verify it follows the correct format and try again. \n" + exit_err "Note a NEWS.yaml file template (the top release in the NEWS.yaml file) of up to 1000 lines long is attempted to be removed when regenerating a release. \n" + fi + fi + +} + +prepare_release_entry() { + + # check if new release version is not already in metainfo. + # adds a date and version number to the latest release in news + + if [ "${MAKE_NEW_RELEASE}" == y ] + then + + if ! grep -q UNRELEASED_VERSION "${TEMP_NEWS}"; + then + rm "${TEMP_NEWS:?}" + exit_err 'UNRELEASED_VERSION not found in NEWS. Verify NEWS file contains news-release-template.yaml at the top.' + fi + sed -i "{s/UNRELEASED_VERSION/${NEW_RELEASE_VERSION}/g}" "${TEMP_NEWS}"; + log_info "Release version ${NEW_RELEASE_VERSION} put in NEWS file." + + + if ! grep -q UNRELEASED_DATE "${TEMP_NEWS}"; + then + rm "${TEMP_NEWS:?}" + exit_err "UNRELEASED_DATE not found in NEWS. Verify NEWS file contains contents of news-release-template.yaml at the top." + fi + sed -i "{s/UNRELEASED_DATE/${NEW_RELEASE_DATE}/g}" "${TEMP_NEWS}"; + log_info "Release date ${NEW_RELEASE_DATE} put in NEWS file." + + fi + +} + +prepare_metainfo() { + sed 's/@APP_ID@/com.github.wwmm.easyeffects/g' -i "${TEMP_METAINFO_FILE}" +} + +finalize_metainfo() { + sed 's/com.github.wwmm.easyeffects/@APP_ID@/g' -i "${TEMP_METAINFO_FILE}" +} + +check_appstream_cli() { + + log_info "Checking appstreamcli validate --pedantic" + + APPSTREAM_CLI_OUT=$(appstreamcli validate --pedantic --explain "${TEMP_METAINFO_FILE}") + if [ $? -ne 0 ]; + then + log_err "appstreamcli validate --pedantic failed \n" + log_err "appstreamcli: $APPSTREAM_CLI_OUT \n" + rm "${TEMP_NEWS:?}" + rm "${TEMP_METAINFO_FILE:?}" + exit 1 + fi + log_info "Passed appstreamcli validate --pedantic" + +} + +check_appstream_util() { + + log_info "Checking appstream-util validate-relax" + + if [ "$(appstream-util validate-relax "${TEMP_METAINFO_FILE}" 2>&1 > /dev/null)" ]; + then + log_err "appstream-util validate-relax failed \n" + log_err "appstream-util: $(appstream-util validate-relax "${TEMP_METAINFO_FILE}") \n" + rm "${TEMP_NEWS:?}" + rm "${TEMP_METAINFO_FILE:?}" + exit 1 + fi + log_info "Passed appstream-util validate-relax" + + + + log_info "Checking appstream-util validate" + log_info "This script will hide errors relating to screenshots or style-invalid, as those are considered false positives." + log_info "However, errors that are not relating to screenshots or style-invalid are considered important to fix." + + TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT=$(mktemp) + set +o noclobber + appstream-util validate "${TEMP_METAINFO_FILE}" > "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" 2>&1 + set -o noclobber + + sed "/easyeffects-light-screenshot/d" -i "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" + sed "/style-invalid/d" -i "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" + sed "/failed/d" -i "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" + sed "/FAILED/d" -i "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" + sed "/com.github.wwmm.easyeffects.metainfo.xml.in/d" -i "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" + + if [ -s "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" ]; then + log_err "appstream-util validate gave non-screenshot related errors \n" + log_err "appstream-util validate failed \n" + cat "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT}" + rm "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT:?}" + rm "${TEMP_METAINFO_FILE:?}" + rm "${TEMP_NEWS:?}" + exit 1 + fi + + log_info "Passed appstream-util validate" + + rm "${TEMP_APPSTREAM_UTIL_EXCESS_OUTPUT:?}" + +} + +convert_news_to_metainfo() { + + # need to remove URLs as under certain conditions URLs are not permitted in AppStream release notes. + # only some implementations will actually fail validation an AppStream file on this, though. + # this only effects the outputted metainfo file, not news or changelog + + TEMP_NEWS_CLEANED=$(mktemp) + cp "${TEMP_NEWS}" "${TEMP_NEWS_CLEANED}" + + sed -i 's|https://github.com/wwmm/easyeffects/issues/|issue |g' "${TEMP_NEWS_CLEANED}" + + sed -i 's!http[s]\?://\S*!!g' "${TEMP_NEWS_CLEANED}" + + # remove backticks as these are not useful in metainfo + sed -i 's/`//g' "${TEMP_NEWS_CLEANED}" + + log_info "Converting news to metainfo" + + # must use actual file extension otherwise appstream-util will complain + TEMP_METAINFO_FILE=$(mktemp --suffix .metainfo.xml.in) + + cp "${METAINFO_FILE}" "${TEMP_METAINFO_FILE}" + + if [ "$(appstreamcli news-to-metainfo --format=yaml "${TEMP_NEWS_CLEANED}" "${TEMP_METAINFO_FILE}" 2>&1 > /dev/null)" ]; + then + rm "${TEMP_NEWS:?}" + log_err "Converting news to metainfo failed. \n" + log_err "Check formatting, don't leave section headers with nothing beneath them. \n" + log_err "Also remove any line break in the fields description. \n" + log_err "appstreamcli: $(appstreamcli news-to-metainfo --format=yaml "${TEMP_NEWS_CLEANED}" "${TEMP_METAINFO_FILE}" 2>&1 > /dev/null) \n" + rm "${TEMP_NEWS_CLEANED:?}" + rm "${TEMP_METAINFO_FILE:?}" + exit 1 + fi + + log_info "Successfully converted news to metainfo" + + # replace ratio character with colon + sed -i 's/∶/:/g' "${TEMP_METAINFO_FILE}" + + rm "${TEMP_NEWS_CLEANED:?}" + +} +set +o nounset +if [[ "$1" == "--make-new-release" ]]; then + MAKE_NEW_RELEASE='y' +elif [[ "$1" == "--no-new-release" ]]; then + MAKE_NEW_RELEASE='n' +elif [[ ! "$1" == "" ]]; then + log_err "Unknown argument, exiting \n" + exit 1 +else + read -r -e -p "Create a new release? (y/n): " MAKE_NEW_RELEASE +fi +set -o nounset + + +if ! [ "${MAKE_NEW_RELEASE}" == y ] && ! [ "${MAKE_NEW_RELEASE}" == n ] +then + exit_err "Invalid input entered. Enter only exactly \"y\" or \"n\" \n" +fi + +if [ "${MAKE_NEW_RELEASE}" == n ] +then + log_info "Not making a new release, just refreshing changelog and metainfo with current releases." + log_info "The top entry of the NEWS.yaml file will not be used for refreshing, since that is supposed to be the next release." +fi + + +check_deps +init "$0" +NEW_RELEASE_VERSION="$(get_version)" || exit 1 + +check_metainfo_releases "${NEW_RELEASE_VERSION}" + +NEW_RELEASE_DATE="$(get_date)" || exit 1 + +TEMP_NEWS=$(mktemp) +cp "${NEWS_FILE}" "${TEMP_NEWS}" + +remove_unneeded_template +prepare_release_entry + +convert_news_to_metainfo +prepare_metainfo + +check_appstream_cli +check_appstream_util + +convert_to_changelog + + +if [ "${MAKE_NEW_RELEASE}" == y ] +then + log_info "Copying new dates to NEWS.yaml" + cp "${TEMP_NEWS}" "${NEWS_FILE}" + + log_info "Copying template for next release to NEWS.yaml" + sed -i -e "1 e cat ${REPO_DIR}/util/news-release-template.yaml" "${NEWS_FILE}" +fi + +log_info "Copying changes to metainfo file" +finalize_metainfo +cp "${TEMP_METAINFO_FILE}" "${METAINFO_FILE}" +rm "${TEMP_METAINFO_FILE:?}" + +rm "${TEMP_NEWS:?}" diff --git a/util/update_translation_templates.sh b/util/update_translation_templates.sh new file mode 100755 index 0000000..718432a --- /dev/null +++ b/util/update_translation_templates.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +ninja easyeffects-pot +ninja easyeffects-update-po +ninja easyeffects-news-pot +ninja easyeffects-news-update-po \ No newline at end of file diff --git a/util/valgrind.txt b/util/valgrind.txt new file mode 100644 index 0000000..a31f048 --- /dev/null +++ b/util/valgrind.txt @@ -0,0 +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.30.2