├── src ├── __init__.py ├── cavalier.gresource.xml ├── meson.build ├── cavalier.in ├── settings.py ├── translator_credits.py.in ├── settings_import_export.py ├── cava.py ├── drawing_area.py ├── main.py ├── draw_functions.py ├── shortcuts_dialog.ui ├── window.py └── shortcuts.py ├── data ├── screenshots │ ├── bars.png │ ├── main.png │ ├── levels.png │ ├── default.png │ └── particles.png ├── io.github.fsobolev.Cavalier.desktop.in ├── css │ └── cavalier.css ├── icons │ ├── meson.build │ └── hicolor │ │ ├── symbolic │ │ └── apps │ │ │ └── io.github.fsobolev.Cavalier-symbolic.svg │ │ └── scalable │ │ └── apps │ │ ├── io.github.fsobolev.Cavalier.svg │ │ └── io.github.fsobolev.Cavalier.Devel.svg ├── meson.build ├── io.github.fsobolev.Cavalier.metainfo.xml.in └── io.github.fsobolev.Cavalier.gschema.xml ├── po ├── LINGUAS ├── meson.build ├── POTFILES ├── CREDITS.json ├── README.md ├── cavalier.pot ├── pt_BR.po ├── ru.po ├── es.po ├── de.po ├── fr.po └── nl.po ├── .gitmodules ├── .vscode └── settings.json ├── meson.build ├── cavalier.doap ├── COPYING ├── README.md ├── io.github.fsobolev.Cavalier.json └── .gitignore /src/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/screenshots/bars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fsobolev/cavalier/HEAD/data/screenshots/bars.png -------------------------------------------------------------------------------- /data/screenshots/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fsobolev/cavalier/HEAD/data/screenshots/main.png -------------------------------------------------------------------------------- /data/screenshots/levels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fsobolev/cavalier/HEAD/data/screenshots/levels.png -------------------------------------------------------------------------------- /data/screenshots/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fsobolev/cavalier/HEAD/data/screenshots/default.png -------------------------------------------------------------------------------- /data/screenshots/particles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fsobolev/cavalier/HEAD/data/screenshots/particles.png -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | # Please keep this list sorted alphabetically. 2 | de 3 | es 4 | fr 5 | it 6 | nl 7 | pt_BR 8 | ru 9 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "shared-modules"] 2 | path = shared-modules 3 | url = https://github.com/flathub/shared-modules.git 4 | -------------------------------------------------------------------------------- /po/meson.build: -------------------------------------------------------------------------------- 1 | i18n.gettext('cavalier', preset: 'glib') 2 | 3 | pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) 4 | install_data('CREDITS.json', install_dir: pkgdatadir) 5 | -------------------------------------------------------------------------------- /po/POTFILES: -------------------------------------------------------------------------------- 1 | data/io.github.fsobolev.Cavalier.desktop.in 2 | data/io.github.fsobolev.Cavalier.metainfo.xml.in 3 | data/io.github.fsobolev.Cavalier.gschema.xml 4 | src/main.py 5 | src/preferences_window.py 6 | src/window.py 7 | src/shortcuts_dialog.ui 8 | -------------------------------------------------------------------------------- /data/io.github.fsobolev.Cavalier.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Cavalier 3 | Comment=Audio Visualizer 4 | Exec=cavalier 5 | Icon=io.github.fsobolev.Cavalier 6 | Terminal=false 7 | Type=Application 8 | Categories=GTK; 9 | StartupNotify=true 10 | -------------------------------------------------------------------------------- /src/cavalier.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ../data/css/cavalier.css 5 | shortcuts_dialog.ui 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/css/cavalier.css: -------------------------------------------------------------------------------- 1 | .sharp-corners { 2 | border-top-left-radius: 0px; 3 | border-top-right-radius: 0px; 4 | border-bottom-left-radius: 0px; 5 | border-bottom-right-radius: 0px; 6 | } 7 | 8 | .borderless-window { 9 | outline-width: 0px; 10 | box-shadow: none; 11 | } 12 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.watcherExclude": { 3 | "**/.git/objects/**": true, 4 | "**/.git/subtree-cache/**": true, 5 | "**/node_modules/*/**": true, 6 | "**/.hg/store/**": true, 7 | ".flatpak/**": true, 8 | "_build/**": true 9 | } 10 | } -------------------------------------------------------------------------------- /meson.build: -------------------------------------------------------------------------------- 1 | project('cavalier', 2 | version: '2022.02-devel', 3 | meson_version: '>= 0.59.0', 4 | default_options: [ 'warning_level=2', 'werror=false', ], 5 | ) 6 | 7 | i18n = import('i18n') 8 | gnome = import('gnome') 9 | 10 | 11 | 12 | subdir('data') 13 | subdir('src') 14 | subdir('po') 15 | 16 | gnome.post_install( 17 | glib_compile_schemas: true, 18 | gtk_update_icon_cache: true, 19 | update_desktop_database: true, 20 | ) 21 | -------------------------------------------------------------------------------- /data/icons/meson.build: -------------------------------------------------------------------------------- 1 | application_id = 'io.github.fsobolev.Cavalier' 2 | 3 | scalable_dir = join_paths('hicolor', 'scalable', 'apps') 4 | install_data( 5 | join_paths(scalable_dir, ('@0@.svg').format(application_id)), 6 | install_dir: join_paths(get_option('datadir'), 'icons', scalable_dir) 7 | ) 8 | 9 | symbolic_dir = join_paths('hicolor', 'symbolic', 'apps') 10 | install_data( 11 | join_paths(symbolic_dir, ('@0@-symbolic.svg').format(application_id)), 12 | install_dir: join_paths(get_option('datadir'), 'icons', symbolic_dir) 13 | ) 14 | -------------------------------------------------------------------------------- /po/CREDITS.json: -------------------------------------------------------------------------------- 1 | { 2 | "Fyodor Sobolev": { 3 | "lang": "Russian", 4 | "url": "https://github.com/fsobolev" 5 | }, 6 | "Heimen Stoffels": { 7 | "lang": "Dutch", 8 | "url": "https://github.com/Vistaus" 9 | }, 10 | "Albano Battistella": { 11 | "lang": "Italian", 12 | "url": "https://github.com/albanobattistella" 13 | }, 14 | "gregorni": { 15 | "lang": "German", 16 | "url": "https://gitlab.com/gregorni" 17 | }, 18 | "Irénée Thirion": { 19 | "lang": "French", 20 | "url": "https://github.com/rene-coty" 21 | }, 22 | "Santiago F.": { 23 | "lang": "Spanish", 24 | "email": "sf@santyf.com" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /cavalier.doap: -------------------------------------------------------------------------------- 1 | 6 | 7 | Cavalier 8 | Audio visualizer based on CAVA 9 | 10 | 11 | 12 | 13 | Python 14 | 15 | 16 | 17 | Fyodor Sobolev 18 | fsobolev 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /data/icons/hicolor/symbolic/apps/io.github.fsobolev.Cavalier-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | Copyright (C) 2022 Fyodor Sobolev 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 18 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 19 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 20 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | Except as contained in this notice, the name(s) of the above copyright 23 | holders shall not be used in advertising or otherwise to promote the sale, 24 | use or other dealings in this Software without prior written 25 | authorization. 26 | -------------------------------------------------------------------------------- /src/meson.build: -------------------------------------------------------------------------------- 1 | pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) 2 | moduledir = join_paths(pkgdatadir, 'cavalier') 3 | gnome = import('gnome') 4 | 5 | gnome.compile_resources('cavalier', 6 | 'cavalier.gresource.xml', 7 | gresource_bundle: true, 8 | install: true, 9 | install_dir: pkgdatadir, 10 | ) 11 | 12 | python = import('python') 13 | 14 | conf = configuration_data() 15 | conf.set('PYTHON', python.find_installation('python3').path()) 16 | conf.set('VERSION', meson.project_version()) 17 | conf.set('localedir', join_paths(get_option('prefix'), get_option('localedir'))) 18 | conf.set('pkgdatadir', pkgdatadir) 19 | 20 | configure_file( 21 | input: 'cavalier.in', 22 | output: 'cavalier', 23 | configuration: conf, 24 | install: true, 25 | install_dir: get_option('bindir') 26 | ) 27 | 28 | cavalier_sources = [ 29 | '__init__.py', 30 | 'main.py', 31 | 'window.py', 32 | 'cava.py', 33 | 'drawing_area.py', 34 | 'draw_functions.py', 35 | 'settings.py', 36 | 'settings_import_export.py', 37 | 'preferences_window.py', 38 | 'shortcuts.py' 39 | ] 40 | 41 | install_data(cavalier_sources, install_dir: moduledir) 42 | 43 | configure_file( 44 | input: 'translator_credits.py.in', 45 | output: 'translator_credits.py', 46 | configuration: conf, 47 | install: true, 48 | install_dir: moduledir 49 | ) -------------------------------------------------------------------------------- /po/README.md: -------------------------------------------------------------------------------- 1 | ## Translating the app 2 | 3 | If you want to make a translation, thank you, you're awesome! 😍 Here are some instructions. 4 | 5 | Creating a translation starts by adding `.po` file. There is `cavalier.pot` file which is a template you can copy to begin with.
6 | If you have never worked with `.po` files before, you can find some help in [gettext manual](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html). You can also use special apps ([GTranslator](https://flathub.org/apps/details/org.gnome.Gtranslator), for example) instead of text editor. 7 | 8 | After editing a file with translation, add language code to `LINGUAS` file. Please keep it alphabetically sorted! 9 | 10 | Now, it's time for the world to know your name, hero! Edit `CREDITS.json`. Here you need to specify your name, language and, optionally, email or URL. Example: 11 | 12 | ``` 13 | "Jango Fett": { 14 | "lang": "Mandalorian", 15 | "email": "jango@galaxyfarfar.away" 16 | } 17 | ``` 18 | 19 | If you made multiple translations, use an array to list all languages: 20 | 21 | ``` 22 | "C-3PO": { 23 | "lang": ["Ewokese", "Wookieespeak", "Jawaese"], 24 | "url": "https://free.droids" 25 | } 26 | ``` 27 | 28 | While editing `CREDITS.json`, don't worry about the order, the app will sort it like it needs. But be aware of commas! 29 | 30 | After all is done, send PR! I will review it as soon as possible 😊 31 | -------------------------------------------------------------------------------- /data/meson.build: -------------------------------------------------------------------------------- 1 | desktop_file = i18n.merge_file( 2 | input: 'io.github.fsobolev.Cavalier.desktop.in', 3 | output: 'io.github.fsobolev.Cavalier.desktop', 4 | type: 'desktop', 5 | po_dir: '../po', 6 | install: true, 7 | install_dir: join_paths(get_option('datadir'), 'applications') 8 | ) 9 | 10 | desktop_utils = find_program('desktop-file-validate', required: false) 11 | if desktop_utils.found() 12 | test('Validate desktop file', desktop_utils, args: [desktop_file]) 13 | endif 14 | 15 | appstream_file = i18n.merge_file( 16 | input: 'io.github.fsobolev.Cavalier.metainfo.xml.in', 17 | output: 'io.github.fsobolev.Cavalier.metainfo.xml', 18 | po_dir: '../po', 19 | install: true, 20 | install_dir: join_paths(get_option('datadir'), 'metainfo') 21 | ) 22 | 23 | appstream_util = find_program('appstream-util', required: false) 24 | if appstream_util.found() 25 | test('Validate appstream file', appstream_util, args: ['validate-relax', appstream_file]) 26 | endif 27 | 28 | install_data('io.github.fsobolev.Cavalier.gschema.xml', 29 | install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas') 30 | ) 31 | 32 | compile_schemas = find_program('glib-compile-schemas', required: false) 33 | if compile_schemas.found() 34 | test('Validate schema file', 35 | compile_schemas, 36 | args: ['--strict', '--dry-run', meson.current_source_dir()]) 37 | endif 38 | 39 | subdir('icons') 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Moved to https://github.com/NickvisionApps/Cavalier 2 | 3 |

Cavalier

4 | 5 | Audio visualizer based on CAVA

6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | **Cavalier** is an audio visualizer based on [CAVA](https://github.com/karlstav/cava) with customizable LibAdwaita interface. 14 | * 4 drawing modes! 15 | * Set single color or up to 10 colors gradient for background and foreground. 16 | * Configure smoothing, noise reduction and a few other CAVA settings. 17 | 18 | ![](https://raw.githubusercontent.com/fsobolev/cavalier/master/data/screenshots/main.png) 19 | 20 | ## Building 21 | 22 | The easiest way to build the development version of Cavalier is by using GNOME Builder as described [here](https://wiki.gnome.org/Newcomers/BuildProject). 23 | 24 | ## Translations 25 | 26 | See [instruction](po/README.md) on how to translate the app to your language. 27 | 28 | ## Code of Conduct 29 | 30 | This project follows the [GNOME Code of Conduct](https://wiki.gnome.org/Foundation/CodeOfConduct). 31 | -------------------------------------------------------------------------------- /src/cavalier.in: -------------------------------------------------------------------------------- 1 | #!@PYTHON@ 2 | 3 | # cavalier.in 4 | # 5 | # Copyright 2022 Fyodor Sobolev 6 | # 7 | # Permission is hereby granted, free of charge, to any person obtaining 8 | # a copy of this software and associated documentation files (the 9 | # "Software"), to deal in the Software without restriction, including 10 | # without limitation the rights to use, copy, modify, merge, publish, 11 | # distribute, sublicense, and/or sell copies of the Software, and to 12 | # permit persons to whom the Software is furnished to do so, subject to 13 | # the following conditions: 14 | # 15 | # The above copyright notice and this permission notice shall be 16 | # included in all copies or substantial portions of the Software. 17 | # 18 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 22 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | # 26 | # Except as contained in this notice, the name(s) of the above copyright 27 | # holders shall not be used in advertising or otherwise to promote the sale, 28 | # use or other dealings in this Software without prior written 29 | # authorization. 30 | # 31 | # SPDX-License-Identifier: MIT 32 | 33 | import os 34 | import sys 35 | import signal 36 | import locale 37 | import gettext 38 | 39 | VERSION = '@VERSION@' 40 | pkgdatadir = '@pkgdatadir@' 41 | localedir = '@localedir@' 42 | 43 | sys.path.insert(1, pkgdatadir) 44 | signal.signal(signal.SIGINT, signal.SIG_DFL) 45 | locale.bindtextdomain('cavalier', localedir) 46 | locale.textdomain('cavalier') 47 | gettext.install('cavalier', localedir) 48 | 49 | if __name__ == '__main__': 50 | import gi 51 | 52 | from gi.repository import Gio 53 | resource = Gio.Resource.load(os.path.join(pkgdatadir, 'cavalier.gresource')) 54 | resource._register() 55 | 56 | from cavalier import main 57 | sys.exit(main.main(VERSION)) 58 | -------------------------------------------------------------------------------- /io.github.fsobolev.Cavalier.json: -------------------------------------------------------------------------------- 1 | { 2 | "app-id" : "io.github.fsobolev.Cavalier", 3 | "runtime" : "org.gnome.Platform", 4 | "runtime-version" : "44", 5 | "sdk" : "org.gnome.Sdk", 6 | "command" : "cavalier", 7 | "finish-args" : [ 8 | "--share=ipc", 9 | "--socket=wayland", 10 | "--socket=fallback-x11", 11 | "--socket=pulseaudio", 12 | "--device=dri" 13 | ], 14 | "cleanup" : [ 15 | "/include", 16 | "/lib/pkgconfig", 17 | "/man", 18 | "/share/doc", 19 | "/share/gtk-doc", 20 | "/share/man", 21 | "/share/pkgconfig", 22 | "*.la", 23 | "*.a" 24 | ], 25 | "modules" : [ 26 | "shared-modules/linux-audio/fftw3f.json", 27 | { 28 | "name" : "iniparser", 29 | "buildsystem" : "simple", 30 | "build-commands" : 31 | [ 32 | "make PREFIX=/app", 33 | "install -Dm0644 src/iniparser.h /app/include/iniparser.h", 34 | "install -Dm0644 src/dictionary.h /app/include/dictionary.h", 35 | "install -Dm0644 libiniparser.so.1 /app/lib/libiniparser.so.1", 36 | "ln -sf libiniparser.so.1 /app/lib/libiniparser.so" 37 | ], 38 | "sources" : [ 39 | { 40 | "type" : "git", 41 | "url" : "https://github.com/ndevilla/iniparser.git", 42 | "commit" : "deb85ad4936d4ca32cc2260ce43323d47936410d" 43 | } 44 | ] 45 | }, 46 | { 47 | "name" : "cava", 48 | "sources" : [ 49 | { 50 | "type" : "git", 51 | "url" : "https://github.com/karlstav/cava.git", 52 | "tag" : "0.8.3", 53 | "commit" : "746a3b1e6021e383aea9d0000f49d71fb24e1856" 54 | } 55 | ] 56 | }, 57 | { 58 | "name" : "cavalier", 59 | "builddir" : true, 60 | "buildsystem" : "meson", 61 | "sources" : [ 62 | { 63 | "type" : "dir", 64 | "path" : "." 65 | } 66 | ] 67 | } 68 | ] 69 | } 70 | -------------------------------------------------------------------------------- /src/settings.py: -------------------------------------------------------------------------------- 1 | # settings.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | from gi.repository import Gio, GLib 32 | from inspect import signature 33 | 34 | class CavalierSettings(Gio.Settings): 35 | __gtype_name__ = 'CavalierSettings' 36 | 37 | def __init__(self): 38 | super().__init__(self) 39 | 40 | def new(callback_fn=None): 41 | gsettings = Gio.Settings.new('io.github.fsobolev.Cavalier') 42 | gsettings.__class__ = CavalierSettings 43 | if callback_fn: 44 | gsettings.connect('changed', gsettings.on_settings_changed) 45 | gsettings.callback_fn = callback_fn 46 | gsettings.callback_fn_sig_len = len(signature(callback_fn).parameters) 47 | return gsettings 48 | 49 | def on_settings_changed(self, obj, key): 50 | if self.callback_fn_sig_len > 0: 51 | self.callback_fn(key) 52 | else: 53 | self.callback_fn() 54 | 55 | -------------------------------------------------------------------------------- /src/translator_credits.py.in: -------------------------------------------------------------------------------- 1 | # translator_credits.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | import json 32 | 33 | pkgdatadir= '@pkgdatadir@' 34 | 35 | def get_translator_credits(): 36 | translator_credits='' 37 | try: 38 | with open(f'{pkgdatadir}/CREDITS.json', 'r') as f: 39 | credits_json = json.load(f) 40 | for translator in sorted(credits_json.keys()): 41 | data = credits_json[translator] 42 | translator_credits += f'{translator} (' 43 | if type(data['lang']) == list: 44 | data['lang'].sort() 45 | translator_credits += ', '.join(data['lang']) 46 | else: 47 | translator_credits += data['lang'] 48 | translator_credits += ')' 49 | if 'url' in data.keys(): 50 | translator_credits += f" {data['url']}" 51 | elif 'email' in data.keys(): 52 | translator_credits += f" <{data['email']}>" 53 | translator_credits += '\n' 54 | translator_credits = translator_credits.rstrip('\n') 55 | return translator_credits 56 | except Exception as e: 57 | print('[Error] Something went wrong when opening translator credits.') 58 | print(e) 59 | return '' 60 | -------------------------------------------------------------------------------- /src/settings_import_export.py: -------------------------------------------------------------------------------- 1 | # settings_import_export.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | import subprocess 32 | from gi.repository import Adw 33 | 34 | def import_settings(window, path): 35 | try: 36 | with open(path, 'r') as file: 37 | lines = file.readlines() 38 | for line in lines: 39 | if line != '\n': 40 | subprocess.run(['gsettings', 'set', \ 41 | 'io.github.fsobolev.Cavalier', line.split(' ')[0], \ 42 | line.replace(line.split(' ')[0], '').strip()]) 43 | toast_msg = _('Settings sucessfully imported') 44 | 45 | except Exception as e: 46 | print('Can\'t import settings from file: ' + path) 47 | print(e) 48 | toast_msg = _('Failed to import settings') 49 | 50 | window.add_toast(Adw.Toast.new(toast_msg)) 51 | 52 | 53 | def export_settings(window, path): 54 | gsettings_list = subprocess.run( \ 55 | ['gsettings', 'list-recursively', 'io.github.fsobolev.Cavalier'], \ 56 | stdout=subprocess.PIPE).stdout.decode('utf-8') 57 | try: 58 | with open(path, 'w') as file: 59 | for line in gsettings_list.split('\n'): 60 | file.write(' '.join(line.split(' ')[1::]) + '\n') 61 | toast_msg = _('File successfully saved') 62 | 63 | except Exception as e: 64 | print('Can\'t export settings to file: ' + path) 65 | print(e) 66 | toast_msg = _('Failed to save file') 67 | 68 | window.add_toast(Adw.Toast.new(toast_msg)) 69 | -------------------------------------------------------------------------------- /data/icons/hicolor/scalable/apps/io.github.fsobolev.Cavalier.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /data/io.github.fsobolev.Cavalier.metainfo.xml.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | io.github.fsobolev.Cavalier.desktop 4 | CC0-1.0 5 | MIT 6 | Cavalier 7 | Audio visualizer based on CAVA. 8 | 9 |

Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita interface.

10 |
    11 |
  • 4 drawing modes!
  • 12 |
  • Set single color or up to 10 colors gradient for background and foreground.
  • 13 |
  • Configure smoothing, noise reduction and a few other CAVA settings.
  • 14 |
15 |
16 | io.github.fsobolev.Cavalier.desktop 17 | https://github.com/fsobolev/cavalier 18 | https://github.com/fsobolev/cavalier/issues 19 | Fyodor Sobolev 20 | cavalier 21 | 22 | 23 | https://raw.githubusercontent.com/fsobolev/cavalier/master/data/screenshots/main.png 24 | 25 | 26 | https://raw.githubusercontent.com/fsobolev/cavalier/master/data/screenshots/default.png 27 | 28 | 29 | https://raw.githubusercontent.com/fsobolev/cavalier/master/data/screenshots/levels.png 30 | 31 | 32 | https://raw.githubusercontent.com/fsobolev/cavalier/master/data/screenshots/particles.png 33 | 34 | 35 | https://raw.githubusercontent.com/fsobolev/cavalier/master/data/screenshots/bars.png 36 | 37 | 38 | 39 | 40 | 41 |

Second release of Cavalier.

42 |
    43 |
  • New drawing mode — Particles!
  • 44 |
  • Color profiles! Create as many as you want and change between them instantly. Unfortunately, this new feature required to change how the application saves colors, and because of this your previous colors settings will be lost after installing this update.
  • 45 |
  • Added keyboard shortcuts to change most of the settings on the fly.
  • 46 |
  • Added option to show/hide window controls.
  • 47 |
  • Added option to autohide headerbar when the main window is not focused.
  • 48 |
  • Added option to change roundness of items in "levels" and "particles" modes.
  • 49 |
  • Added option to reverse the order of bars.
  • 50 |
  • Import/Export Settings
  • 51 |
52 |
53 |
54 |
55 | 56 | 57 | pointing 58 | keyboard 59 | touch 60 | 61 | 62 | 360 63 | 64 | 65 | workstation 66 | mobile 67 | 68 |
69 | -------------------------------------------------------------------------------- /src/cava.py: -------------------------------------------------------------------------------- 1 | # cava.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | import os 32 | import subprocess 33 | import struct 34 | from cavalier.settings import CavalierSettings 35 | 36 | class Cava: 37 | def __init__(self): 38 | self.BYTETYPE = "H" 39 | self.BYTESIZE = 2 40 | self.BYTENORM = 65535 41 | self.restarting = False 42 | 43 | self.settings = CavalierSettings.new() 44 | 45 | self.sample = [] 46 | 47 | if os.getenv('XDG_CONFIG_HOME'): 48 | self.config_dir = os.getenv('XDG_CONFIG_HOME') + '/cavalier' 49 | else: 50 | self.config_dir = os.getenv('HOME') + '/.config/cavalier' 51 | if not os.path.isdir(self.config_dir): 52 | os.makedirs(self.config_dir) 53 | self.config_file_path = self.config_dir + '/config' 54 | 55 | def run(self): 56 | self.load_settings() 57 | self.write_config() 58 | self.process = subprocess.Popen(["cava", "-p", self.config_file_path], \ 59 | stdout=subprocess.PIPE) 60 | source = self.process.stdout 61 | self.restarting = False 62 | self.chunk = self.BYTESIZE * self.bars 63 | self.fmt = self.BYTETYPE * self.bars 64 | while True: 65 | data = source.read(self.chunk) 66 | if len(data) < self.chunk or self.restarting: 67 | break 68 | self.sample = \ 69 | [i / self.BYTENORM for i in struct.unpack(self.fmt, data)] 70 | 71 | def stop(self): 72 | if not self.restarting: 73 | self.process.kill() 74 | 75 | def load_settings(self): 76 | # Cava config options 77 | self.bars = self.settings['bars'] 78 | self.autosens = int(self.settings['autosens']) 79 | self.sensitivity = self.settings['sensitivity'] 80 | self.channels = self.settings['channels'] 81 | self.monstercat = \ 82 | ['off', 'monstercat'].index(self.settings['smoothing']) 83 | self.noise_reduction = self.settings['noise-reduction'] 84 | 85 | def write_config(self): 86 | try: 87 | f = open(self.config_file_path, 'w') 88 | conf = '\n'.join([ 89 | '[general]', 90 | f'bars = {self.bars}', 91 | f'autosens = {self.autosens}', 92 | f'sensitivity = {self.sensitivity ** 2}', 93 | 'framerate = 60', 94 | '[input]', 95 | 'method = pulse', 96 | '[output]', 97 | f'channels = {self.channels}', 98 | 'mono_option = average', 99 | 'method = raw', 100 | 'raw_target = /dev/stdout', 101 | 'bit_format = 16bit', 102 | '[smoothing]', 103 | f'monstercat = {self.monstercat}', 104 | f'noise_reduction = {self.noise_reduction}' 105 | ]) 106 | f.write(conf) 107 | f.close() 108 | except Exception as e: 109 | print("Can't write config file for cava...'") 110 | print(e) 111 | 112 | -------------------------------------------------------------------------------- /data/io.github.fsobolev.Cavalier.gschema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Window size 6 | (400,200) 7 | 8 | 9 | Window maximized state 10 | Whether main window is maximized or not 11 | false 12 | 13 | 14 | Borderless window 15 | Whether to disable window shadow and borders. 16 | false 17 | 18 | 19 | Window controls 20 | Whether to show window control buttons. 21 | false 22 | 23 | 24 | Autohide headerbar 25 | Whether to hide headerbar when main window is not focused. 26 | false 27 | 28 | 29 | Drawing mode 30 | Defines what the visualizer looks like. 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | "wave" 39 | 40 | 41 | Drawing area margin 42 | Size of gaps around drawing area (in pixels). 43 | 44 | 0 45 | 46 | 47 | Offset between items 48 | The size of spaces between elements in "levels", "particles" and "bars" modes (in percent). 49 | 50 | 10 51 | 52 | 53 | Roundness of items 54 | This setting affects "levels", "particles" and "spine" modes. 55 | 56 | 10 57 | 58 | 59 | Thickness of lines 60 | Thickness of lines when filling is off (in pixels). 61 | 62 | 15 63 | 64 | 65 | Filling 66 | Whether shapes should be filled or outlined. 67 | true 68 | 69 | 70 | Number of bars 71 | Number of bars in CAVA config 72 | 73 | 12 74 | 75 | 76 | Automatic sensitivity 77 | Attempt to decrease sensitivity if the bars peak. 78 | true 79 | 80 | 81 | Sensitivity 82 | Manual sensitivity. If automatic sensitivity is enabled, this will only be the initial value. 83 | 84 | 10.0 85 | 86 | 87 | Channels 88 | Mono or stereo 89 | 90 | 91 | 92 | 93 | "stereo" 94 | 95 | 96 | Smoothing 97 | 98 | 99 | 100 | 101 | "monstercat" 102 | 103 | 104 | Noise reduction 105 | This factor adjusts the integral and gravity filters to keep the signal smooth. 1 will be very slow and smooth, 0 will be fast but noisy. 106 | 107 | 0.77 108 | 109 | 110 | Reverse order 111 | true 112 | 113 | 114 | Widgets style 115 | Style used by Adwaita widgets. 116 | 117 | 118 | 119 | 120 | "dark" 121 | 122 | 123 | Sharp corners 124 | Whether the main window corners should be sharp. 125 | false 126 | 127 | 128 | Color Profiles 129 | [] 130 | 131 | 132 | Index of active color profile 133 | 0 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /src/drawing_area.py: -------------------------------------------------------------------------------- 1 | # drawing_area.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | from gi.repository import Gtk, GObject 32 | from threading import Thread 33 | from cavalier.cava import Cava 34 | from cavalier.draw_functions import wave, levels, particles, spine, bars 35 | from cavalier.settings import CavalierSettings 36 | 37 | class CavalierDrawingArea(Gtk.DrawingArea): 38 | __gtype_name__ = 'CavalierDrawingArea' 39 | 40 | def __init__(self, settings, **kwargs): 41 | super().__init__(**kwargs) 42 | 43 | def new(): 44 | cda = Gtk.DrawingArea.new() 45 | cda.__class__ = CavalierDrawingArea 46 | cda.set_vexpand(True) 47 | cda.set_hexpand(True) 48 | cda.set_draw_func(cda.draw_func, None, None) 49 | cda.cava = None 50 | cda.spinner = None 51 | cda.settings = CavalierSettings.new(cda.on_settings_changed) 52 | cda.connect('unrealize', cda.on_unrealize) 53 | return cda 54 | 55 | def run(self): 56 | self.on_settings_changed(None) 57 | if self.cava == None: 58 | self.cava = Cava() 59 | self.cava_thread = Thread(target=self.cava.run) 60 | self.cava_thread.start() 61 | if self.spinner != None: 62 | self.spinner.set_visible(False) 63 | GObject.timeout_add(1000.0 / 60.0, self.redraw) 64 | 65 | def on_settings_changed(self, key): 66 | self.draw_mode = self.settings['mode'] 67 | self.set_margin_top(self.settings['margin']) 68 | self.set_margin_bottom(self.settings['margin']) 69 | self.set_margin_start(self.settings['margin']) 70 | self.set_margin_end(self.settings['margin']) 71 | self.offset = self.settings['items-offset'] 72 | self.roundness = self.settings['items-roundness'] 73 | self.thickness = self.settings['line-thickness'] 74 | self.fill = self.settings['fill'] 75 | self.reverse_order = self.settings['reverse-order'] 76 | self.channels = self.settings['channels'] 77 | try: 78 | color_profile = self.settings['color-profiles'][ \ 79 | self.settings['active-color-profile']] 80 | self.colors = color_profile[1] 81 | except: 82 | self.colors = [] 83 | if len(self.colors) == 0: 84 | self.settings['color-profiles'] = [(_('Default'), \ 85 | [(53, 132, 228, 1.0)], [])] 86 | return 87 | 88 | if key in ('bars', 'autosens', 'sensitivity', 'channels', \ 89 | 'smoothing', 'noise-reduction'): 90 | if not self.cava.restarting: 91 | self.cava.stop() 92 | self.cava.restarting = True 93 | if self.spinner != None: 94 | self.spinner.set_visible(True) 95 | self.cava.sample = [] 96 | GObject.timeout_add_seconds(3, self.run) 97 | 98 | def draw_func(self, area, cr, width, height, data, n): 99 | if len(self.cava_sample) > 0: 100 | if self.draw_mode == 'wave': 101 | wave(self.cava_sample, cr, width, height, self.colors, \ 102 | self.fill, self.thickness) 103 | elif self.draw_mode == 'levels': 104 | levels(self.cava_sample, cr, width, height, self.colors, \ 105 | self.offset, self.roundness, self.fill, self.thickness) 106 | elif self.draw_mode == 'particles': 107 | particles(self.cava_sample, cr, width, height, self.colors, \ 108 | self.offset, self.roundness, self.fill, self.thickness) 109 | elif self.draw_mode == 'spine': 110 | spine(self.cava_sample, cr, width, height, self.colors, \ 111 | self.offset, self.roundness, self.fill, self.thickness) 112 | elif self.draw_mode == 'bars': 113 | bars(self.cava_sample, cr, width, height, self.colors, \ 114 | self.offset, self.fill, self.thickness) 115 | 116 | def redraw(self): 117 | self.queue_draw() 118 | self.cava_sample = self.cava.sample 119 | if self.reverse_order: 120 | if self.channels == 'mono': 121 | self.cava_sample = self.cava_sample[::-1] 122 | else: 123 | self.cava_sample = \ 124 | self.cava_sample[0:int(len(self.cava_sample)/2):][::-1] + \ 125 | self.cava_sample[int(len(self.cava_sample)/2)::][::-1] 126 | return True 127 | 128 | def on_unrealize(self, obj): 129 | self.cava.stop() 130 | -------------------------------------------------------------------------------- /src/main.py: -------------------------------------------------------------------------------- 1 | # main.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | import sys 32 | import gi 33 | 34 | gi.require_version('Gtk', '4.0') 35 | gi.require_version('Adw', '1') 36 | 37 | from gi.repository import Gtk, Gio, Adw 38 | from .window import CavalierWindow 39 | from .preferences_window import CavalierPreferencesWindow 40 | from .translator_credits import get_translator_credits 41 | 42 | 43 | class CavalierApplication(Adw.Application): 44 | """The main application singleton class.""" 45 | 46 | def __init__(self, version): 47 | super().__init__(application_id='io.github.fsobolev.Cavalier', 48 | flags=Gio.ApplicationFlags.FLAGS_NONE) 49 | self.version = version 50 | self.create_action('about', self.on_about_action) 51 | self.create_action('open-menu', self.on_menu_action, ['F10']) 52 | self.create_action('toggle-fullscreen', self.on_fullscreen_action, ['F11']) 53 | self.create_action('preferences', self.on_preferences_action, 54 | ['comma']) 55 | self.create_action('shortcuts', self.on_shortcuts_action, \ 56 | ['question']) 57 | self.create_action('close', self.on_close_action, ['w']) 58 | self.create_action('quit', self.on_quit_action, ['q']) 59 | 60 | def do_activate(self): 61 | """Called when the application is activated. 62 | 63 | We raise the application's main window, creating it if 64 | necessary. 65 | """ 66 | self.win = self.props.active_window 67 | if not self.win: 68 | self.win = CavalierWindow(application=self) 69 | self.win.present() 70 | 71 | def on_about_action(self, *args): 72 | """Callback for the app.about action.""" 73 | about = Adw.AboutWindow(transient_for=self.props.active_window, 74 | application_name='Cavalier', 75 | application_icon='io.github.fsobolev.Cavalier', 76 | developer_name=_('Fyodor Sobolev'), 77 | version=self.version, 78 | developers=[_('Fyodor Sobolev')], 79 | copyright='© 2022 Fyodor Sobolev', 80 | website='https://github.com/fsobolev/cavalier', 81 | issue_url='https://github.com/fsobolev/cavalier/issues', 82 | license_type=Gtk.License.MIT_X11, 83 | translator_credits=get_translator_credits()) 84 | about.present() 85 | 86 | def on_preferences_action(self, widget, _): 87 | self.pref_win = None 88 | for w in self.get_windows(): 89 | if type(w) == CavalierPreferencesWindow: 90 | self.pref_win = w 91 | break 92 | if not self.pref_win: 93 | self.pref_win = CavalierPreferencesWindow(application=self) 94 | self.pref_win.present() 95 | 96 | def on_shortcuts_action(self, widget, _): 97 | self.shortcuts_win = None 98 | for w in self.get_windows(): 99 | if type(w) == Gtk.ShortcutsWindow: 100 | self.shortcuts_win = w 101 | break 102 | if not self.shortcuts_win: 103 | builder = Gtk.Builder.new_from_resource( \ 104 | '/io/github/fsobolev/Cavalier/shortcuts_dialog.ui') 105 | self.shortcuts_win = builder.get_object('dialog') 106 | self.shortcuts_win.present() 107 | 108 | def on_quit_action(self, widget, _): 109 | self.win.close() 110 | self.quit() 111 | 112 | def on_close_action(self, widget, _): 113 | win = self.props.active_window 114 | win.close() 115 | if type(win) == CavalierWindow: 116 | self.quit() 117 | 118 | def on_menu_action(self, widget, _): 119 | self.win.menu_button.activate() 120 | 121 | def on_fullscreen_action(self, widget, _): 122 | self.win.unfullscreen() if self.win.is_fullscreen() else self.win.fullscreen() 123 | 124 | def create_action(self, name, callback, shortcuts=None): 125 | """Add an application action. 126 | 127 | Args: 128 | name: the name of the action 129 | callback: the function to be called when the action is 130 | activated 131 | shortcuts: an optional list of accelerators 132 | """ 133 | action = Gio.SimpleAction.new(name, None) 134 | action.connect("activate", callback) 135 | self.add_action(action) 136 | if shortcuts: 137 | self.set_accels_for_action(f"app.{name}", shortcuts) 138 | 139 | 140 | def main(version): 141 | """The application's entry point.""" 142 | app = CavalierApplication(version) 143 | return app.run(sys.argv) 144 | -------------------------------------------------------------------------------- /data/icons/hicolor/scalable/apps/io.github.fsobolev.Cavalier.Devel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/draw_functions.py: -------------------------------------------------------------------------------- 1 | # draw_functions.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | import cairo 32 | import math 33 | 34 | def set_source(cr, height, colors, offset=0): 35 | if len(colors) > 1: 36 | pat = cairo.LinearGradient(0.0, height * offset, 0.0, \ 37 | height + height * offset) 38 | for i in range(len(colors)): 39 | (red, green, blue, alpha) = colors[i] 40 | pat.add_color_stop_rgba(1 / (len(colors) - 1) * i, \ 41 | red / 255, green / 255, blue / 255, alpha) 42 | cr.set_source(pat) 43 | else: 44 | (red, green, blue, alpha) = colors[0] 45 | cr.set_source_rgba(red / 255, green / 255, blue / 255, alpha) 46 | 47 | def draw_element(cr, x, y, width, height, radius): 48 | degrees = math.pi / 180.0 49 | cr.new_sub_path() 50 | cr.arc(x + width * radius / 100, y + height * radius / 100, \ 51 | radius * min(width, height) / 100, -180 * degrees, -90 * degrees) 52 | cr.arc(x + width - width * radius / 100, y + height * radius / 100, \ 53 | radius * min(width, height) / 100, -90 * degrees, 0) 54 | cr.arc(x + width - width * radius / 100, y + height - height * radius / 100, \ 55 | radius * min(width, height) / 100, 0, 90 * degrees) 56 | cr.arc(x + width * radius / 100, y + height - height * radius / 100, \ 57 | radius * min(width, height) / 100, 90 * degrees, -180 * degrees) 58 | cr.close_path() 59 | 60 | def wave(sample, cr, width, height, colors, fill, thickness): 61 | set_source(cr, height, colors) 62 | ls = len(sample) 63 | cr.move_to(0, (1.0 - sample[0]) * height) 64 | for i in range(ls - 1): 65 | height_diff = (sample[i] - sample[i+1]) 66 | cr.rel_curve_to(width / (ls - 1) * 0.5, 0.0, \ 67 | width / (ls - 1) * 0.5, height_diff * height, \ 68 | width / (ls - 1), height_diff * height) 69 | if fill: 70 | cr.line_to(width, height) 71 | cr.line_to(0, height) 72 | cr.fill() 73 | else: 74 | cr.set_line_width(thickness) 75 | cr.stroke() 76 | 77 | def levels(sample, cr, width, height, colors, offset, radius, fill, thickness): 78 | set_source(cr, height, colors) 79 | ls = len(sample) 80 | step = width / ls 81 | offset_px = step * offset / 100 82 | if fill: 83 | thickness = 0 84 | else: 85 | thickness = min(thickness, \ 86 | (step - offset_px * 2) / 2, 87 | (height / 10 - offset_px) / 2) 88 | cr.set_line_width(thickness) 89 | for i in range(ls): 90 | q = int(round(sample[i], 1) * 10) 91 | for r in range(q): 92 | draw_element(cr, step * i + offset_px + thickness / 2, \ 93 | height - (height / 10 * (r + 1)) + offset_px / 2 + thickness / 2, \ 94 | max(step - offset_px * 2 - thickness, 1), \ 95 | max(height / 10 - offset_px - thickness, 1), radius) 96 | cr.fill() if fill else cr.stroke() 97 | 98 | def particles(sample, cr, width, height, colors, offset, radius, fill, thickness): 99 | set_source(cr, height, colors) 100 | ls = len(sample) 101 | step = width / ls 102 | offset_px = step * offset / 100 103 | if fill: 104 | thickness = 0 105 | else: 106 | thickness = min(thickness, \ 107 | (step - offset_px * 2) / 2, 108 | (height / 10) / 2) 109 | cr.set_line_width(thickness) 110 | for i in range(ls): 111 | draw_element(cr, step * i + offset_px + thickness / 2, \ 112 | height * 0.9 - height * 0.9 * sample[i] + thickness / 2, \ 113 | max(step - offset_px * 2 - thickness, 1), \ 114 | max(height / 10 - thickness, 1), radius) 115 | cr.fill() if fill else cr.stroke() 116 | 117 | def spine(sample, cr, width, height, colors, offset, radius, fill, thickness): 118 | ls = len(sample) 119 | cr.set_line_width(thickness) 120 | if height > width: 121 | step = height / ls 122 | for i in range(ls): 123 | set_source(cr, height, colors, sample[i] - (0.95 - i / ls)) 124 | offset_px = step * offset / 100 * sample[i] 125 | if fill: 126 | thickness = 0 127 | else: 128 | thickness = min(thickness, \ 129 | (step * sample[i] - offset_px * 2) / 2) 130 | cr.set_line_width(thickness) 131 | draw_element(cr, width / 2 - sample[i] * step / 2 + offset_px + thickness / 2, \ 132 | step * i + step / 2 - sample[i] * step / 2 + offset_px + thickness / 2, \ 133 | step * sample[i] - offset_px * 2 - thickness, \ 134 | step * sample[i] - offset_px * 2 - thickness, radius) 135 | cr.fill() if fill else cr.stroke() 136 | else: 137 | step = width / ls 138 | for i in range(ls): 139 | set_source(cr, height, colors, sample[i] - 0.45) 140 | offset_px = step * offset / 100 * sample[i] 141 | if not fill: 142 | offset_px += thickness / 2 143 | draw_element(cr, \ 144 | step * i + step / 2 - sample[i] * step / 2 + offset_px, \ 145 | height / 2 - sample[i] * step / 2 + offset_px, \ 146 | step * sample[i] - offset_px * 2, \ 147 | step * sample[i] - offset_px * 2, radius) 148 | cr.fill() if fill else cr.stroke() 149 | 150 | def bars(sample, cr, width, height, colors, offset, fill, thickness): 151 | set_source(cr, height, colors) 152 | ls = len(sample) 153 | step = width / ls 154 | offset_px = step * offset / 100 155 | if fill: 156 | thickness = 0 157 | else: 158 | thickness = min(thickness, (step - offset_px * 2) / 2) 159 | cr.set_line_width(thickness) 160 | for i in range(ls): 161 | cr.rectangle(step * i + offset_px + thickness / 2, \ 162 | height - height * sample[i] + thickness / 2, \ 163 | max(step - offset_px * 2 - thickness, 1), height * sample[i] - thickness) 164 | cr.fill() if fill else cr.stroke() 165 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | # Visual Studio 2015/2017 cache/options directory 29 | .vs/ 30 | .vscode/ 31 | # Uncomment if you have tasks that create the project's static files in wwwroot 32 | #wwwroot/ 33 | 34 | # Visual Studio 2017 auto generated files 35 | Generated\ Files/ 36 | 37 | # MSTest test Results 38 | [Tt]est[Rr]esult*/ 39 | [Bb]uild[Ll]og.* 40 | 41 | # NUNIT 42 | *.VisualState.xml 43 | TestResult.xml 44 | 45 | # Build Results of an ATL Project 46 | [Dd]ebugPS/ 47 | [Rr]eleasePS/ 48 | dlldata.c 49 | 50 | # Benchmark Results 51 | BenchmarkDotNet.Artifacts/ 52 | 53 | # .NET Core 54 | project.lock.json 55 | project.fragment.lock.json 56 | artifacts/ 57 | 58 | # StyleCop 59 | StyleCopReport.xml 60 | 61 | # Files built by Visual Studio 62 | *_i.c 63 | *_p.c 64 | *_h.h 65 | *.ilk 66 | *.meta 67 | *.obj 68 | *.iobj 69 | *.pch 70 | *.pdb 71 | *.ipdb 72 | *.pgc 73 | *.pgd 74 | *.rsp 75 | *.sbr 76 | *.tlb 77 | *.tli 78 | *.tlh 79 | *.tmp 80 | *.tmp_proj 81 | *_wpftmp.csproj 82 | *.log 83 | *.vspscc 84 | *.vssscc 85 | .builds 86 | *.pidb 87 | *.svclog 88 | *.scc 89 | 90 | # Chutzpah Test files 91 | _Chutzpah* 92 | 93 | # Visual C++ cache files 94 | ipch/ 95 | *.aps 96 | *.ncb 97 | *.opendb 98 | *.opensdf 99 | *.sdf 100 | *.cachefile 101 | *.VC.db 102 | *.VC.VC.opendb 103 | 104 | # Visual Studio profiler 105 | *.psess 106 | *.vsp 107 | *.vspx 108 | *.sap 109 | 110 | # Visual Studio Trace Files 111 | *.e2e 112 | 113 | # TFS 2012 Local Workspace 114 | $tf/ 115 | 116 | # Guidance Automation Toolkit 117 | *.gpState 118 | 119 | # ReSharper is a .NET coding add-in 120 | _ReSharper*/ 121 | *.[Rr]e[Ss]harper 122 | *.DotSettings.user 123 | 124 | # JustCode is a .NET coding add-in 125 | .JustCode 126 | 127 | # TeamCity is a build add-in 128 | _TeamCity* 129 | 130 | # DotCover is a Code Coverage Tool 131 | *.dotCover 132 | 133 | # AxoCover is a Code Coverage Tool 134 | .axoCover/* 135 | !.axoCover/settings.json 136 | 137 | # Visual Studio code coverage results 138 | *.coverage 139 | *.coveragexml 140 | 141 | # NCrunch 142 | _NCrunch_* 143 | .*crunch*.local.xml 144 | nCrunchTemp_* 145 | 146 | # MightyMoose 147 | *.mm.* 148 | AutoTest.Net/ 149 | 150 | # Web workbench (sass) 151 | .sass-cache/ 152 | 153 | # Installshield output folder 154 | [Ee]xpress/ 155 | 156 | # DocProject is a documentation generator add-in 157 | DocProject/buildhelp/ 158 | DocProject/Help/*.HxT 159 | DocProject/Help/*.HxC 160 | DocProject/Help/*.hhc 161 | DocProject/Help/*.hhk 162 | DocProject/Help/*.hhp 163 | DocProject/Help/Html2 164 | DocProject/Help/html 165 | 166 | # Click-Once directory 167 | publish/ 168 | 169 | # Publish Web Output 170 | *.[Pp]ublish.xml 171 | *.azurePubxml 172 | # Note: Comment the next line if you want to checkin your web deploy settings, 173 | # but database connection strings (with potential passwords) will be unencrypted 174 | *.pubxml 175 | *.publishproj 176 | 177 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 178 | # checkin your Azure Web App publish settings, but sensitive information contained 179 | # in these scripts will be unencrypted 180 | PublishScripts/ 181 | 182 | # NuGet Packages 183 | *.nupkg 184 | # The packages folder can be ignored because of Package Restore 185 | **/[Pp]ackages/* 186 | # except build/, which is used as an MSBuild target. 187 | !**/[Pp]ackages/build/ 188 | # Uncomment if necessary however generally it will be regenerated when needed 189 | #!**/[Pp]ackages/repositories.config 190 | # NuGet v3's project.json files produces more ignorable files 191 | *.nuget.props 192 | *.nuget.targets 193 | 194 | # Microsoft Azure Build Output 195 | csx/ 196 | *.build.csdef 197 | 198 | # Microsoft Azure Emulator 199 | ecf/ 200 | rcf/ 201 | 202 | # Windows Store app package directories and files 203 | AppPackages/ 204 | BundleArtifacts/ 205 | Package.StoreAssociation.xml 206 | _pkginfo.txt 207 | *.appx 208 | 209 | # Visual Studio cache files 210 | # files ending in .cache can be ignored 211 | *.[Cc]ache 212 | # but keep track of directories ending in .cache 213 | !*.[Cc]ache/ 214 | 215 | # Others 216 | ClientBin/ 217 | ~$* 218 | *~ 219 | *.dbmdl 220 | *.dbproj.schemaview 221 | *.jfm 222 | *.pfx 223 | *.publishsettings 224 | orleans.codegen.cs 225 | 226 | # Including strong name files can present a security risk 227 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 228 | #*.snk 229 | 230 | # Since there are multiple workflows, uncomment next line to ignore bower_components 231 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 232 | #bower_components/ 233 | 234 | # RIA/Silverlight projects 235 | Generated_Code/ 236 | 237 | # Backup & report files from converting an old project file 238 | # to a newer Visual Studio version. Backup files are not needed, 239 | # because we have git ;-) 240 | _UpgradeReport_Files/ 241 | Backup*/ 242 | UpgradeLog*.XML 243 | UpgradeLog*.htm 244 | ServiceFabricBackup/ 245 | *.rptproj.bak 246 | 247 | # SQL Server files 248 | *.mdf 249 | *.ldf 250 | *.ndf 251 | 252 | # Business Intelligence projects 253 | *.rdl.data 254 | *.bim.layout 255 | *.bim_*.settings 256 | *.rptproj.rsuser 257 | 258 | # Microsoft Fakes 259 | FakesAssemblies/ 260 | 261 | # GhostDoc plugin setting file 262 | *.GhostDoc.xml 263 | 264 | # Node.js Tools for Visual Studio 265 | .ntvs_analysis.dat 266 | node_modules/ 267 | 268 | # Visual Studio 6 build log 269 | *.plg 270 | 271 | # Visual Studio 6 workspace options file 272 | *.opt 273 | 274 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 275 | *.vbw 276 | 277 | # Visual Studio LightSwitch build output 278 | **/*.HTMLClient/GeneratedArtifacts 279 | **/*.DesktopClient/GeneratedArtifacts 280 | **/*.DesktopClient/ModelManifest.xml 281 | **/*.Server/GeneratedArtifacts 282 | **/*.Server/ModelManifest.xml 283 | _Pvt_Extensions 284 | 285 | # Paket dependency manager 286 | .paket/paket.exe 287 | paket-files/ 288 | 289 | # FAKE - F# Make 290 | .fake/ 291 | 292 | # JetBrains Rider 293 | .idea/ 294 | *.sln.iml 295 | 296 | # CodeRush personal settings 297 | .cr/personal 298 | 299 | # Python Tools for Visual Studio (PTVS) 300 | __pycache__/ 301 | *.pyc 302 | 303 | # Cake - Uncomment if you are using it 304 | # tools/** 305 | # !tools/packages.config 306 | 307 | # Tabs Studio 308 | *.tss 309 | 310 | # Telerik's JustMock configuration file 311 | *.jmconfig 312 | 313 | # BizTalk build output 314 | *.btp.cs 315 | *.btm.cs 316 | *.odx.cs 317 | *.xsd.cs 318 | 319 | # OpenCover UI analysis results 320 | OpenCover/ 321 | 322 | # Azure Stream Analytics local run output 323 | ASALocalRun/ 324 | 325 | # MSBuild Binary and Structured Log 326 | *.binlog 327 | 328 | # NVidia Nsight GPU debugger configuration file 329 | *.nvuser 330 | 331 | # MFractors (Xamarin productivity tool) working folder 332 | .mfractor/ 333 | 334 | # Local History for Visual Studio 335 | .localhistory/ 336 | 337 | #Intellij 338 | .idea/ 339 | 340 | #Resources 341 | *.Designer.cs 342 | 343 | # Flatpak Builder 344 | .flatpak-builder/ 345 | .flatpak/ -------------------------------------------------------------------------------- /src/shortcuts_dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | true 6 | true 7 | false 8 | 9 | 10 | 11 | 12 | Cavalier 13 | 14 | 15 | Change Drawing Mode 16 | D <Shift>D 17 | 18 | 19 | 20 | 21 | Change Drawing Area Margin 22 | N <Shift>N 23 | 24 | 25 | 26 | 27 | Change Offset Between Items 28 | O <Shift>O 29 | 30 | 31 | 32 | 33 | Change Roundness of Items 34 | R <Shift>R 35 | 36 | 37 | 38 | 39 | Toggle Filling 40 | F 41 | 42 | 43 | 44 | 45 | Toggle Sharp Corners 46 | S 47 | 48 | 49 | 50 | 51 | Toggle Window Controls 52 | H 53 | 54 | 55 | 56 | 57 | Toggle Autohide Headerbar 58 | A 59 | 60 | 61 | 62 | 63 | 64 | 65 | CAVA 66 | 67 | 68 | Change Number of Bars 69 | B <Shift>B 70 | 71 | 72 | 73 | 74 | Toggle Channels 75 | C 76 | 77 | 78 | 79 | 80 | Toggle Reverse Order 81 | E 82 | 83 | 84 | 85 | 86 | 87 | 88 | Colors 89 | 90 | 91 | Change Colors Profile 92 | P <Shift>P 93 | 94 | 95 | 96 | 97 | Toggle Widgets Style 98 | W 99 | 100 | 101 | 102 | 103 | 104 | 105 | Window 106 | 107 | 108 | Open Menu 109 | F10 110 | 111 | 112 | 113 | 114 | Toggle Fullscreen 115 | F11 116 | 117 | 118 | 119 | 120 | Preferences 121 | <Ctrl>comma 122 | 123 | 124 | 125 | 126 | Show Shortcuts 127 | <Ctrl>question 128 | 129 | 130 | 131 | 132 | Close Active Window 133 | <Ctrl>W 134 | 135 | 136 | 137 | 138 | Quit 139 | <Ctrl>Q 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /src/window.py: -------------------------------------------------------------------------------- 1 | # window.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT 30 | 31 | from gi.repository import Adw, Gtk, Gio, GObject 32 | 33 | from cavalier.settings import CavalierSettings 34 | from cavalier.drawing_area import CavalierDrawingArea 35 | from cavalier.shortcuts import add_shortcuts 36 | 37 | 38 | class CavalierWindow(Adw.ApplicationWindow): 39 | __gtype_name__ = 'CavalierWindow' 40 | 41 | def __init__(self, **kwargs): 42 | super().__init__(**kwargs) 43 | 44 | self.settings = CavalierSettings.new(self.on_settings_changed) 45 | self.cava_sample = [] 46 | 47 | self.build_ui() 48 | add_shortcuts(self, self.settings) 49 | self.connect('close-request', self.on_close_request) 50 | self.connect('notify::is-active', self.on_active_state_changed) 51 | 52 | def build_ui(self): 53 | self.set_title('Cavalier') 54 | self.set_size_request(170, 170) 55 | (width, height) = self.settings['size'] 56 | self.set_default_size(width, height) 57 | if self.settings['maximized']: 58 | self.maximize() 59 | 60 | self.set_name('cavalier-window') 61 | self.toggle_sharp_corners() 62 | self.set_style() 63 | self.css_provider = Gtk.CssProvider.new() 64 | self.apply_colors() 65 | 66 | self.overlay = Gtk.Overlay.new() 67 | self.set_content(self.overlay) 68 | 69 | self.main_box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0) 70 | self.main_box.set_hexpand(True) 71 | self.main_box.set_vexpand(True) 72 | self.overlay.add_overlay(self.main_box) 73 | 74 | self.header = Adw.HeaderBar.new() 75 | self.header.add_css_class('flat') 76 | self.header.set_show_start_title_buttons( \ 77 | self.settings['window-controls']) 78 | self.header.set_show_end_title_buttons(self.settings['window-controls']) 79 | self.header.set_title_widget(Gtk.Label.new('')) 80 | self.main_box.append(self.header) 81 | 82 | self.handle = Gtk.WindowHandle.new() 83 | self.handle.set_hexpand(True) 84 | self.handle.set_vexpand(True) 85 | self.main_box.append(self.handle) 86 | 87 | self.bin_spinner = Adw.Bin.new() 88 | self.bin_spinner.set_hexpand(True) 89 | self.bin_spinner.set_vexpand(True) 90 | self.handle.set_child(self.bin_spinner) 91 | 92 | self.spinner = Gtk.Spinner.new() 93 | self.spinner.set_spinning(True) 94 | self.spinner.set_size_request(50, -1) 95 | self.spinner.set_halign(Gtk.Align.CENTER) 96 | self.spinner.set_margin_bottom(46) # headerbar height 97 | self.bin_spinner.set_child(self.spinner) 98 | 99 | self.drawing_area = CavalierDrawingArea.new() 100 | self.drawing_area.spinner = self.spinner 101 | self.drawing_area.run() 102 | self.overlay.set_child(self.drawing_area) 103 | 104 | self.menu_button = Gtk.MenuButton.new() 105 | self.menu_button.set_valign(Gtk.Align.START) 106 | self.menu_button.set_icon_name('open-menu-symbolic') 107 | self.header.pack_start(self.menu_button) 108 | 109 | self.menu = Gio.Menu.new() 110 | self.menu.append(_('Preferences'), 'app.preferences') 111 | self.menu.append(_('Keyboard Shortcuts'), 'app.shortcuts') 112 | self.menu.append(_('About'), 'app.about') 113 | self.menu.append(_('Quit'), 'app.quit') 114 | self.menu_button.set_menu_model(self.menu) 115 | 116 | def set_style(self): 117 | if self.settings['widgets-style'] == 'light': 118 | Adw.StyleManager.get_default().set_color_scheme(Adw.ColorScheme.FORCE_LIGHT) 119 | else: 120 | Adw.StyleManager.get_default().set_color_scheme(Adw.ColorScheme.FORCE_DARK) 121 | 122 | def toggle_sharp_corners(self): 123 | if self.settings['sharp-corners']: 124 | self.add_css_class('sharp-corners') 125 | else: 126 | self.remove_css_class('sharp-corners') 127 | 128 | def apply_colors(self): 129 | try: 130 | color_profile = self.settings['color-profiles'][ \ 131 | self.settings['active-color-profile']] 132 | colors = color_profile[2] 133 | except: 134 | colors = [] 135 | if len(colors) == 0: 136 | self.get_style_context().remove_provider(self.css_provider) 137 | elif len(colors) == 1: 138 | self.css_data = '''#cavalier-window { 139 | background-color: rgba(%d, %d, %d, %f); 140 | }''' % colors[0] 141 | self.css_provider.load_from_data(self.css_data, -1) 142 | self.get_style_context().add_provider(self.css_provider, \ 143 | Gtk.STYLE_PROVIDER_PRIORITY_USER) 144 | elif len(colors) > 1: 145 | self.css_data = '''#cavalier-window { 146 | background: linear-gradient(to bottom, ''' 147 | for c in colors: 148 | self.css_data += 'rgba(%d, %d, %d, %f), ' % c 149 | self.css_data = self.css_data[:-2] 150 | self.css_data += ');}' 151 | self.css_provider.load_from_data(self.css_data, -1) 152 | self.get_style_context().add_provider(self.css_provider, \ 153 | Gtk.STYLE_PROVIDER_PRIORITY_USER) 154 | 155 | def on_settings_changed(self): 156 | if self.settings['borderless-window']: 157 | self.add_css_class('borderless-window') 158 | elif self.has_css_class('borderless-window'): 159 | self.remove_css_class('borderless-window') 160 | self.header.set_show_start_title_buttons( \ 161 | self.settings['window-controls']) 162 | self.header.set_show_end_title_buttons(self.settings['window-controls']) 163 | self.toggle_sharp_corners() 164 | self.set_style() 165 | self.apply_colors() 166 | try: 167 | self.on_active_state_changed() 168 | except: 169 | pass 170 | 171 | def on_close_request(self, obj): 172 | (width, height) = self.get_default_size() 173 | self.settings['size'] = (width, height) 174 | self.settings['maximized'] = self.is_maximized() 175 | if hasattr(self.get_application(), 'pref_win'): 176 | self.get_application().pref_win.close() 177 | 178 | def hide_header(self): 179 | if not self.is_active(): 180 | self.header.set_show_start_title_buttons(False) 181 | self.header.set_show_end_title_buttons(False) 182 | self.menu_button.set_visible(False) 183 | return False # we don't need to restart the function 184 | 185 | def on_active_state_changed(self, *args): 186 | if self.settings['autohide-header'] and not self.is_active(): 187 | # The window becomes inactive for a moment when 188 | # the menu button is pressed, making it impossible 189 | # to open the menu, so the delay is required 190 | GObject.timeout_add(100, self.hide_header) 191 | else: 192 | self.header.set_show_start_title_buttons( \ 193 | self.settings['window-controls']) 194 | self.header.set_show_end_title_buttons( \ 195 | self.settings['window-controls']) 196 | self.menu_button.set_visible(True) 197 | 198 | -------------------------------------------------------------------------------- /src/shortcuts.py: -------------------------------------------------------------------------------- 1 | # shortcuts.py 2 | # 3 | # Copyright 2022 Fyodor Sobolev 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining 6 | # a copy of this software and associated documentation files (the 7 | # "Software"), to deal in the Software without restriction, including 8 | # without limitation the rights to use, copy, modify, merge, publish, 9 | # distribute, sublicense, and/or sell copies of the Software, and to 10 | # permit persons to whom the Software is furnished to do so, subject to 11 | # the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be 14 | # included in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | # NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | # 24 | # Except as contained in this notice, the name(s) of the above copyright 25 | # holders shall not be used in advertising or otherwise to promote the sale, 26 | # use or other dealings in this Software without prior written 27 | # authorization. 28 | # 29 | # SPDX-License-Identifier: MIT) 30 | 31 | import gi 32 | gi.require_version('Gtk', '4.0') 33 | from gi.repository import Gio, Gtk 34 | 35 | def add_shortcuts(widget, settings): 36 | action_map = Gio.SimpleActionGroup.new() 37 | widget.insert_action_group("cavalier", action_map) 38 | shortcut_controller = Gtk.ShortcutController.new() 39 | shortcut_controller.set_scope(Gtk.ShortcutScope.MANAGED) 40 | widget.add_controller(shortcut_controller) 41 | 42 | act_next_mode = Gio.SimpleAction.new("next-mode", None) 43 | act_next_mode.connect('activate', change_mode, settings, 1) 44 | action_map.add_action(act_next_mode) 45 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 46 | Gtk.ShortcutTrigger.parse_string("D"), \ 47 | Gtk.NamedAction.new("cavalier.next-mode"))) 48 | act_prev_mode = Gio.SimpleAction.new("prev-mode", None) 49 | act_prev_mode.connect('activate', change_mode, settings, -1) 50 | action_map.add_action(act_prev_mode) 51 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 52 | Gtk.ShortcutTrigger.parse_string("D"), \ 53 | Gtk.NamedAction.new("cavalier.prev-mode"))) 54 | 55 | act_inc_margin = Gio.SimpleAction.new("increase-margin", None) 56 | act_inc_margin.connect('activate', change_setting, settings, 'margin', 1) 57 | action_map.add_action(act_inc_margin) 58 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 59 | Gtk.ShortcutTrigger.parse_string("N"), \ 60 | Gtk.NamedAction.new("cavalier.increase-margin"))) 61 | act_dec_margin = Gio.SimpleAction.new("decrease-margin", None) 62 | act_dec_margin.connect('activate', change_setting, settings, 'margin', -1) 63 | action_map.add_action(act_dec_margin) 64 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 65 | Gtk.ShortcutTrigger.parse_string("N"), \ 66 | Gtk.NamedAction.new("cavalier.decrease-margin"))) 67 | 68 | act_inc_offset = Gio.SimpleAction.new("increase-offset", None) 69 | act_inc_offset.connect('activate', change_setting, settings, \ 70 | 'items-offset', 1) 71 | action_map.add_action(act_inc_offset) 72 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 73 | Gtk.ShortcutTrigger.parse_string("O"), \ 74 | Gtk.NamedAction.new("cavalier.increase-offset"))) 75 | act_dec_offset = Gio.SimpleAction.new("decrease-offset", None) 76 | act_dec_offset.connect('activate', change_setting, settings, \ 77 | 'items-offset', -1) 78 | action_map.add_action(act_dec_offset) 79 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 80 | Gtk.ShortcutTrigger.parse_string("O"), \ 81 | Gtk.NamedAction.new("cavalier.decrease-offset"))) 82 | 83 | act_inc_roundness = Gio.SimpleAction.new("increase-roundness", None) 84 | act_inc_roundness.connect('activate', change_setting, settings, \ 85 | 'items-roundness', 1) 86 | action_map.add_action(act_inc_roundness) 87 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 88 | Gtk.ShortcutTrigger.parse_string("R"), \ 89 | Gtk.NamedAction.new("cavalier.increase-roundness"))) 90 | act_dec_roundness = Gio.SimpleAction.new("decrease-roundness", None) 91 | act_dec_roundness.connect('activate', change_setting, settings, \ 92 | 'items-roundness', -1) 93 | action_map.add_action(act_dec_roundness) 94 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 95 | Gtk.ShortcutTrigger.parse_string("R"), \ 96 | Gtk.NamedAction.new("cavalier.decrease-roundness"))) 97 | 98 | act_inc_thickness = Gio.SimpleAction.new("increase-thickness", None) 99 | act_inc_thickness.connect('activate', change_setting, settings, \ 100 | 'line-thickness', 1) 101 | action_map.add_action(act_inc_thickness) 102 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 103 | Gtk.ShortcutTrigger.parse_string("T"), \ 104 | Gtk.NamedAction.new("cavalier.increase-thickness"))) 105 | act_dec_thickness = Gio.SimpleAction.new("decrease-thickness", None) 106 | act_dec_thickness.connect('activate', change_setting, settings, \ 107 | 'line-thickness', -1) 108 | action_map.add_action(act_dec_thickness) 109 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 110 | Gtk.ShortcutTrigger.parse_string("T"), \ 111 | Gtk.NamedAction.new("cavalier.decrease-thickness"))) 112 | 113 | act_toggle_fill = Gio.SimpleAction.new("toggle-fill", None) 114 | act_toggle_fill.connect('activate', toggle_setting, settings, 'fill') 115 | action_map.add_action(act_toggle_fill) 116 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 117 | Gtk.ShortcutTrigger.parse_string("F"), \ 118 | Gtk.NamedAction.new("cavalier.toggle-fill"))) 119 | 120 | act_toggle_corners = Gio.SimpleAction.new("toggle-corners", None) 121 | act_toggle_corners.connect('activate', toggle_setting, settings, \ 122 | 'sharp-corners') 123 | action_map.add_action(act_toggle_corners) 124 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 125 | Gtk.ShortcutTrigger.parse_string("S"), \ 126 | Gtk.NamedAction.new("cavalier.toggle-corners"))) 127 | 128 | act_toggle_controls = Gio.SimpleAction.new("toggle-controls", None) 129 | act_toggle_controls.connect('activate', toggle_setting, settings, \ 130 | 'window-controls') 131 | action_map.add_action(act_toggle_controls) 132 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 133 | Gtk.ShortcutTrigger.parse_string("H"), \ 134 | Gtk.NamedAction.new("cavalier.toggle-controls"))) 135 | 136 | act_toggle_autohide = Gio.SimpleAction.new("toggle-autohide", None) 137 | act_toggle_autohide.connect('activate', toggle_setting, settings, \ 138 | 'autohide-header') 139 | action_map.add_action(act_toggle_autohide) 140 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 141 | Gtk.ShortcutTrigger.parse_string("A"), \ 142 | Gtk.NamedAction.new("cavalier.toggle-autohide"))) 143 | 144 | act_inc_bars = Gio.SimpleAction.new("increase-bars", None) 145 | act_inc_bars.connect('activate', change_setting, settings, 'bars', 2) 146 | action_map.add_action(act_inc_bars) 147 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 148 | Gtk.ShortcutTrigger.parse_string("B"), \ 149 | Gtk.NamedAction.new("cavalier.increase-bars"))) 150 | act_dec_bars = Gio.SimpleAction.new("decrease-bars", None) 151 | act_dec_bars.connect('activate', change_setting, settings, 'bars', -2) 152 | action_map.add_action(act_dec_bars) 153 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 154 | Gtk.ShortcutTrigger.parse_string("B"), \ 155 | Gtk.NamedAction.new("cavalier.decrease-bars"))) 156 | 157 | act_toggle_channels = Gio.SimpleAction.new("toggle-channels", None) 158 | act_toggle_channels.connect('activate', change_channels, settings) 159 | action_map.add_action(act_toggle_channels) 160 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 161 | Gtk.ShortcutTrigger.parse_string("C"), \ 162 | Gtk.NamedAction.new("cavalier.toggle-channels"))) 163 | 164 | act_toggle_reverse = Gio.SimpleAction.new("toggle-reverse", None) 165 | act_toggle_reverse.connect('activate', toggle_setting, settings, \ 166 | 'reverse-order') 167 | action_map.add_action(act_toggle_reverse) 168 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 169 | Gtk.ShortcutTrigger.parse_string("E"), \ 170 | Gtk.NamedAction.new("cavalier.toggle-reverse"))) 171 | 172 | act_toggle_style = Gio.SimpleAction.new("toggle-style", None) 173 | act_toggle_style.connect('activate', change_widgets_style, settings) 174 | action_map.add_action(act_toggle_style) 175 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 176 | Gtk.ShortcutTrigger.parse_string("W"), \ 177 | Gtk.NamedAction.new("cavalier.toggle-style"))) 178 | 179 | act_next_profile = Gio.SimpleAction.new("next-profile", None) 180 | act_next_profile.connect('activate', change_color_profile, settings, 1) 181 | action_map.add_action(act_next_profile) 182 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 183 | Gtk.ShortcutTrigger.parse_string("P"), \ 184 | Gtk.NamedAction.new("cavalier.next-profile"))) 185 | act_prev_profile = Gio.SimpleAction.new("prev-profile", None) 186 | act_prev_profile.connect('activate', change_color_profile, settings, -1) 187 | action_map.add_action(act_prev_profile) 188 | shortcut_controller.add_shortcut(Gtk.Shortcut.new( \ 189 | Gtk.ShortcutTrigger.parse_string("P"), \ 190 | Gtk.NamedAction.new("cavalier.prev-profile"))) 191 | 192 | def change_mode(action, parameter, settings, diff): 193 | modes = settings.get_range('mode')[1] 194 | new_index = modes.index(settings['mode']) + diff 195 | if new_index > len(modes) - 1: 196 | new_index = 0 197 | elif new_index < 0: 198 | new_index = len(modes) - 1 199 | settings['mode'] = modes[new_index] 200 | 201 | def change_channels(action, parameter, settings): 202 | if settings['channels'] == 'mono': 203 | settings['channels'] = 'stereo' 204 | else: 205 | settings['channels'] = 'mono' 206 | 207 | def change_widgets_style(action, parameter, settings): 208 | if settings['widgets-style'] == 'light': 209 | settings['widgets-style'] = 'dark' 210 | else: 211 | settings['widgets-style'] = 'light' 212 | 213 | def change_color_profile(action, parameter, settings, diff): 214 | profiles = settings['color-profiles'] 215 | new_index = settings['active-color-profile'] + diff 216 | if new_index > len(profiles) - 1: 217 | new_index = 0 218 | elif new_index < 0: 219 | new_index = len(profiles) - 1 220 | settings['active-color-profile'] = new_index 221 | 222 | def change_setting(action, parameter, settings, key, diff): 223 | try: 224 | settings[key] += diff 225 | except: 226 | pass 227 | 228 | def toggle_setting(action, parameter, settings, key): 229 | settings[key] = not settings[key] 230 | -------------------------------------------------------------------------------- /po/cavalier.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) 2022 Fyodor Sobolev 3 | # This file is distributed under the same license as the cavalier package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: cavalier\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2023-01-29 12:46+0300\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: data/io.github.fsobolev.Cavalier.desktop.in:3 21 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:6 22 | msgid "Cavalier" 23 | msgstr "Cavalier" 24 | 25 | #: data/io.github.fsobolev.Cavalier.desktop.in:4 26 | msgid "Audio Visualizer" 27 | msgstr "" 28 | 29 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:7 30 | msgid "Audio visualizer based on CAVA." 31 | msgstr "" 32 | 33 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:9 34 | msgid "" 35 | "Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita " 36 | "interface." 37 | msgstr "" 38 | 39 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:11 40 | msgid "4 drawing modes!" 41 | msgstr "" 42 | 43 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:12 44 | msgid "" 45 | "Set single color or up to 10 colors gradient for background and foreground." 46 | msgstr "" 47 | 48 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:13 49 | msgid "Configure smoothing, noise reduction and a few other CAVA settings." 50 | msgstr "" 51 | 52 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:19 src/main.py:72 53 | #: src/main.py:74 54 | msgid "Fyodor Sobolev" 55 | msgstr "" 56 | 57 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:41 58 | msgid "Second release of Cavalier." 59 | msgstr "" 60 | 61 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:43 62 | msgid "New drawing mode — Particles!" 63 | msgstr "" 64 | 65 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:44 66 | msgid "" 67 | "Color profiles! Create as many as you want and change between them " 68 | "instantly. Unfortunately, this new feature required to change how the " 69 | "application saves colors, and because of this your previous colors settings " 70 | "will be lost after installing this update." 71 | msgstr "" 72 | 73 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:45 74 | msgid "Added keyboard shortcuts to change most of the settings on the fly." 75 | msgstr "" 76 | 77 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:46 78 | msgid "Added option to show/hide window controls." 79 | msgstr "" 80 | 81 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:47 82 | msgid "Added option to autohide headerbar when the main window is not focused." 83 | msgstr "" 84 | 85 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:48 86 | msgid "" 87 | "Added option to change roundness of items in \"levels\" and \"particles\" " 88 | "modes." 89 | msgstr "" 90 | 91 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:49 92 | msgid "Added option to reverse the order of bars." 93 | msgstr "" 94 | 95 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:50 96 | msgid "Import/Export Settings" 97 | msgstr "" 98 | 99 | #: data/io.github.fsobolev.Cavalier.gschema.xml:5 100 | msgid "Window size" 101 | msgstr "" 102 | 103 | #: data/io.github.fsobolev.Cavalier.gschema.xml:9 104 | msgid "Window maximized state" 105 | msgstr "" 106 | 107 | #: data/io.github.fsobolev.Cavalier.gschema.xml:10 108 | msgid "Whether main window is maximized or not" 109 | msgstr "" 110 | 111 | #: data/io.github.fsobolev.Cavalier.gschema.xml:14 112 | #: src/preferences_window.py:147 113 | msgid "Window controls" 114 | msgstr "" 115 | 116 | #: data/io.github.fsobolev.Cavalier.gschema.xml:15 117 | #: src/preferences_window.py:149 118 | msgid "Whether to show window control buttons." 119 | msgstr "" 120 | 121 | #: data/io.github.fsobolev.Cavalier.gschema.xml:19 122 | #: src/preferences_window.py:158 123 | msgid "Autohide headerbar" 124 | msgstr "" 125 | 126 | #: data/io.github.fsobolev.Cavalier.gschema.xml:20 127 | #: src/preferences_window.py:160 128 | msgid "Whether to hide headerbar when main window is not focused." 129 | msgstr "" 130 | 131 | #: data/io.github.fsobolev.Cavalier.gschema.xml:24 132 | msgid "Drawing mode" 133 | msgstr "" 134 | 135 | #: data/io.github.fsobolev.Cavalier.gschema.xml:25 136 | msgid "Defines what the visualizer looks like." 137 | msgstr "" 138 | 139 | #: data/io.github.fsobolev.Cavalier.gschema.xml:35 src/preferences_window.py:97 140 | msgid "Drawing area margin" 141 | msgstr "" 142 | 143 | #: data/io.github.fsobolev.Cavalier.gschema.xml:36 src/preferences_window.py:99 144 | msgid "Size of gaps around drawing area (in pixels)." 145 | msgstr "" 146 | 147 | #: data/io.github.fsobolev.Cavalier.gschema.xml:41 148 | #: src/preferences_window.py:109 149 | msgid "Offset between items" 150 | msgstr "" 151 | 152 | #: data/io.github.fsobolev.Cavalier.gschema.xml:42 153 | #: src/preferences_window.py:111 154 | msgid "" 155 | "The size of spaces between elements in \"levels\", \"particles\" and \"bars" 156 | "\" modes (in percent)." 157 | msgstr "" 158 | 159 | #: data/io.github.fsobolev.Cavalier.gschema.xml:47 160 | #: src/preferences_window.py:121 161 | msgid "Roundness of items" 162 | msgstr "" 163 | 164 | #: data/io.github.fsobolev.Cavalier.gschema.xml:48 165 | msgid "This setting only affects \"levels\" and \"particles\" modes." 166 | msgstr "" 167 | 168 | #: data/io.github.fsobolev.Cavalier.gschema.xml:53 169 | msgid "Number of bars" 170 | msgstr "" 171 | 172 | #: data/io.github.fsobolev.Cavalier.gschema.xml:54 173 | msgid "Number of bars in CAVA config" 174 | msgstr "" 175 | 176 | #: data/io.github.fsobolev.Cavalier.gschema.xml:59 177 | #: src/preferences_window.py:204 178 | msgid "Automatic sensitivity" 179 | msgstr "" 180 | 181 | #: data/io.github.fsobolev.Cavalier.gschema.xml:60 182 | #: src/preferences_window.py:206 183 | msgid "Attempt to decrease sensitivity if the bars peak." 184 | msgstr "" 185 | 186 | #: data/io.github.fsobolev.Cavalier.gschema.xml:64 187 | #: src/preferences_window.py:214 188 | msgid "Sensitivity" 189 | msgstr "" 190 | 191 | #: data/io.github.fsobolev.Cavalier.gschema.xml:65 192 | #: src/preferences_window.py:216 193 | msgid "" 194 | "Manual sensitivity. If automatic sensitivity is enabled, this will only be " 195 | "the initial value." 196 | msgstr "" 197 | 198 | #: data/io.github.fsobolev.Cavalier.gschema.xml:70 199 | #: src/preferences_window.py:225 200 | msgid "Channels" 201 | msgstr "" 202 | 203 | #: data/io.github.fsobolev.Cavalier.gschema.xml:71 204 | msgid "Mono or stereo" 205 | msgstr "" 206 | 207 | #: data/io.github.fsobolev.Cavalier.gschema.xml:79 208 | #: src/preferences_window.py:237 209 | msgid "Smoothing" 210 | msgstr "" 211 | 212 | #: data/io.github.fsobolev.Cavalier.gschema.xml:87 213 | msgid "Noise reduction" 214 | msgstr "" 215 | 216 | #: data/io.github.fsobolev.Cavalier.gschema.xml:88 217 | msgid "" 218 | "This factor adjusts the integral and gravity filters to keep the signal " 219 | "smooth. 1 will be very slow and smooth, 0 will be fast but noisy." 220 | msgstr "" 221 | 222 | #: data/io.github.fsobolev.Cavalier.gschema.xml:93 223 | #: src/preferences_window.py:255 224 | msgid "Reverse order" 225 | msgstr "" 226 | 227 | #: data/io.github.fsobolev.Cavalier.gschema.xml:97 228 | #: src/preferences_window.py:272 229 | msgid "Widgets style" 230 | msgstr "" 231 | 232 | #: data/io.github.fsobolev.Cavalier.gschema.xml:98 233 | #: src/preferences_window.py:273 234 | msgid "Style used by Adwaita widgets." 235 | msgstr "" 236 | 237 | #: data/io.github.fsobolev.Cavalier.gschema.xml:106 238 | #: src/preferences_window.py:136 239 | msgid "Sharp corners" 240 | msgstr "" 241 | 242 | #: data/io.github.fsobolev.Cavalier.gschema.xml:107 243 | #: src/preferences_window.py:138 244 | msgid "Whether the main window corners should be sharp." 245 | msgstr "" 246 | 247 | #: data/io.github.fsobolev.Cavalier.gschema.xml:111 248 | msgid "Color Profiles" 249 | msgstr "" 250 | 251 | #: data/io.github.fsobolev.Cavalier.gschema.xml:115 252 | msgid "Index of active color profile" 253 | msgstr "" 254 | 255 | #: src/preferences_window.py:59 256 | msgid "Drawing Mode" 257 | msgstr "" 258 | 259 | #: src/preferences_window.py:63 260 | msgid "Wave" 261 | msgstr "" 262 | 263 | #: src/preferences_window.py:70 264 | msgid "Levels" 265 | msgstr "" 266 | 267 | #: src/preferences_window.py:78 268 | msgid "Particles" 269 | msgstr "" 270 | 271 | #: src/preferences_window.py:86 src/preferences_window.py:193 272 | msgid "Bars" 273 | msgstr "" 274 | 275 | #: src/preferences_window.py:123 276 | msgid "" 277 | "This setting only affects \"levels\" and \"particles\" modes.\n" 278 | "0 - square, 1 - round" 279 | msgstr "" 280 | 281 | #: src/preferences_window.py:173 282 | msgid "Import" 283 | msgstr "" 284 | 285 | #: src/preferences_window.py:178 286 | msgid "Export" 287 | msgstr "" 288 | 289 | #: src/preferences_window.py:231 290 | msgid "Mono" 291 | msgstr "" 292 | 293 | #: src/preferences_window.py:233 294 | msgid "Stereo" 295 | msgstr "" 296 | 297 | #: src/preferences_window.py:239 298 | msgid "Off" 299 | msgstr "" 300 | 301 | #: src/preferences_window.py:239 302 | msgid "Monstercat" 303 | msgstr "" 304 | 305 | #: src/preferences_window.py:242 306 | msgid "Noise Reduction" 307 | msgstr "" 308 | 309 | #: src/preferences_window.py:243 310 | msgid "0 - noisy, 1 - smooth" 311 | msgstr "" 312 | 313 | #: src/preferences_window.py:264 src/preferences_window.py:285 314 | #: src/shortcuts_dialog.ui:82 315 | msgid "Colors" 316 | msgstr "" 317 | 318 | #: src/preferences_window.py:278 319 | msgid "Light" 320 | msgstr "" 321 | 322 | #: src/preferences_window.py:280 323 | msgid "Dark" 324 | msgstr "" 325 | 326 | #: src/preferences_window.py:291 327 | msgid "Profile:" 328 | msgstr "" 329 | 330 | #: src/preferences_window.py:299 331 | msgid "Add new profile" 332 | msgstr "" 333 | 334 | #: src/preferences_window.py:310 335 | msgid "Type a name for a new profile" 336 | msgstr "" 337 | 338 | #: src/preferences_window.py:312 src/preferences_window.py:508 339 | #: src/preferences_window.py:547 340 | msgid "Add" 341 | msgstr "" 342 | 343 | #: src/preferences_window.py:322 344 | msgid "Remove profile" 345 | msgstr "" 346 | 347 | #: src/preferences_window.py:329 348 | msgid "Are you sure you want to remove this profile?" 349 | msgstr "" 350 | 351 | #: src/preferences_window.py:336 352 | msgid "Remove" 353 | msgstr "" 354 | 355 | #: src/preferences_window.py:343 src/preferences_window.py:695 356 | #: src/preferences_window.py:714 357 | msgid "Cancel" 358 | msgstr "" 359 | 360 | #: src/preferences_window.py:353 361 | msgid "Foreground" 362 | msgstr "" 363 | 364 | #: src/preferences_window.py:358 365 | msgid "Background" 366 | msgstr "" 367 | 368 | #: src/preferences_window.py:489 src/preferences_window.py:512 369 | #: src/preferences_window.py:530 src/preferences_window.py:551 370 | msgid "Select color" 371 | msgstr "" 372 | 373 | #: src/preferences_window.py:496 src/preferences_window.py:537 374 | msgid "Remove color" 375 | msgstr "" 376 | 377 | #: src/preferences_window.py:517 src/preferences_window.py:556 378 | msgid "Add color" 379 | msgstr "" 380 | 381 | #: src/preferences_window.py:584 382 | msgid "This name is already in use." 383 | msgstr "" 384 | 385 | #: src/preferences_window.py:694 386 | msgid "Import Settings" 387 | msgstr "" 388 | 389 | #: src/preferences_window.py:695 390 | msgid "Open" 391 | msgstr "" 392 | 393 | #: src/preferences_window.py:698 src/preferences_window.py:717 394 | msgid "Cavalier Settings File (*.cavalier)" 395 | msgstr "" 396 | 397 | #: src/preferences_window.py:702 398 | msgid "All Files" 399 | msgstr "" 400 | 401 | #: src/preferences_window.py:713 402 | msgid "Export Settings" 403 | msgstr "" 404 | 405 | #: src/preferences_window.py:714 406 | msgid "Save" 407 | msgstr "" 408 | 409 | #: src/window.py:109 410 | msgid "Preferences" 411 | msgstr "" 412 | 413 | #: src/window.py:110 414 | msgid "Keyboard Shortcuts" 415 | msgstr "" 416 | 417 | #: src/window.py:111 418 | msgid "About" 419 | msgstr "" 420 | 421 | #: src/window.py:112 422 | msgid "Quit" 423 | msgstr "" 424 | 425 | #: src/shortcuts_dialog.ui:15 426 | msgid "Change Drawing Mode" 427 | msgstr "" 428 | 429 | #: src/shortcuts_dialog.ui:21 430 | msgid "Change Drawing Area Margin" 431 | msgstr "" 432 | 433 | #: src/shortcuts_dialog.ui:27 434 | msgid "Change Offset Between Items" 435 | msgstr "" 436 | 437 | #: src/shortcuts_dialog.ui:33 438 | msgid "Change Roundness of Items" 439 | msgstr "" 440 | 441 | #: src/shortcuts_dialog.ui:39 442 | msgid "Toggle Sharp Corners" 443 | msgstr "" 444 | 445 | #: src/shortcuts_dialog.ui:45 446 | msgid "Toggle Window Controls" 447 | msgstr "" 448 | 449 | #: src/shortcuts_dialog.ui:51 450 | msgid "Toggle Autohide Headerbar" 451 | msgstr "" 452 | 453 | #: src/shortcuts_dialog.ui:62 454 | msgid "Change Number of Bars" 455 | msgstr "" 456 | 457 | #: src/shortcuts_dialog.ui:68 458 | msgid "Toggle Channels" 459 | msgstr "" 460 | 461 | #: src/shortcuts_dialog.ui:74 462 | msgid "Toggle Reverse Order" 463 | msgstr "" 464 | 465 | #: src/shortcuts_dialog.ui:85 466 | msgid "Change Colors Profile" 467 | msgstr "" 468 | 469 | #: src/shortcuts_dialog.ui:91 470 | msgid "Toggle Widgets Style" 471 | msgstr "" 472 | -------------------------------------------------------------------------------- /po/pt_BR.po: -------------------------------------------------------------------------------- 1 | # Brazilian Portuguese translation for Cavalier 2 | # Copyright (C) 2022 Fyodor Sobolev 3 | # This file is distributed under the same license as the cavalier package. 4 | # Wagner Costa Gottschald , 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: cavalier\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-01-29 12:46+0300\n" 11 | "PO-Revision-Date: 2023-03-27 20:28-0300\n" 12 | "Last-Translator: Wagner Costa Gottschald \n" 13 | "Language-Team: Brazilian Portuguese \n" 14 | "Language: pt_BR\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n > 1)\n" 19 | "X-Generator: Gtranslator 42.0\n" 20 | 21 | #: data/io.github.fsobolev.Cavalier.desktop.in:3 22 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:6 23 | msgid "Cavalier" 24 | msgstr "Cavalier" 25 | 26 | #: data/io.github.fsobolev.Cavalier.desktop.in:4 27 | msgid "Audio Visualizer" 28 | msgstr "Visualizador de Áudio" 29 | 30 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:7 31 | msgid "Audio visualizer based on CAVA." 32 | msgstr "Visualizador de Áudio baseado no CAVA." 33 | 34 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:9 35 | msgid "" 36 | "Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita " 37 | "interface." 38 | msgstr "" 39 | "Cavalier é um Visualizador de áudio baseado no CAVA com LibAdwaita " 40 | "customizável." 41 | 42 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:11 43 | msgid "4 drawing modes!" 44 | msgstr "4 desenhos de ondas!" 45 | 46 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:12 47 | msgid "" 48 | "Set single color or up to 10 colors gradient for background and foreground." 49 | msgstr "" 50 | 51 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:13 52 | msgid "Configure smoothing, noise reduction and a few other CAVA settings." 53 | msgstr "" 54 | 55 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:19 src/main.py:72 56 | #: src/main.py:74 57 | msgid "Fyodor Sobolev" 58 | msgstr "" 59 | 60 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:41 61 | msgid "Second release of Cavalier." 62 | msgstr "" 63 | 64 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:43 65 | msgid "New drawing mode — Particles!" 66 | msgstr "" 67 | 68 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:44 69 | msgid "" 70 | "Color profiles! Create as many as you want and change between them " 71 | "instantly. Unfortunately, this new feature required to change how the " 72 | "application saves colors, and because of this your previous colors settings " 73 | "will be lost after installing this update." 74 | msgstr "" 75 | 76 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:45 77 | msgid "Added keyboard shortcuts to change most of the settings on the fly." 78 | msgstr "" 79 | 80 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:46 81 | msgid "Added option to show/hide window controls." 82 | msgstr "" 83 | 84 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:47 85 | msgid "Added option to autohide headerbar when the main window is not focused." 86 | msgstr "" 87 | 88 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:48 89 | msgid "" 90 | "Added option to change roundness of items in \"levels\" and \"particles\" " 91 | "modes." 92 | msgstr "" 93 | 94 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:49 95 | msgid "Added option to reverse the order of bars." 96 | msgstr "" 97 | 98 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:50 99 | msgid "Import/Export Settings" 100 | msgstr "" 101 | 102 | #: data/io.github.fsobolev.Cavalier.gschema.xml:5 103 | msgid "Window size" 104 | msgstr "Tamanho da janela" 105 | 106 | #: data/io.github.fsobolev.Cavalier.gschema.xml:9 107 | msgid "Window maximized state" 108 | msgstr "Janela no estado maximizado" 109 | 110 | #: data/io.github.fsobolev.Cavalier.gschema.xml:10 111 | msgid "Whether main window is maximized or not" 112 | msgstr "" 113 | 114 | #: data/io.github.fsobolev.Cavalier.gschema.xml:14 115 | #: src/preferences_window.py:147 116 | msgid "Window controls" 117 | msgstr "Controle de janela" 118 | 119 | #: data/io.github.fsobolev.Cavalier.gschema.xml:15 120 | #: src/preferences_window.py:149 121 | msgid "Whether to show window control buttons." 122 | msgstr "" 123 | 124 | #: data/io.github.fsobolev.Cavalier.gschema.xml:19 125 | #: src/preferences_window.py:158 126 | msgid "Autohide headerbar" 127 | msgstr "" 128 | 129 | #: data/io.github.fsobolev.Cavalier.gschema.xml:20 130 | #: src/preferences_window.py:160 131 | msgid "Whether to hide headerbar when main window is not focused." 132 | msgstr "" 133 | 134 | #: data/io.github.fsobolev.Cavalier.gschema.xml:24 135 | msgid "Drawing mode" 136 | msgstr "Ondas" 137 | 138 | #: data/io.github.fsobolev.Cavalier.gschema.xml:25 139 | msgid "Defines what the visualizer looks like." 140 | msgstr "" 141 | 142 | #: data/io.github.fsobolev.Cavalier.gschema.xml:35 src/preferences_window.py:97 143 | msgid "Drawing area margin" 144 | msgstr "Marge da onda" 145 | 146 | #: data/io.github.fsobolev.Cavalier.gschema.xml:36 src/preferences_window.py:99 147 | msgid "Size of gaps around drawing area (in pixels)." 148 | msgstr "" 149 | 150 | #: data/io.github.fsobolev.Cavalier.gschema.xml:41 151 | #: src/preferences_window.py:109 152 | msgid "Offset between items" 153 | msgstr "" 154 | 155 | #: data/io.github.fsobolev.Cavalier.gschema.xml:42 156 | #: src/preferences_window.py:111 157 | msgid "" 158 | "The size of spaces between elements in \"levels\", \"particles\" and \"bars" 159 | "\" modes (in percent)." 160 | msgstr "" 161 | 162 | #: data/io.github.fsobolev.Cavalier.gschema.xml:47 163 | #: src/preferences_window.py:121 164 | msgid "Roundness of items" 165 | msgstr "" 166 | 167 | #: data/io.github.fsobolev.Cavalier.gschema.xml:48 168 | msgid "This setting only affects \"levels\" and \"particles\" modes." 169 | msgstr "" 170 | 171 | #: data/io.github.fsobolev.Cavalier.gschema.xml:53 172 | msgid "Number of bars" 173 | msgstr "" 174 | 175 | #: data/io.github.fsobolev.Cavalier.gschema.xml:54 176 | msgid "Number of bars in CAVA config" 177 | msgstr "" 178 | 179 | #: data/io.github.fsobolev.Cavalier.gschema.xml:59 180 | #: src/preferences_window.py:204 181 | msgid "Automatic sensitivity" 182 | msgstr "Sensibilidade automática" 183 | 184 | #: data/io.github.fsobolev.Cavalier.gschema.xml:60 185 | #: src/preferences_window.py:206 186 | msgid "Attempt to decrease sensitivity if the bars peak." 187 | msgstr "" 188 | 189 | #: data/io.github.fsobolev.Cavalier.gschema.xml:64 190 | #: src/preferences_window.py:214 191 | msgid "Sensitivity" 192 | msgstr "Sensibilidade" 193 | 194 | #: data/io.github.fsobolev.Cavalier.gschema.xml:65 195 | #: src/preferences_window.py:216 196 | msgid "" 197 | "Manual sensitivity. If automatic sensitivity is enabled, this will only be " 198 | "the initial value." 199 | msgstr "" 200 | 201 | #: data/io.github.fsobolev.Cavalier.gschema.xml:70 202 | #: src/preferences_window.py:225 203 | msgid "Channels" 204 | msgstr "Canais" 205 | 206 | #: data/io.github.fsobolev.Cavalier.gschema.xml:71 207 | msgid "Mono or stereo" 208 | msgstr "Mono ou stereo" 209 | 210 | #: data/io.github.fsobolev.Cavalier.gschema.xml:79 211 | #: src/preferences_window.py:237 212 | msgid "Smoothing" 213 | msgstr "Suavidade na animação" 214 | 215 | #: data/io.github.fsobolev.Cavalier.gschema.xml:87 216 | msgid "Noise reduction" 217 | msgstr "" 218 | 219 | #: data/io.github.fsobolev.Cavalier.gschema.xml:88 220 | msgid "" 221 | "This factor adjusts the integral and gravity filters to keep the signal " 222 | "smooth. 1 will be very slow and smooth, 0 will be fast but noisy." 223 | msgstr "" 224 | 225 | #: data/io.github.fsobolev.Cavalier.gschema.xml:93 226 | #: src/preferences_window.py:255 227 | msgid "Reverse order" 228 | msgstr "" 229 | 230 | #: data/io.github.fsobolev.Cavalier.gschema.xml:97 231 | #: src/preferences_window.py:272 232 | msgid "Widgets style" 233 | msgstr "" 234 | 235 | #: data/io.github.fsobolev.Cavalier.gschema.xml:98 236 | #: src/preferences_window.py:273 237 | msgid "Style used by Adwaita widgets." 238 | msgstr "" 239 | 240 | #: data/io.github.fsobolev.Cavalier.gschema.xml:106 241 | #: src/preferences_window.py:136 242 | msgid "Sharp corners" 243 | msgstr "" 244 | 245 | #: data/io.github.fsobolev.Cavalier.gschema.xml:107 246 | #: src/preferences_window.py:138 247 | msgid "Whether the main window corners should be sharp." 248 | msgstr "" 249 | 250 | #: data/io.github.fsobolev.Cavalier.gschema.xml:111 251 | msgid "Color Profiles" 252 | msgstr "" 253 | 254 | #: data/io.github.fsobolev.Cavalier.gschema.xml:115 255 | msgid "Index of active color profile" 256 | msgstr "" 257 | 258 | #: src/preferences_window.py:59 259 | msgid "Drawing Mode" 260 | msgstr "" 261 | 262 | #: src/preferences_window.py:63 263 | msgid "Wave" 264 | msgstr "Onda" 265 | 266 | #: src/preferences_window.py:70 267 | msgid "Levels" 268 | msgstr "Níveis" 269 | 270 | #: src/preferences_window.py:78 271 | msgid "Particles" 272 | msgstr "Partículas" 273 | 274 | #: src/preferences_window.py:86 src/preferences_window.py:193 275 | msgid "Bars" 276 | msgstr "" 277 | 278 | #: src/preferences_window.py:123 279 | msgid "" 280 | "This setting only affects \"levels\" and \"particles\" modes.\n" 281 | "0 - square, 1 - round" 282 | msgstr "" 283 | 284 | #: src/preferences_window.py:173 285 | msgid "Import" 286 | msgstr "Importar" 287 | 288 | #: src/preferences_window.py:178 289 | msgid "Export" 290 | msgstr "Exportar" 291 | 292 | #: src/preferences_window.py:231 293 | msgid "Mono" 294 | msgstr "Mono" 295 | 296 | #: src/preferences_window.py:233 297 | msgid "Stereo" 298 | msgstr "Stereo" 299 | 300 | #: src/preferences_window.py:239 301 | msgid "Off" 302 | msgstr "Desligado" 303 | 304 | #: src/preferences_window.py:239 305 | msgid "Monstercat" 306 | msgstr "" 307 | 308 | #: src/preferences_window.py:242 309 | msgid "Noise Reduction" 310 | msgstr "" 311 | 312 | #: src/preferences_window.py:243 313 | msgid "0 - noisy, 1 - smooth" 314 | msgstr "" 315 | 316 | #: src/preferences_window.py:264 src/preferences_window.py:285 317 | #: src/shortcuts_dialog.ui:82 318 | msgid "Colors" 319 | msgstr "Cores" 320 | 321 | #: src/preferences_window.py:278 322 | msgid "Light" 323 | msgstr "Claro" 324 | 325 | #: src/preferences_window.py:280 326 | msgid "Dark" 327 | msgstr "Escuro" 328 | 329 | #: src/preferences_window.py:291 330 | msgid "Profile:" 331 | msgstr "Perfil:" 332 | 333 | #: src/preferences_window.py:299 334 | msgid "Add new profile" 335 | msgstr "Adicione um novo perfil" 336 | 337 | #: src/preferences_window.py:310 338 | msgid "Type a name for a new profile" 339 | msgstr "Tipos de nome para novos perfis" 340 | 341 | #: src/preferences_window.py:312 src/preferences_window.py:508 342 | #: src/preferences_window.py:547 343 | msgid "Add" 344 | msgstr "Adicione" 345 | 346 | #: src/preferences_window.py:322 347 | msgid "Remove profile" 348 | msgstr "Remover perfil" 349 | 350 | #: src/preferences_window.py:329 351 | msgid "Are you sure you want to remove this profile?" 352 | msgstr "Têm certeza que deseja remover esse perfil" 353 | 354 | #: src/preferences_window.py:336 355 | msgid "Remove" 356 | msgstr "Remover" 357 | 358 | #: src/preferences_window.py:343 src/preferences_window.py:695 359 | #: src/preferences_window.py:714 360 | msgid "Cancel" 361 | msgstr "Cancelar" 362 | 363 | #: src/preferences_window.py:353 364 | msgid "Foreground" 365 | msgstr "" 366 | 367 | #: src/preferences_window.py:358 368 | msgid "Background" 369 | msgstr "Fundo" 370 | 371 | #: src/preferences_window.py:489 src/preferences_window.py:512 372 | #: src/preferences_window.py:530 src/preferences_window.py:551 373 | msgid "Select color" 374 | msgstr "Selecione a cor" 375 | 376 | #: src/preferences_window.py:496 src/preferences_window.py:537 377 | msgid "Remove color" 378 | msgstr "Remover cor" 379 | 380 | #: src/preferences_window.py:517 src/preferences_window.py:556 381 | msgid "Add color" 382 | msgstr "Adicionar cor" 383 | 384 | #: src/preferences_window.py:584 385 | msgid "This name is already in use." 386 | msgstr "Este nome já esta em uso" 387 | 388 | #: src/preferences_window.py:694 389 | msgid "Import Settings" 390 | msgstr "Importar configurações" 391 | 392 | #: src/preferences_window.py:695 393 | msgid "Open" 394 | msgstr "Abrir" 395 | 396 | #: src/preferences_window.py:698 src/preferences_window.py:717 397 | msgid "Cavalier Settings File (*.cavalier)" 398 | msgstr "Arquivo de configurações (*cavalier)" 399 | 400 | #: src/preferences_window.py:702 401 | msgid "All Files" 402 | msgstr "Todos os arquivos" 403 | 404 | #: src/preferences_window.py:713 405 | msgid "Export Settings" 406 | msgstr "Exportar configurações" 407 | 408 | #: src/preferences_window.py:714 409 | msgid "Save" 410 | msgstr "Salvar" 411 | 412 | #: src/window.py:109 413 | msgid "Preferences" 414 | msgstr "Preferencias" 415 | 416 | #: src/window.py:110 417 | msgid "Keyboard Shortcuts" 418 | msgstr "Atalhos de teclado" 419 | 420 | #: src/window.py:111 421 | msgid "About" 422 | msgstr "Sobre" 423 | 424 | #: src/window.py:112 425 | msgid "Quit" 426 | msgstr "Sair" 427 | 428 | #: src/shortcuts_dialog.ui:15 429 | msgid "Change Drawing Mode" 430 | msgstr "" 431 | 432 | #: src/shortcuts_dialog.ui:21 433 | msgid "Change Drawing Area Margin" 434 | msgstr "" 435 | 436 | #: src/shortcuts_dialog.ui:27 437 | msgid "Change Offset Between Items" 438 | msgstr "" 439 | 440 | #: src/shortcuts_dialog.ui:33 441 | msgid "Change Roundness of Items" 442 | msgstr "" 443 | 444 | #: src/shortcuts_dialog.ui:39 445 | msgid "Toggle Sharp Corners" 446 | msgstr "" 447 | 448 | #: src/shortcuts_dialog.ui:45 449 | msgid "Toggle Window Controls" 450 | msgstr "" 451 | 452 | #: src/shortcuts_dialog.ui:51 453 | msgid "Toggle Autohide Headerbar" 454 | msgstr "" 455 | 456 | #: src/shortcuts_dialog.ui:62 457 | msgid "Change Number of Bars" 458 | msgstr "" 459 | 460 | #: src/shortcuts_dialog.ui:68 461 | msgid "Toggle Channels" 462 | msgstr "" 463 | 464 | #: src/shortcuts_dialog.ui:74 465 | msgid "Toggle Reverse Order" 466 | msgstr "" 467 | 468 | #: src/shortcuts_dialog.ui:85 469 | msgid "Change Colors Profile" 470 | msgstr "Mudar Cores do perfil" 471 | 472 | #: src/shortcuts_dialog.ui:91 473 | msgid "Toggle Widgets Style" 474 | msgstr "" 475 | -------------------------------------------------------------------------------- /po/ru.po: -------------------------------------------------------------------------------- 1 | # Russian translation for Cavalier 2 | # Copyright (C) 2022 Fyodor Sobolev 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Fyodor Sobolev, 2022 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: cavalier\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-01-29 12:46+0300\n" 11 | "PO-Revision-Date: 2022-12-04 23:26+0300\n" 12 | "Last-Translator: Fyodor Sobolev\n" 13 | "Language: ru\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | 18 | #: data/io.github.fsobolev.Cavalier.desktop.in:3 19 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:6 20 | msgid "Cavalier" 21 | msgstr "Cavalier" 22 | 23 | #: data/io.github.fsobolev.Cavalier.desktop.in:4 24 | msgid "Audio Visualizer" 25 | msgstr "Аудио визуализатор" 26 | 27 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:7 28 | msgid "Audio visualizer based on CAVA." 29 | msgstr "Аудио визуализатор, основанный на CAVA" 30 | 31 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:9 32 | msgid "" 33 | "Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita " 34 | "interface." 35 | msgstr "" 36 | "Cavalier - аудио визуализатор, использующий CAVA, с настраиваемым " 37 | "интерфейсом на основе LibAdwaita." 38 | 39 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:11 40 | msgid "4 drawing modes!" 41 | msgstr "4 режима отрисовки!" 42 | 43 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:12 44 | msgid "" 45 | "Set single color or up to 10 colors gradient for background and foreground." 46 | msgstr "" 47 | "Установите цвет или градиент из максимум 10 цветов в качестве фона или " 48 | "основного цвета." 49 | 50 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:13 51 | msgid "Configure smoothing, noise reduction and a few other CAVA settings." 52 | msgstr "" 53 | "Настраивайте сглаживание, шумоподавление и парочку других параметров CAVA." 54 | 55 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:19 src/main.py:72 56 | #: src/main.py:74 57 | msgid "Fyodor Sobolev" 58 | msgstr "Фёдор Соболев" 59 | 60 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:41 61 | msgid "Second release of Cavalier." 62 | msgstr "Второй выпуск Cavalier." 63 | 64 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:43 65 | msgid "New drawing mode — Particles!" 66 | msgstr "Новый режим отрисовки — Частицы!" 67 | 68 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:44 69 | msgid "" 70 | "Color profiles! Create as many as you want and change between them " 71 | "instantly. Unfortunately, this new feature required to change how the " 72 | "application saves colors, and because of this your previous colors settings " 73 | "will be lost after installing this update." 74 | msgstr "" 75 | "Профили цветов! Создайте столько профилей, сколько захотите, и " 76 | "переключайтесь между ними мгновенно! К сожалению, эта функция потребовала " 77 | "изменить, как приложение сохраняет цвета, поэтому после установки этого " 78 | "обновления ваши предыдущие настройки цветов будут утеряны." 79 | 80 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:45 81 | msgid "Added keyboard shortcuts to change most of the settings on the fly." 82 | msgstr "Добавлены сочетания клавиш для изменения большинства настроек на лету." 83 | 84 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:46 85 | msgid "Added option to show/hide window controls." 86 | msgstr "Добавлена опция для скрытия/отображения кнопок управления окном." 87 | 88 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:47 89 | msgid "Added option to autohide headerbar when the main window is not focused." 90 | msgstr "" 91 | "Добавлена опция автоматического скрытия заголовка, когда окно не в фокусе." 92 | 93 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:48 94 | msgid "" 95 | "Added option to change roundness of items in \"levels\" and \"particles\" " 96 | "modes." 97 | msgstr "" 98 | "Добавлена опция изменения округлости элементов в режимах Уровни и Частицы." 99 | 100 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:49 101 | msgid "Added option to reverse the order of bars." 102 | msgstr "Добавлена опция обратного порядка шкал." 103 | 104 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:50 105 | msgid "Import/Export Settings" 106 | msgstr "Импорт/Экспорт настроек" 107 | 108 | #: data/io.github.fsobolev.Cavalier.gschema.xml:5 109 | msgid "Window size" 110 | msgstr "Размер окна" 111 | 112 | #: data/io.github.fsobolev.Cavalier.gschema.xml:9 113 | msgid "Window maximized state" 114 | msgstr "Развёрнутое состояние окна" 115 | 116 | #: data/io.github.fsobolev.Cavalier.gschema.xml:10 117 | msgid "Whether main window is maximized or not" 118 | msgstr "Является ли окно развёрнутым или нет" 119 | 120 | #: data/io.github.fsobolev.Cavalier.gschema.xml:14 121 | #: src/preferences_window.py:147 122 | msgid "Window controls" 123 | msgstr "Кнопки управления окном" 124 | 125 | #: data/io.github.fsobolev.Cavalier.gschema.xml:15 126 | #: src/preferences_window.py:149 127 | msgid "Whether to show window control buttons." 128 | msgstr "Должны ли отображаться кнопки управления окном." 129 | 130 | #: data/io.github.fsobolev.Cavalier.gschema.xml:19 131 | #: src/preferences_window.py:158 132 | msgid "Autohide headerbar" 133 | msgstr "Автоскрытие заголовка" 134 | 135 | #: data/io.github.fsobolev.Cavalier.gschema.xml:20 136 | #: src/preferences_window.py:160 137 | msgid "Whether to hide headerbar when main window is not focused." 138 | msgstr "Должен ли отображаться заголовок главного окна, когда оно не в фокусе." 139 | 140 | #: data/io.github.fsobolev.Cavalier.gschema.xml:24 141 | msgid "Drawing mode" 142 | msgstr "Режим отрисовки" 143 | 144 | #: data/io.github.fsobolev.Cavalier.gschema.xml:25 145 | msgid "Defines what the visualizer looks like." 146 | msgstr "Определяет, как выглядит визуализатор." 147 | 148 | #: data/io.github.fsobolev.Cavalier.gschema.xml:35 src/preferences_window.py:97 149 | msgid "Drawing area margin" 150 | msgstr "Отступ области отрисовки" 151 | 152 | #: data/io.github.fsobolev.Cavalier.gschema.xml:36 src/preferences_window.py:99 153 | msgid "Size of gaps around drawing area (in pixels)." 154 | msgstr "Размер отступа вокруг области отрисовки (в пикселях)." 155 | 156 | #: data/io.github.fsobolev.Cavalier.gschema.xml:41 157 | #: src/preferences_window.py:109 158 | msgid "Offset between items" 159 | msgstr "Расстояние между элементами" 160 | 161 | #: data/io.github.fsobolev.Cavalier.gschema.xml:42 162 | #: src/preferences_window.py:111 163 | msgid "" 164 | "The size of spaces between elements in \"levels\", \"particles\" and \"bars" 165 | "\" modes (in percent)." 166 | msgstr "" 167 | "Размер пространства между элементами в режимах Уровни, Частицы и Шкалы (в " 168 | "процентах)." 169 | 170 | #: data/io.github.fsobolev.Cavalier.gschema.xml:47 171 | #: src/preferences_window.py:121 172 | msgid "Roundness of items" 173 | msgstr "Округлость элементов" 174 | 175 | #: data/io.github.fsobolev.Cavalier.gschema.xml:48 176 | msgid "This setting only affects \"levels\" and \"particles\" modes." 177 | msgstr "Эта настройка влияет только на режимы Уровни и Частицы." 178 | 179 | #: data/io.github.fsobolev.Cavalier.gschema.xml:53 180 | msgid "Number of bars" 181 | msgstr "Количество шкал" 182 | 183 | #: data/io.github.fsobolev.Cavalier.gschema.xml:54 184 | msgid "Number of bars in CAVA config" 185 | msgstr "Количество шкал в конфигурации CAVA" 186 | 187 | #: data/io.github.fsobolev.Cavalier.gschema.xml:59 188 | #: src/preferences_window.py:204 189 | msgid "Automatic sensitivity" 190 | msgstr "Автоматическая чувствительность" 191 | 192 | #: data/io.github.fsobolev.Cavalier.gschema.xml:60 193 | #: src/preferences_window.py:206 194 | msgid "Attempt to decrease sensitivity if the bars peak." 195 | msgstr "" 196 | "Пытаться снижать чувствительность, если показатели достигают максимума." 197 | 198 | #: data/io.github.fsobolev.Cavalier.gschema.xml:64 199 | #: src/preferences_window.py:214 200 | msgid "Sensitivity" 201 | msgstr "Чувствительность" 202 | 203 | #: data/io.github.fsobolev.Cavalier.gschema.xml:65 204 | #: src/preferences_window.py:216 205 | msgid "" 206 | "Manual sensitivity. If automatic sensitivity is enabled, this will only be " 207 | "the initial value." 208 | msgstr "" 209 | "Ручная настройка чувствительности. Если автоматическая чувствительность " 210 | "включена, этот параметр задаёт только начальное значение." 211 | 212 | #: data/io.github.fsobolev.Cavalier.gschema.xml:70 213 | #: src/preferences_window.py:225 214 | msgid "Channels" 215 | msgstr "Каналы" 216 | 217 | #: data/io.github.fsobolev.Cavalier.gschema.xml:71 218 | msgid "Mono or stereo" 219 | msgstr "Моно или стерео" 220 | 221 | #: data/io.github.fsobolev.Cavalier.gschema.xml:79 222 | #: src/preferences_window.py:237 223 | msgid "Smoothing" 224 | msgstr "Сглаживание" 225 | 226 | #: data/io.github.fsobolev.Cavalier.gschema.xml:87 227 | msgid "Noise reduction" 228 | msgstr "Шумоподавление" 229 | 230 | #: data/io.github.fsobolev.Cavalier.gschema.xml:88 231 | msgid "" 232 | "This factor adjusts the integral and gravity filters to keep the signal " 233 | "smooth. 1 will be very slow and smooth, 0 will be fast but noisy." 234 | msgstr "" 235 | "Этот параметр регулирует интегральные и гравитационные фильтры, делающие " 236 | "сигнал гладким. 1 - медленно и гладко, 0 - быстро, но шумно." 237 | 238 | #: data/io.github.fsobolev.Cavalier.gschema.xml:93 239 | #: src/preferences_window.py:255 240 | msgid "Reverse order" 241 | msgstr "Обратный порядок" 242 | 243 | #: data/io.github.fsobolev.Cavalier.gschema.xml:97 244 | #: src/preferences_window.py:272 245 | msgid "Widgets style" 246 | msgstr "Стиль виджетов" 247 | 248 | #: data/io.github.fsobolev.Cavalier.gschema.xml:98 249 | #: src/preferences_window.py:273 250 | msgid "Style used by Adwaita widgets." 251 | msgstr "Стиль, используемый виджетами Adwaita." 252 | 253 | #: data/io.github.fsobolev.Cavalier.gschema.xml:106 254 | #: src/preferences_window.py:136 255 | msgid "Sharp corners" 256 | msgstr "Острые углы" 257 | 258 | #: data/io.github.fsobolev.Cavalier.gschema.xml:107 259 | #: src/preferences_window.py:138 260 | msgid "Whether the main window corners should be sharp." 261 | msgstr "Должны ли углы главного окна быть острыми." 262 | 263 | #: data/io.github.fsobolev.Cavalier.gschema.xml:111 264 | msgid "Color Profiles" 265 | msgstr "Профили цветов" 266 | 267 | #: data/io.github.fsobolev.Cavalier.gschema.xml:115 268 | msgid "Index of active color profile" 269 | msgstr "Номер активного профиля цветов" 270 | 271 | #: src/preferences_window.py:59 272 | msgid "Drawing Mode" 273 | msgstr "Режим отрисовки" 274 | 275 | #: src/preferences_window.py:63 276 | msgid "Wave" 277 | msgstr "Волна" 278 | 279 | #: src/preferences_window.py:70 280 | msgid "Levels" 281 | msgstr "Уровни" 282 | 283 | #: src/preferences_window.py:78 284 | msgid "Particles" 285 | msgstr "Частицы" 286 | 287 | #: src/preferences_window.py:86 src/preferences_window.py:193 288 | msgid "Bars" 289 | msgstr "Шкалы" 290 | 291 | #: src/preferences_window.py:123 292 | msgid "" 293 | "This setting only affects \"levels\" and \"particles\" modes.\n" 294 | "0 - square, 1 - round" 295 | msgstr "" 296 | "Эта настройка влияет только на режимы Уровни и Частицы.\n" 297 | "0 - квадратные, 1 - круглые" 298 | 299 | #: src/preferences_window.py:173 300 | msgid "Import" 301 | msgstr "Импорт" 302 | 303 | #: src/preferences_window.py:178 304 | msgid "Export" 305 | msgstr "Экспорт" 306 | 307 | #: src/preferences_window.py:231 308 | msgid "Mono" 309 | msgstr "Моно" 310 | 311 | #: src/preferences_window.py:233 312 | msgid "Stereo" 313 | msgstr "Стерео" 314 | 315 | #: src/preferences_window.py:239 316 | msgid "Off" 317 | msgstr "Выключено" 318 | 319 | #: src/preferences_window.py:239 320 | msgid "Monstercat" 321 | msgstr "Monstercat" 322 | 323 | #: src/preferences_window.py:242 324 | msgid "Noise Reduction" 325 | msgstr "Шумоподавление" 326 | 327 | #: src/preferences_window.py:243 328 | msgid "0 - noisy, 1 - smooth" 329 | msgstr "0 - шумно, 1 - гладко" 330 | 331 | #: src/preferences_window.py:264 src/preferences_window.py:285 332 | #: src/shortcuts_dialog.ui:82 333 | msgid "Colors" 334 | msgstr "Цвета" 335 | 336 | #: src/preferences_window.py:278 337 | msgid "Light" 338 | msgstr "Светлый" 339 | 340 | #: src/preferences_window.py:280 341 | msgid "Dark" 342 | msgstr "Тёмный" 343 | 344 | #: src/preferences_window.py:291 345 | msgid "Profile:" 346 | msgstr "Профиль:" 347 | 348 | #: src/preferences_window.py:299 349 | msgid "Add new profile" 350 | msgstr "Добавить новый профиль" 351 | 352 | #: src/preferences_window.py:310 353 | msgid "Type a name for a new profile" 354 | msgstr "Введите имя нового профиля" 355 | 356 | #: src/preferences_window.py:312 src/preferences_window.py:508 357 | #: src/preferences_window.py:547 358 | msgid "Add" 359 | msgstr "Добавить" 360 | 361 | #: src/preferences_window.py:322 362 | msgid "Remove profile" 363 | msgstr "Удалить профиль" 364 | 365 | #: src/preferences_window.py:329 366 | msgid "Are you sure you want to remove this profile?" 367 | msgstr "Вы уверены, что хотите удалить этот профиль?" 368 | 369 | #: src/preferences_window.py:336 370 | msgid "Remove" 371 | msgstr "Удалить" 372 | 373 | #: src/preferences_window.py:343 src/preferences_window.py:695 374 | #: src/preferences_window.py:714 375 | msgid "Cancel" 376 | msgstr "Отмена" 377 | 378 | #: src/preferences_window.py:353 379 | msgid "Foreground" 380 | msgstr "Передний план" 381 | 382 | #: src/preferences_window.py:358 383 | msgid "Background" 384 | msgstr "Фон" 385 | 386 | #: src/preferences_window.py:489 src/preferences_window.py:512 387 | #: src/preferences_window.py:530 src/preferences_window.py:551 388 | msgid "Select color" 389 | msgstr "Выбрать цвет" 390 | 391 | #: src/preferences_window.py:496 src/preferences_window.py:537 392 | msgid "Remove color" 393 | msgstr "Удалить цвет" 394 | 395 | #: src/preferences_window.py:517 src/preferences_window.py:556 396 | msgid "Add color" 397 | msgstr "Добавить цвет" 398 | 399 | #: src/preferences_window.py:584 400 | msgid "This name is already in use." 401 | msgstr "Это имя уже используется." 402 | 403 | #: src/preferences_window.py:694 404 | msgid "Import Settings" 405 | msgstr "Импорт Настроек" 406 | 407 | #: src/preferences_window.py:695 408 | msgid "Open" 409 | msgstr "Открыть" 410 | 411 | #: src/preferences_window.py:698 src/preferences_window.py:717 412 | msgid "Cavalier Settings File (*.cavalier)" 413 | msgstr "Файл настроек Cavalier (*.cavalier)" 414 | 415 | #: src/preferences_window.py:702 416 | msgid "All Files" 417 | msgstr "Все файлы" 418 | 419 | #: src/preferences_window.py:713 420 | msgid "Export Settings" 421 | msgstr "Экспорт Настроек" 422 | 423 | #: src/preferences_window.py:714 424 | msgid "Save" 425 | msgstr "Сохранить" 426 | 427 | #: src/window.py:109 428 | msgid "Preferences" 429 | msgstr "Настройки" 430 | 431 | #: src/window.py:110 432 | msgid "Keyboard Shortcuts" 433 | msgstr "Комбинации клавиш" 434 | 435 | #: src/window.py:111 436 | msgid "About" 437 | msgstr "О приложении" 438 | 439 | #: src/window.py:112 440 | msgid "Quit" 441 | msgstr "Выход" 442 | 443 | #: src/shortcuts_dialog.ui:15 444 | msgid "Change Drawing Mode" 445 | msgstr "Изменить режим отрисовки" 446 | 447 | #: src/shortcuts_dialog.ui:21 448 | msgid "Change Drawing Area Margin" 449 | msgstr "Изменить отступ области отрисовки" 450 | 451 | #: src/shortcuts_dialog.ui:27 452 | msgid "Change Offset Between Items" 453 | msgstr "Изменить расстояние между элементами" 454 | 455 | #: src/shortcuts_dialog.ui:33 456 | msgid "Change Roundness of Items" 457 | msgstr "Изменить округлость элементов" 458 | 459 | #: src/shortcuts_dialog.ui:39 460 | msgid "Toggle Sharp Corners" 461 | msgstr "Переключить острые углы" 462 | 463 | #: src/shortcuts_dialog.ui:45 464 | msgid "Toggle Window Controls" 465 | msgstr "Переключить кнопки управления окном" 466 | 467 | #: src/shortcuts_dialog.ui:51 468 | msgid "Toggle Autohide Headerbar" 469 | msgstr "Переключить автоскрытие заголовка" 470 | 471 | #: src/shortcuts_dialog.ui:62 472 | msgid "Change Number of Bars" 473 | msgstr "Изменить количество шкал" 474 | 475 | #: src/shortcuts_dialog.ui:68 476 | msgid "Toggle Channels" 477 | msgstr "Переключить каналы" 478 | 479 | #: src/shortcuts_dialog.ui:74 480 | msgid "Toggle Reverse Order" 481 | msgstr "Переключить обратный порядок" 482 | 483 | #: src/shortcuts_dialog.ui:85 484 | msgid "Change Colors Profile" 485 | msgstr "Изменить профиль цветов" 486 | 487 | #: src/shortcuts_dialog.ui:91 488 | msgid "Toggle Widgets Style" 489 | msgstr "Переключить стиль виджетов" 490 | -------------------------------------------------------------------------------- /po/es.po: -------------------------------------------------------------------------------- 1 | # Spanish translation for the cavalier's package. 2 | # Copyright (C) 2022 Fyodor Sobolev 3 | # This file is distributed under the same license as the cavalier package. 4 | # Santiago F. , 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: cavalier\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-01-29 12:46+0300\n" 11 | "PO-Revision-Date: 2023-02-04 21:01-0500\n" 12 | "Last-Translator: Santiago F. \n" 13 | "Language-Team: sf@santyf.com\n" 14 | "Language: es\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | "X-Generator: Poedit 3.1.1\n" 20 | 21 | #: data/io.github.fsobolev.Cavalier.desktop.in:3 22 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:6 23 | msgid "Cavalier" 24 | msgstr "Cavalier" 25 | 26 | #: data/io.github.fsobolev.Cavalier.desktop.in:4 27 | msgid "Audio Visualizer" 28 | msgstr "Visualizador de Audio" 29 | 30 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:7 31 | msgid "Audio visualizer based on CAVA." 32 | msgstr "Visualizador de audio basado en CAVA." 33 | 34 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:9 35 | msgid "" 36 | "Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita " 37 | "interface." 38 | msgstr "" 39 | "Cavalier es un visualizador de audio basado en CAVA con una interfaz LibAdwaita " 40 | "personalizable." 41 | 42 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:11 43 | msgid "4 drawing modes!" 44 | msgstr "4 modelos de dibujado!" 45 | 46 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:12 47 | msgid "Set single color or up to 10 colors gradient for background and foreground." 48 | msgstr "Configure un color o hasta 10 colores gradientes para el fondo y énfasis." 49 | 50 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:13 51 | msgid "Configure smoothing, noise reduction and a few other CAVA settings." 52 | msgstr "Configure suavizado, reducción de ruido y otros ajustes de CAVA." 53 | 54 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:19 src/main.py:72 src/main.py:74 55 | msgid "Fyodor Sobolev" 56 | msgstr "Fyodor Sobolev" 57 | 58 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:41 59 | msgid "Second release of Cavalier." 60 | msgstr "Segundo lanzamiento de Cavalier." 61 | 62 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:43 63 | msgid "New drawing mode — Particles!" 64 | msgstr "Nuevo modo de dibujado — Partículas!" 65 | 66 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:44 67 | msgid "" 68 | "Color profiles! Create as many as you want and change between them instantly. " 69 | "Unfortunately, this new feature required to change how the application saves " 70 | "colors, and because of this your previous colors settings will be lost after " 71 | "installing this update." 72 | msgstr "" 73 | "Perfiles de color! Cree cuantos perfiles desee y cambie entre ellos " 74 | "instantaneamente. Desafortunadamente, esta nueva característica cambia la forma en " 75 | "la que la aplicación guarda los colores, por consecuente sus anteriores ajustes de " 76 | "color se perderán después de instalar esta actualización." 77 | 78 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:45 79 | msgid "Added keyboard shortcuts to change most of the settings on the fly." 80 | msgstr "Se añadieron atajos de teclado para cambiar la mayoria de los ajustes." 81 | 82 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:46 83 | msgid "Added option to show/hide window controls." 84 | msgstr "Se añadió la opción de mostrar/ocultar los controles de ventana." 85 | 86 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:47 87 | msgid "Added option to autohide headerbar when the main window is not focused." 88 | msgstr "" 89 | "Se añadió la opción de ocultar la barra de título automáticamente cuando la ventana " 90 | "principal no está activa." 91 | 92 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:48 93 | msgid "" 94 | "Added option to change roundness of items in \"levels\" and \"particles\" modes." 95 | msgstr "" 96 | "Se añadio la opción de cambiar la redondez de elementos en los modos \"niveles\" y " 97 | "\"partículas\"." 98 | 99 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:49 100 | msgid "Added option to reverse the order of bars." 101 | msgstr "Se añadió la opción para revertir el orden de las barras." 102 | 103 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:50 104 | msgid "Import/Export Settings" 105 | msgstr "Importar/Exportar Ajustes" 106 | 107 | #: data/io.github.fsobolev.Cavalier.gschema.xml:5 108 | msgid "Window size" 109 | msgstr "Tamaño de ventana" 110 | 111 | #: data/io.github.fsobolev.Cavalier.gschema.xml:9 112 | msgid "Window maximized state" 113 | msgstr "Tamaño máximo de ventana" 114 | 115 | #: data/io.github.fsobolev.Cavalier.gschema.xml:10 116 | msgid "Whether main window is maximized or not" 117 | msgstr "Si la ventana principal está maximizada o no" 118 | 119 | #: data/io.github.fsobolev.Cavalier.gschema.xml:14 src/preferences_window.py:147 120 | msgid "Window controls" 121 | msgstr "Controles de ventana" 122 | 123 | #: data/io.github.fsobolev.Cavalier.gschema.xml:15 src/preferences_window.py:149 124 | msgid "Whether to show window control buttons." 125 | msgstr "Si se muestran los controles de ventana." 126 | 127 | #: data/io.github.fsobolev.Cavalier.gschema.xml:19 src/preferences_window.py:158 128 | msgid "Autohide headerbar" 129 | msgstr "Ocultar la barra de título automáticamente" 130 | 131 | #: data/io.github.fsobolev.Cavalier.gschema.xml:20 src/preferences_window.py:160 132 | msgid "Whether to hide headerbar when main window is not focused." 133 | msgstr "Si se oculta la barra de título cuando la ventana principal no está activa." 134 | 135 | #: data/io.github.fsobolev.Cavalier.gschema.xml:24 136 | msgid "Drawing mode" 137 | msgstr "Modo de dibujado" 138 | 139 | #: data/io.github.fsobolev.Cavalier.gschema.xml:25 140 | msgid "Defines what the visualizer looks like." 141 | msgstr "Define como se ve el visualizador." 142 | 143 | #: data/io.github.fsobolev.Cavalier.gschema.xml:35 src/preferences_window.py:97 144 | msgid "Drawing area margin" 145 | msgstr "Márgen del área de dibujado" 146 | 147 | #: data/io.github.fsobolev.Cavalier.gschema.xml:36 src/preferences_window.py:99 148 | msgid "Size of gaps around drawing area (in pixels)." 149 | msgstr "Tamaño del espacio alrededor del area de dibujado (en píxeles)." 150 | 151 | #: data/io.github.fsobolev.Cavalier.gschema.xml:41 src/preferences_window.py:109 152 | msgid "Offset between items" 153 | msgstr "Espacio entre elementos" 154 | 155 | #: data/io.github.fsobolev.Cavalier.gschema.xml:42 src/preferences_window.py:111 156 | msgid "" 157 | "The size of spaces between elements in \"levels\", \"particles\" and \"bars\" modes " 158 | "(in percent)." 159 | msgstr "" 160 | "El tamaño de los espacios entre elementos de los modos \"niveles\", \"partículas\" " 161 | "y \"barras\" (en porcentaje)." 162 | 163 | #: data/io.github.fsobolev.Cavalier.gschema.xml:47 src/preferences_window.py:121 164 | msgid "Roundness of items" 165 | msgstr "Redondez de los elementos" 166 | 167 | #: data/io.github.fsobolev.Cavalier.gschema.xml:48 168 | msgid "This setting only affects \"levels\" and \"particles\" modes." 169 | msgstr "Este ajuste solo afecta a los modos \"niveles\" y \"partículas\"." 170 | 171 | #: data/io.github.fsobolev.Cavalier.gschema.xml:53 172 | msgid "Number of bars" 173 | msgstr "Numero de barras" 174 | 175 | #: data/io.github.fsobolev.Cavalier.gschema.xml:54 176 | msgid "Number of bars in CAVA config" 177 | msgstr "Numero de barras en la configuración de CAVA" 178 | 179 | #: data/io.github.fsobolev.Cavalier.gschema.xml:59 src/preferences_window.py:204 180 | msgid "Automatic sensitivity" 181 | msgstr "Sensibilidad automática" 182 | 183 | #: data/io.github.fsobolev.Cavalier.gschema.xml:60 src/preferences_window.py:206 184 | msgid "Attempt to decrease sensitivity if the bars peak." 185 | msgstr "Intento para reducir la sensibilidad si las barras llegan a su punto máximo." 186 | 187 | #: data/io.github.fsobolev.Cavalier.gschema.xml:64 src/preferences_window.py:214 188 | msgid "Sensitivity" 189 | msgstr "Sensibilidad" 190 | 191 | #: data/io.github.fsobolev.Cavalier.gschema.xml:65 src/preferences_window.py:216 192 | msgid "" 193 | "Manual sensitivity. If automatic sensitivity is enabled, this will only be the " 194 | "initial value." 195 | msgstr "Sensibilidad manual. De ser activado, esto será solo el valor inicial." 196 | 197 | #: data/io.github.fsobolev.Cavalier.gschema.xml:70 src/preferences_window.py:225 198 | msgid "Channels" 199 | msgstr "Canales" 200 | 201 | #: data/io.github.fsobolev.Cavalier.gschema.xml:71 202 | msgid "Mono or stereo" 203 | msgstr "Mono o estéreo" 204 | 205 | #: data/io.github.fsobolev.Cavalier.gschema.xml:79 src/preferences_window.py:237 206 | msgid "Smoothing" 207 | msgstr "Suavizado" 208 | 209 | #: data/io.github.fsobolev.Cavalier.gschema.xml:87 210 | msgid "Noise reduction" 211 | msgstr "Reducción de ruido" 212 | 213 | #: data/io.github.fsobolev.Cavalier.gschema.xml:88 214 | msgid "" 215 | "This factor adjusts the integral and gravity filters to keep the signal smooth. 1 " 216 | "will be very slow and smooth, 0 will be fast but noisy." 217 | msgstr "" 218 | "Este factor ajusta la integral y los filtros de gravedad para mantener la señal " 219 | "suave. 1 será muy lento y suave, 0 será rápido pero ruidoso." 220 | 221 | #: data/io.github.fsobolev.Cavalier.gschema.xml:93 src/preferences_window.py:255 222 | msgid "Reverse order" 223 | msgstr "Orden inverso" 224 | 225 | #: data/io.github.fsobolev.Cavalier.gschema.xml:97 src/preferences_window.py:272 226 | msgid "Widgets style" 227 | msgstr "Estilo de los widgets" 228 | 229 | #: data/io.github.fsobolev.Cavalier.gschema.xml:98 src/preferences_window.py:273 230 | msgid "Style used by Adwaita widgets." 231 | msgstr "Estilo usado por los widgets de Adwaita." 232 | 233 | #: data/io.github.fsobolev.Cavalier.gschema.xml:106 src/preferences_window.py:136 234 | msgid "Sharp corners" 235 | msgstr "Esquinas planas" 236 | 237 | #: data/io.github.fsobolev.Cavalier.gschema.xml:107 src/preferences_window.py:138 238 | msgid "Whether the main window corners should be sharp." 239 | msgstr "Si la ventana principal debe ser plana." 240 | 241 | #: data/io.github.fsobolev.Cavalier.gschema.xml:111 242 | msgid "Color Profiles" 243 | msgstr "Perfiles de Color" 244 | 245 | #: data/io.github.fsobolev.Cavalier.gschema.xml:115 246 | msgid "Index of active color profile" 247 | msgstr "Índice del perfil de color activo" 248 | 249 | #: src/preferences_window.py:59 250 | msgid "Drawing Mode" 251 | msgstr "Modo de Dibujado" 252 | 253 | #: src/preferences_window.py:63 254 | msgid "Wave" 255 | msgstr "Onda" 256 | 257 | #: src/preferences_window.py:70 258 | msgid "Levels" 259 | msgstr "Niveles" 260 | 261 | #: src/preferences_window.py:78 262 | msgid "Particles" 263 | msgstr "Partículas" 264 | 265 | #: src/preferences_window.py:86 src/preferences_window.py:193 266 | msgid "Bars" 267 | msgstr "Barras" 268 | 269 | #: src/preferences_window.py:123 270 | msgid "" 271 | "This setting only affects \"levels\" and \"particles\" modes.\n" 272 | "0 - square, 1 - round" 273 | msgstr "" 274 | "Este ajuste solo afecta los modos \"niveles\" y \"partículas\".\n" 275 | "0 - cuadrado, 1 - redondeado" 276 | 277 | #: src/preferences_window.py:173 278 | msgid "Import" 279 | msgstr "Importar" 280 | 281 | #: src/preferences_window.py:178 282 | msgid "Export" 283 | msgstr "Exportar" 284 | 285 | #: src/preferences_window.py:231 286 | msgid "Mono" 287 | msgstr "Mono" 288 | 289 | #: src/preferences_window.py:233 290 | msgid "Stereo" 291 | msgstr "Estéreo" 292 | 293 | #: src/preferences_window.py:239 294 | msgid "Off" 295 | msgstr "Apagado" 296 | 297 | #: src/preferences_window.py:239 298 | msgid "Monstercat" 299 | msgstr "Monstercat" 300 | 301 | #: src/preferences_window.py:242 302 | msgid "Noise Reduction" 303 | msgstr "Reducción de Ruido" 304 | 305 | #: src/preferences_window.py:243 306 | msgid "0 - noisy, 1 - smooth" 307 | msgstr "0 - ruidoso, 1 - suave" 308 | 309 | #: src/preferences_window.py:264 src/preferences_window.py:285 310 | #: src/shortcuts_dialog.ui:82 311 | msgid "Colors" 312 | msgstr "Colores" 313 | 314 | #: src/preferences_window.py:278 315 | msgid "Light" 316 | msgstr "Claro" 317 | 318 | #: src/preferences_window.py:280 319 | msgid "Dark" 320 | msgstr "Obscuro" 321 | 322 | #: src/preferences_window.py:291 323 | msgid "Profile:" 324 | msgstr "Perfil:" 325 | 326 | #: src/preferences_window.py:299 327 | msgid "Add new profile" 328 | msgstr "Crear nuevo perfil" 329 | 330 | #: src/preferences_window.py:310 331 | msgid "Type a name for a new profile" 332 | msgstr "Escriba un nombre para un nuevo perfil" 333 | 334 | #: src/preferences_window.py:312 src/preferences_window.py:508 335 | #: src/preferences_window.py:547 336 | msgid "Add" 337 | msgstr "Añadir" 338 | 339 | #: src/preferences_window.py:322 340 | msgid "Remove profile" 341 | msgstr "Eliminar perfil" 342 | 343 | #: src/preferences_window.py:329 344 | msgid "Are you sure you want to remove this profile?" 345 | msgstr "¿Está seguro de que quiere eliminar este perfil?" 346 | 347 | #: src/preferences_window.py:336 348 | msgid "Remove" 349 | msgstr "Eliminar" 350 | 351 | #: src/preferences_window.py:343 src/preferences_window.py:695 352 | #: src/preferences_window.py:714 353 | msgid "Cancel" 354 | msgstr "Cancelar" 355 | 356 | #: src/preferences_window.py:353 357 | msgid "Foreground" 358 | msgstr "Énfasis" 359 | 360 | #: src/preferences_window.py:358 361 | msgid "Background" 362 | msgstr "Fondo" 363 | 364 | #: src/preferences_window.py:489 src/preferences_window.py:512 365 | #: src/preferences_window.py:530 src/preferences_window.py:551 366 | msgid "Select color" 367 | msgstr "Seleccionar color" 368 | 369 | #: src/preferences_window.py:496 src/preferences_window.py:537 370 | msgid "Remove color" 371 | msgstr "Eliminar color" 372 | 373 | #: src/preferences_window.py:517 src/preferences_window.py:556 374 | msgid "Add color" 375 | msgstr "Añadir color" 376 | 377 | #: src/preferences_window.py:584 378 | msgid "This name is already in use." 379 | msgstr "Este nombre ya está en uso." 380 | 381 | #: src/preferences_window.py:694 382 | msgid "Import Settings" 383 | msgstr "Importar Ajustes" 384 | 385 | #: src/preferences_window.py:695 386 | msgid "Open" 387 | msgstr "Abrir" 388 | 389 | #: src/preferences_window.py:698 src/preferences_window.py:717 390 | msgid "Cavalier Settings File (*.cavalier)" 391 | msgstr "Archivo de Ajustes de Cavalier (*.cavalier)" 392 | 393 | #: src/preferences_window.py:702 394 | msgid "All Files" 395 | msgstr "Todos los Archivos" 396 | 397 | #: src/preferences_window.py:713 398 | msgid "Export Settings" 399 | msgstr "Exportar Ajustes" 400 | 401 | #: src/preferences_window.py:714 402 | msgid "Save" 403 | msgstr "Guardar" 404 | 405 | #: src/window.py:109 406 | msgid "Preferences" 407 | msgstr "Preferencias" 408 | 409 | #: src/window.py:110 410 | msgid "Keyboard Shortcuts" 411 | msgstr "Atajos de Teclado" 412 | 413 | #: src/window.py:111 414 | msgid "About" 415 | msgstr "Acerca de" 416 | 417 | #: src/window.py:112 418 | msgid "Quit" 419 | msgstr "Salir" 420 | 421 | #: src/shortcuts_dialog.ui:15 422 | msgid "Change Drawing Mode" 423 | msgstr "Cambiar Modo de Dibujado" 424 | 425 | #: src/shortcuts_dialog.ui:21 426 | msgid "Change Drawing Area Margin" 427 | msgstr "Cambiar Margen del Area de Dibujado" 428 | 429 | #: src/shortcuts_dialog.ui:27 430 | msgid "Change Offset Between Items" 431 | msgstr "Cambiar Espacio Entre Elementos" 432 | 433 | #: src/shortcuts_dialog.ui:33 434 | msgid "Change Roundness of Items" 435 | msgstr "Cambiar Redondez de Elementos" 436 | 437 | #: src/shortcuts_dialog.ui:39 438 | msgid "Toggle Sharp Corners" 439 | msgstr "Alternar Bordes Planos" 440 | 441 | #: src/shortcuts_dialog.ui:45 442 | msgid "Toggle Window Controls" 443 | msgstr "Alternar Controles de Ventana" 444 | 445 | #: src/shortcuts_dialog.ui:51 446 | msgid "Toggle Autohide Headerbar" 447 | msgstr "Alternar Ocultar Barra de Título Automáticamente" 448 | 449 | #: src/shortcuts_dialog.ui:62 450 | msgid "Change Number of Bars" 451 | msgstr "Cambiar Número de Barras" 452 | 453 | #: src/shortcuts_dialog.ui:68 454 | msgid "Toggle Channels" 455 | msgstr "Alternar Canales" 456 | 457 | #: src/shortcuts_dialog.ui:74 458 | msgid "Toggle Reverse Order" 459 | msgstr "Alternar Orden Inverso" 460 | 461 | #: src/shortcuts_dialog.ui:85 462 | msgid "Change Colors Profile" 463 | msgstr "Cambiar Perfil de Colores" 464 | 465 | #: src/shortcuts_dialog.ui:91 466 | msgid "Toggle Widgets Style" 467 | msgstr "Alternar Estilo de Widgets" 468 | -------------------------------------------------------------------------------- /po/de.po: -------------------------------------------------------------------------------- 1 | # German translation for the cavalier's package 2 | # Copyright (C) 2022 Fyodor Sobolev 3 | # This file is distributed under the same license as the cavalier's package. 4 | # gregorni , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: cavalier\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-01-29 12:46+0300\n" 11 | "PO-Revision-Date: 2023-01-28 13:37+0100\n" 12 | "Last-Translator: gregorni \n" 13 | "Language-Team: German \n" 14 | "Language: de\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: data/io.github.fsobolev.Cavalier.desktop.in:3 20 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:6 21 | msgid "Cavalier" 22 | msgstr "Cavalier" 23 | 24 | #: data/io.github.fsobolev.Cavalier.desktop.in:4 25 | msgid "Audio Visualizer" 26 | msgstr "Audio-Visualisierer" 27 | 28 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:7 29 | msgid "Audio visualizer based on CAVA." 30 | msgstr "Auf CAVA basierter Audio-Visualisierer" 31 | 32 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:9 33 | msgid "" 34 | "Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita " 35 | "interface." 36 | msgstr "" 37 | "Cavalier ist ein auf CAVA basierter Audio-Visualisierer mit einer " 38 | "konfigurierbaren LibAdwaita-Oberfläche." 39 | 40 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:11 41 | msgid "4 drawing modes!" 42 | msgstr "4 Zeichenmodi!" 43 | 44 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:12 45 | msgid "" 46 | "Set single color or up to 10 colors gradient for background and foreground." 47 | msgstr "" 48 | "Eine einzige Farbe oder einen bis zu 10-farbigen Farbverlauf für Vorder- und " 49 | "Hintergrund einstellen." 50 | 51 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:13 52 | msgid "Configure smoothing, noise reduction and a few other CAVA settings." 53 | msgstr "Ebenung, Lärmreduktion und andere CAVA-Einstellungen konfigurieren." 54 | 55 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:19 src/main.py:72 56 | #: src/main.py:74 57 | msgid "Fyodor Sobolev" 58 | msgstr "Fyodor Sobolev" 59 | 60 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:41 61 | msgid "Second release of Cavalier." 62 | msgstr "Die zweite Version von Cavalier." 63 | 64 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:43 65 | msgid "New drawing mode — Particles!" 66 | msgstr "Neuer Zeichenmodus - Partikel!" 67 | 68 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:44 69 | msgid "" 70 | "Color profiles! Create as many as you want and change between them " 71 | "instantly. Unfortunately, this new feature required to change how the " 72 | "application saves colors, and because of this your previous colors settings " 73 | "will be lost after installing this update." 74 | msgstr "" 75 | "Farbprofile! Erstellen Sie beliebig viele und wechseln Sie zwischen ihnen im " 76 | "Handumdrehen. Leider werden Ihre bisherigen Farbeinstellungen verloren " 77 | "gehen, da für dieses neue Feature Farbprofile anders gespeichert werden als " 78 | "bisher." 79 | 80 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:45 81 | msgid "Added keyboard shortcuts to change most of the settings on the fly." 82 | msgstr "Tastenkürzel für die meisten Einstellungen hinzugefügt." 83 | 84 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:46 85 | msgid "Added option to show/hide window controls." 86 | msgstr "Einstellung zum Anzeigen/Ausblenden der Fensterregelung hinzugefügt." 87 | 88 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:47 89 | msgid "Added option to autohide headerbar when the main window is not focused." 90 | msgstr "Einstellung zum automatischen Ausblenden der Kopfleiste hinzugefügt." 91 | 92 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:48 93 | msgid "" 94 | "Added option to change roundness of items in \"levels\" and \"particles\" " 95 | "modes." 96 | msgstr "" 97 | "Einstellung für die Rundung der Elemente im Partikel- und Stufenmodus " 98 | "hinzugefügt." 99 | 100 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:49 101 | msgid "Added option to reverse the order of bars." 102 | msgstr "Option für das Umkehren der Reihenfolge der Säulen hinzugefügt." 103 | 104 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:50 105 | msgid "Import/Export Settings" 106 | msgstr "Einstellungen importieren/exportieren" 107 | 108 | #: data/io.github.fsobolev.Cavalier.gschema.xml:5 109 | msgid "Window size" 110 | msgstr "Fenstergröße" 111 | 112 | #: data/io.github.fsobolev.Cavalier.gschema.xml:9 113 | msgid "Window maximized state" 114 | msgstr "Maximiertes Fenster" 115 | 116 | #: data/io.github.fsobolev.Cavalier.gschema.xml:10 117 | msgid "Whether main window is maximized or not" 118 | msgstr "Gibt an, ob das Hauptfenster maximiert ist oder nicht" 119 | 120 | #: data/io.github.fsobolev.Cavalier.gschema.xml:14 121 | #: src/preferences_window.py:147 122 | msgid "Window controls" 123 | msgstr "Fensterregler" 124 | 125 | #: data/io.github.fsobolev.Cavalier.gschema.xml:15 126 | #: src/preferences_window.py:149 127 | msgid "Whether to show window control buttons." 128 | msgstr "Buttons der Fensterregelung anzeigen." 129 | 130 | #: data/io.github.fsobolev.Cavalier.gschema.xml:19 131 | #: src/preferences_window.py:158 132 | msgid "Autohide headerbar" 133 | msgstr "Kopfleiste ausblenden" 134 | 135 | #: data/io.github.fsobolev.Cavalier.gschema.xml:20 136 | #: src/preferences_window.py:160 137 | msgid "Whether to hide headerbar when main window is not focused." 138 | msgstr "" 139 | "Kopfleiste automatisch ausblenden, wenn das Hauptfenster nicht fokussiert " 140 | "ist." 141 | 142 | #: data/io.github.fsobolev.Cavalier.gschema.xml:24 143 | msgid "Drawing mode" 144 | msgstr "Zeichenmodus" 145 | 146 | #: data/io.github.fsobolev.Cavalier.gschema.xml:25 147 | msgid "Defines what the visualizer looks like." 148 | msgstr "Legt fest, wie die Visualisierung aussieht." 149 | 150 | #: data/io.github.fsobolev.Cavalier.gschema.xml:35 src/preferences_window.py:97 151 | msgid "Drawing area margin" 152 | msgstr "Rand um die Zeichenfläche" 153 | 154 | #: data/io.github.fsobolev.Cavalier.gschema.xml:36 src/preferences_window.py:99 155 | msgid "Size of gaps around drawing area (in pixels)." 156 | msgstr "Größe des Rands um die Zeichenfläche herum (in Pixel)." 157 | 158 | #: data/io.github.fsobolev.Cavalier.gschema.xml:41 159 | #: src/preferences_window.py:109 160 | msgid "Offset between items" 161 | msgstr "Abstand zwischen Elementen" 162 | 163 | #: data/io.github.fsobolev.Cavalier.gschema.xml:42 164 | #: src/preferences_window.py:111 165 | msgid "" 166 | "The size of spaces between elements in \"levels\", \"particles\" and \"bars" 167 | "\" modes (in percent)." 168 | msgstr "" 169 | "Der Abstand zwischen den Elementen im Säulen-, Partikel- und Stufenmodus (in " 170 | "Prozent)." 171 | 172 | #: data/io.github.fsobolev.Cavalier.gschema.xml:47 173 | #: src/preferences_window.py:121 174 | msgid "Roundness of items" 175 | msgstr "Rundung der Elemente" 176 | 177 | #: data/io.github.fsobolev.Cavalier.gschema.xml:48 178 | msgid "This setting only affects \"levels\" and \"particles\" modes." 179 | msgstr "Diese Einstellung betrifft nur Partikel- und Stufenmodus." 180 | 181 | #: data/io.github.fsobolev.Cavalier.gschema.xml:53 182 | msgid "Number of bars" 183 | msgstr "Anzahl der Säulen" 184 | 185 | #: data/io.github.fsobolev.Cavalier.gschema.xml:54 186 | msgid "Number of bars in CAVA config" 187 | msgstr "Anzahl der Säulen in der CAVA Konfiguration" 188 | 189 | #: data/io.github.fsobolev.Cavalier.gschema.xml:59 190 | #: src/preferences_window.py:204 191 | msgid "Automatic sensitivity" 192 | msgstr "Automatische Empfindlichkeit" 193 | 194 | #: data/io.github.fsobolev.Cavalier.gschema.xml:60 195 | #: src/preferences_window.py:206 196 | msgid "Attempt to decrease sensitivity if the bars peak." 197 | msgstr "Empfindlichkeit senken, wenn die Säulen den Höchststand erreichen." 198 | 199 | #: data/io.github.fsobolev.Cavalier.gschema.xml:64 200 | #: src/preferences_window.py:214 201 | msgid "Sensitivity" 202 | msgstr "Empfindlichkeit" 203 | 204 | #: data/io.github.fsobolev.Cavalier.gschema.xml:65 205 | #: src/preferences_window.py:216 206 | msgid "" 207 | "Manual sensitivity. If automatic sensitivity is enabled, this will only be " 208 | "the initial value." 209 | msgstr "" 210 | "Manuelle Empfindlichkeit. Wenn Automatische Empfindlichkeit eingeschaltet " 211 | "ist, wird dieser Wert nur als Ursprungswert eingestellt." 212 | 213 | #: data/io.github.fsobolev.Cavalier.gschema.xml:70 214 | #: src/preferences_window.py:225 215 | msgid "Channels" 216 | msgstr "Kanäle" 217 | 218 | #: data/io.github.fsobolev.Cavalier.gschema.xml:71 219 | msgid "Mono or stereo" 220 | msgstr "Mono oder Stereo" 221 | 222 | #: data/io.github.fsobolev.Cavalier.gschema.xml:79 223 | #: src/preferences_window.py:237 224 | msgid "Smoothing" 225 | msgstr "Ebenung" 226 | 227 | #: data/io.github.fsobolev.Cavalier.gschema.xml:87 228 | msgid "Noise reduction" 229 | msgstr "Lärmreduzierung" 230 | 231 | #: data/io.github.fsobolev.Cavalier.gschema.xml:88 232 | msgid "" 233 | "This factor adjusts the integral and gravity filters to keep the signal " 234 | "smooth. 1 will be very slow and smooth, 0 will be fast but noisy." 235 | msgstr "" 236 | "Dieser Wert passt Integral- und Schwerkraftfilter an, um das Signal " 237 | "möglichst eben zu halten. 1 ist sehr langsam und eben, 0 ist schnell und " 238 | "unruhig." 239 | 240 | #: data/io.github.fsobolev.Cavalier.gschema.xml:93 241 | #: src/preferences_window.py:255 242 | msgid "Reverse order" 243 | msgstr "Reihenfolge umkehren" 244 | 245 | #: data/io.github.fsobolev.Cavalier.gschema.xml:97 246 | #: src/preferences_window.py:272 247 | msgid "Widgets style" 248 | msgstr "Stil" 249 | 250 | #: data/io.github.fsobolev.Cavalier.gschema.xml:98 251 | #: src/preferences_window.py:273 252 | msgid "Style used by Adwaita widgets." 253 | msgstr "Stil der Adwaita-Objekte" 254 | 255 | #: data/io.github.fsobolev.Cavalier.gschema.xml:106 256 | #: src/preferences_window.py:136 257 | msgid "Sharp corners" 258 | msgstr "Spitze Ecken" 259 | 260 | #: data/io.github.fsobolev.Cavalier.gschema.xml:107 261 | #: src/preferences_window.py:138 262 | msgid "Whether the main window corners should be sharp." 263 | msgstr "Die Ecken des Hauptfensters zuspitzen." 264 | 265 | #: data/io.github.fsobolev.Cavalier.gschema.xml:111 266 | msgid "Color Profiles" 267 | msgstr "Farbprofile" 268 | 269 | #: data/io.github.fsobolev.Cavalier.gschema.xml:115 270 | msgid "Index of active color profile" 271 | msgstr "Liste der aktiven Farprofile" 272 | 273 | #: src/preferences_window.py:59 274 | msgid "Drawing Mode" 275 | msgstr "Zeichenmodus" 276 | 277 | #: src/preferences_window.py:63 278 | msgid "Wave" 279 | msgstr "Welle" 280 | 281 | #: src/preferences_window.py:70 282 | msgid "Levels" 283 | msgstr "Stufen" 284 | 285 | #: src/preferences_window.py:78 286 | msgid "Particles" 287 | msgstr "Partikel" 288 | 289 | #: src/preferences_window.py:86 src/preferences_window.py:193 290 | msgid "Bars" 291 | msgstr "Säulen" 292 | 293 | #: src/preferences_window.py:123 294 | msgid "" 295 | "This setting only affects \"levels\" and \"particles\" modes.\n" 296 | "0 - square, 1 - round" 297 | msgstr "" 298 | "Diese Einstellung betrifft nur Partikel- und Stufenmodus.\n" 299 | "0 - quadratisch, 1 - rund" 300 | 301 | #: src/preferences_window.py:173 302 | msgid "Import" 303 | msgstr "Importieren" 304 | 305 | #: src/preferences_window.py:178 306 | msgid "Export" 307 | msgstr "Exportieren" 308 | 309 | #: src/preferences_window.py:231 310 | msgid "Mono" 311 | msgstr "Mono" 312 | 313 | #: src/preferences_window.py:233 314 | msgid "Stereo" 315 | msgstr "Stereo" 316 | 317 | #: src/preferences_window.py:239 318 | msgid "Off" 319 | msgstr "Aus" 320 | 321 | #: src/preferences_window.py:239 322 | msgid "Monstercat" 323 | msgstr "Monstercat" 324 | 325 | #: src/preferences_window.py:242 326 | msgid "Noise Reduction" 327 | msgstr "Lärmreduktion" 328 | 329 | #: src/preferences_window.py:243 330 | msgid "0 - noisy, 1 - smooth" 331 | msgstr "0 - laut, 1 - sanft" 332 | 333 | #: src/preferences_window.py:264 src/preferences_window.py:285 334 | #: src/shortcuts_dialog.ui:82 335 | msgid "Colors" 336 | msgstr "Farben" 337 | 338 | #: src/preferences_window.py:278 339 | msgid "Light" 340 | msgstr "Hell" 341 | 342 | #: src/preferences_window.py:280 343 | msgid "Dark" 344 | msgstr "Dunkel" 345 | 346 | #: src/preferences_window.py:291 347 | msgid "Profile:" 348 | msgstr "Profil:" 349 | 350 | #: src/preferences_window.py:299 351 | msgid "Add new profile" 352 | msgstr "Neues Profil hinzufügen" 353 | 354 | #: src/preferences_window.py:310 355 | msgid "Type a name for a new profile" 356 | msgstr "Name des neuen Profils" 357 | 358 | #: src/preferences_window.py:312 src/preferences_window.py:508 359 | #: src/preferences_window.py:547 360 | msgid "Add" 361 | msgstr "Hinzufügen" 362 | 363 | #: src/preferences_window.py:322 364 | msgid "Remove profile" 365 | msgstr "Profil entfernen" 366 | 367 | #: src/preferences_window.py:329 368 | msgid "Are you sure you want to remove this profile?" 369 | msgstr "Soll dieses Profil wirklich entfernt werden?" 370 | 371 | #: src/preferences_window.py:336 372 | msgid "Remove" 373 | msgstr "Entfernen" 374 | 375 | #: src/preferences_window.py:343 src/preferences_window.py:695 376 | #: src/preferences_window.py:714 377 | msgid "Cancel" 378 | msgstr "Abbrechen" 379 | 380 | #: src/preferences_window.py:353 381 | msgid "Foreground" 382 | msgstr "Vordergrund" 383 | 384 | #: src/preferences_window.py:358 385 | msgid "Background" 386 | msgstr "Hintergrund" 387 | 388 | #: src/preferences_window.py:489 src/preferences_window.py:512 389 | #: src/preferences_window.py:530 src/preferences_window.py:551 390 | msgid "Select color" 391 | msgstr "Farbe auswählen" 392 | 393 | #: src/preferences_window.py:496 src/preferences_window.py:537 394 | msgid "Remove color" 395 | msgstr "Farbe entfernen" 396 | 397 | #: src/preferences_window.py:517 src/preferences_window.py:556 398 | msgid "Add color" 399 | msgstr "Farbe hinzufügen" 400 | 401 | #: src/preferences_window.py:584 402 | msgid "This name is already in use." 403 | msgstr "Dieser Name wird bereits benutzt." 404 | 405 | #: src/preferences_window.py:694 406 | msgid "Import Settings" 407 | msgstr "Einstellungen importieren" 408 | 409 | #: src/preferences_window.py:695 410 | msgid "Open" 411 | msgstr "Öffnen" 412 | 413 | #: src/preferences_window.py:698 src/preferences_window.py:717 414 | msgid "Cavalier Settings File (*.cavalier)" 415 | msgstr "Cavalier Einstellungsdatei (*.cavalier)" 416 | 417 | #: src/preferences_window.py:702 418 | msgid "All Files" 419 | msgstr "Alle Dateien" 420 | 421 | #: src/preferences_window.py:713 422 | msgid "Export Settings" 423 | msgstr "Einstellungen exportieren" 424 | 425 | #: src/preferences_window.py:714 426 | msgid "Save" 427 | msgstr "Speichern" 428 | 429 | #: src/window.py:109 430 | msgid "Preferences" 431 | msgstr "Einstellungen" 432 | 433 | #: src/window.py:110 434 | msgid "Keyboard Shortcuts" 435 | msgstr "Tastenkürzel" 436 | 437 | #: src/window.py:111 438 | msgid "About" 439 | msgstr "Über" 440 | 441 | #: src/window.py:112 442 | msgid "Quit" 443 | msgstr "Schließen" 444 | 445 | #: src/shortcuts_dialog.ui:15 446 | msgid "Change Drawing Mode" 447 | msgstr "Zeichenmodus wechseln" 448 | 449 | #: src/shortcuts_dialog.ui:21 450 | msgid "Change Drawing Area Margin" 451 | msgstr "Rand um die Zeichenfläche ändern" 452 | 453 | #: src/shortcuts_dialog.ui:27 454 | msgid "Change Offset Between Items" 455 | msgstr "Abstand zwischen Elementen ändern" 456 | 457 | #: src/shortcuts_dialog.ui:33 458 | msgid "Change Roundness of Items" 459 | msgstr "Rundung der Elemente ändern" 460 | 461 | #: src/shortcuts_dialog.ui:39 462 | msgid "Toggle Sharp Corners" 463 | msgstr "Spitze Ecken umschalten" 464 | 465 | #: src/shortcuts_dialog.ui:45 466 | msgid "Toggle Window Controls" 467 | msgstr "Fensterregler umschalten" 468 | 469 | #: src/shortcuts_dialog.ui:51 470 | msgid "Toggle Autohide Headerbar" 471 | msgstr "Ausblenden der Kopfleiste umschalten" 472 | 473 | #: src/shortcuts_dialog.ui:62 474 | msgid "Change Number of Bars" 475 | msgstr "Anzahl der Säulen ändern" 476 | 477 | #: src/shortcuts_dialog.ui:68 478 | msgid "Toggle Channels" 479 | msgstr "Kanäle umschalten" 480 | 481 | #: src/shortcuts_dialog.ui:74 482 | msgid "Toggle Reverse Order" 483 | msgstr "Reihenfolge umkehren" 484 | 485 | #: src/shortcuts_dialog.ui:85 486 | msgid "Change Colors Profile" 487 | msgstr "Farbprofil wechseln" 488 | 489 | #: src/shortcuts_dialog.ui:91 490 | msgid "Toggle Widgets Style" 491 | msgstr "Stil umschalten" 492 | 493 | #~ msgid "" 494 | #~ "3 drawing modes: weird Wave, retro-ish Levels and classic CAVA look - " 495 | #~ "Bars!" 496 | #~ msgstr "" 497 | #~ "3 Zeichenmodi: seltsame Welle, retro-artige Stufen und der klassische " 498 | #~ "Cava-Look - Säulen!" 499 | 500 | #~ msgid "Foreground colors" 501 | #~ msgstr "Vordergrundfarben" 502 | 503 | #~ msgid "The array of foregound colors (RGBA)." 504 | #~ msgstr "Palette der Vordergrundfarben" 505 | 506 | #~ msgid "Background colors" 507 | #~ msgstr "Hintergrundfarben" 508 | 509 | #~ msgid "The array of background colors (RGBA)." 510 | #~ msgstr "Palette der Hintergrundfarben" 511 | -------------------------------------------------------------------------------- /po/fr.po: -------------------------------------------------------------------------------- 1 | # French translation for the cavalier's package. 2 | # Copyright (C) 2022 Fyodor Sobolev 3 | # This file is distributed under the same license as the cavalier package. 4 | # Irénée Thirion , 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: cavalier\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-01-29 12:46+0300\n" 11 | "PO-Revision-Date: 2023-01-30 10:59+0100\n" 12 | "Last-Translator: Irénée Thirion \n" 13 | "Language-Team: \n" 14 | "Language: fr\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 19 | "X-Generator: Poedit 3.2.2\n" 20 | 21 | #: data/io.github.fsobolev.Cavalier.desktop.in:3 22 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:6 23 | msgid "Cavalier" 24 | msgstr "Cavalier" 25 | 26 | #: data/io.github.fsobolev.Cavalier.desktop.in:4 27 | msgid "Audio Visualizer" 28 | msgstr "Visualiseur audio" 29 | 30 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:7 31 | msgid "Audio visualizer based on CAVA." 32 | msgstr "Visualiseur audio basé sur CAVA." 33 | 34 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:9 35 | msgid "" 36 | "Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita " 37 | "interface." 38 | msgstr "" 39 | "Cavalier est un visualiseur audio basé sur CAVA avec une interface " 40 | "LibAdwaita personnalisable." 41 | 42 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:11 43 | msgid "4 drawing modes!" 44 | msgstr "4 modes de dessin !" 45 | 46 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:12 47 | msgid "" 48 | "Set single color or up to 10 colors gradient for background and foreground." 49 | msgstr "" 50 | "Définissez une couleur unique ou un dégradé pouvant aller jusqu’à 10 " 51 | "couleurs, pour l’arrière-plan et le premier plan." 52 | 53 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:13 54 | msgid "Configure smoothing, noise reduction and a few other CAVA settings." 55 | msgstr "" 56 | "Configurez le lissage, la réduction du bruit et d’autres paramètres CAVA." 57 | 58 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:19 src/main.py:72 59 | #: src/main.py:74 60 | msgid "Fyodor Sobolev" 61 | msgstr "Fyodor Sobolev" 62 | 63 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:41 64 | msgid "Second release of Cavalier." 65 | msgstr "Seconde version de Cavalier." 66 | 67 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:43 68 | msgid "New drawing mode — Particles!" 69 | msgstr "Nouveau mode de dessin — Particules !" 70 | 71 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:44 72 | msgid "" 73 | "Color profiles! Create as many as you want and change between them " 74 | "instantly. Unfortunately, this new feature required to change how the " 75 | "application saves colors, and because of this your previous colors settings " 76 | "will be lost after installing this update." 77 | msgstr "" 78 | "Profils de couleurs ! Créez-en autant que vous le souhaitez et basculez de " 79 | "l’un à l’autre instantanément. Malheureusement, cette nouvelle " 80 | "fonctionnalité requiert de modifier la façon dont l’application enregistre " 81 | "les couleurs, ce qui fera que vos paramètres de couleurs précédents seront " 82 | "perdus après cette mise à jour." 83 | 84 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:45 85 | msgid "Added keyboard shortcuts to change most of the settings on the fly." 86 | msgstr "" 87 | "Ajout de raccourcis clavier pour changer la plupart des paramètres à la " 88 | "volée." 89 | 90 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:46 91 | msgid "Added option to show/hide window controls." 92 | msgstr "" 93 | "Ajout d’une option pour afficher ou masquer les boutons de contrôle de la " 94 | "fenêtre." 95 | 96 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:47 97 | msgid "Added option to autohide headerbar when the main window is not focused." 98 | msgstr "" 99 | "Ajout d’une option pour masquer automatiquement la barre supérieure quand la " 100 | "fenêtre principale n’est pas focalisée." 101 | 102 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:48 103 | msgid "" 104 | "Added option to change roundness of items in \"levels\" and \"particles\" " 105 | "modes." 106 | msgstr "" 107 | "Ajout d’une option permettant de modifier la rondeur des objets dans les " 108 | "modes « niveaux » et « particules »." 109 | 110 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:49 111 | msgid "Added option to reverse the order of bars." 112 | msgstr "Ajout d’une option pour inverser l’ordre des barres." 113 | 114 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:50 115 | msgid "Import/Export Settings" 116 | msgstr "Paramètres d’importation / exportation" 117 | 118 | #: data/io.github.fsobolev.Cavalier.gschema.xml:5 119 | msgid "Window size" 120 | msgstr "Taille de la fenêtre" 121 | 122 | #: data/io.github.fsobolev.Cavalier.gschema.xml:9 123 | msgid "Window maximized state" 124 | msgstr "État maximisé de la fenêtre" 125 | 126 | #: data/io.github.fsobolev.Cavalier.gschema.xml:10 127 | msgid "Whether main window is maximized or not" 128 | msgstr "Indique si la fenêtre principale est maximisée ou non" 129 | 130 | #: data/io.github.fsobolev.Cavalier.gschema.xml:14 131 | #: src/preferences_window.py:147 132 | msgid "Window controls" 133 | msgstr "Contrôles de la fenêtre" 134 | 135 | #: data/io.github.fsobolev.Cavalier.gschema.xml:15 136 | #: src/preferences_window.py:149 137 | msgid "Whether to show window control buttons." 138 | msgstr "Indique s’il faut afficher les boutons de contrôle de la fenêtre." 139 | 140 | #: data/io.github.fsobolev.Cavalier.gschema.xml:19 141 | #: src/preferences_window.py:158 142 | msgid "Autohide headerbar" 143 | msgstr "Masquer automatiquement la barre supérieure" 144 | 145 | #: data/io.github.fsobolev.Cavalier.gschema.xml:20 146 | #: src/preferences_window.py:160 147 | msgid "Whether to hide headerbar when main window is not focused." 148 | msgstr "" 149 | "Indique s’il faut masquer la barre supérieure lorsque la fenêtre n’est pas " 150 | "focalisée." 151 | 152 | #: data/io.github.fsobolev.Cavalier.gschema.xml:24 153 | msgid "Drawing mode" 154 | msgstr "Mode de dessin" 155 | 156 | #: data/io.github.fsobolev.Cavalier.gschema.xml:25 157 | msgid "Defines what the visualizer looks like." 158 | msgstr "Définit l’apparence du visualiseur." 159 | 160 | #: data/io.github.fsobolev.Cavalier.gschema.xml:35 src/preferences_window.py:97 161 | msgid "Drawing area margin" 162 | msgstr "Marge autour de l’aire de dessin" 163 | 164 | #: data/io.github.fsobolev.Cavalier.gschema.xml:36 src/preferences_window.py:99 165 | msgid "Size of gaps around drawing area (in pixels)." 166 | msgstr "Espace (en pixels) laissé autour de l’aire dessinée." 167 | 168 | #: data/io.github.fsobolev.Cavalier.gschema.xml:41 169 | #: src/preferences_window.py:109 170 | msgid "Offset between items" 171 | msgstr "Espace entre les éléments" 172 | 173 | #: data/io.github.fsobolev.Cavalier.gschema.xml:42 174 | #: src/preferences_window.py:111 175 | msgid "" 176 | "The size of spaces between elements in \"levels\", \"particles\" and " 177 | "\"bars\" modes (in percent)." 178 | msgstr "" 179 | "Espace laissé entre les éléments dans les modes « niveaux », « particules » " 180 | "et « barres » (en pourcentages)." 181 | 182 | #: data/io.github.fsobolev.Cavalier.gschema.xml:47 183 | #: src/preferences_window.py:121 184 | msgid "Roundness of items" 185 | msgstr "Rondeur des éléments" 186 | 187 | #: data/io.github.fsobolev.Cavalier.gschema.xml:48 188 | msgid "This setting only affects \"levels\" and \"particles\" modes." 189 | msgstr "Ce paramètre n’affecte que les modes « niveaux » et « particules »." 190 | 191 | #: data/io.github.fsobolev.Cavalier.gschema.xml:53 192 | msgid "Number of bars" 193 | msgstr "Nombre de barres" 194 | 195 | #: data/io.github.fsobolev.Cavalier.gschema.xml:54 196 | msgid "Number of bars in CAVA config" 197 | msgstr "Nombre de barres dans la configuration CAVA" 198 | 199 | #: data/io.github.fsobolev.Cavalier.gschema.xml:59 200 | #: src/preferences_window.py:204 201 | msgid "Automatic sensitivity" 202 | msgstr "Sensibilité automatique" 203 | 204 | #: data/io.github.fsobolev.Cavalier.gschema.xml:60 205 | #: src/preferences_window.py:206 206 | msgid "Attempt to decrease sensitivity if the bars peak." 207 | msgstr "Essayer de diminuer la sensibilité si les barres atteignent un pic." 208 | 209 | #: data/io.github.fsobolev.Cavalier.gschema.xml:64 210 | #: src/preferences_window.py:214 211 | msgid "Sensitivity" 212 | msgstr "Sensibilité" 213 | 214 | #: data/io.github.fsobolev.Cavalier.gschema.xml:65 215 | #: src/preferences_window.py:216 216 | msgid "" 217 | "Manual sensitivity. If automatic sensitivity is enabled, this will only be " 218 | "the initial value." 219 | msgstr "" 220 | "Sensibilité définie manuellement. Si la sensibilité automatique est activée, " 221 | "ce sera la valeur initiale." 222 | 223 | #: data/io.github.fsobolev.Cavalier.gschema.xml:70 224 | #: src/preferences_window.py:225 225 | msgid "Channels" 226 | msgstr "Canaux" 227 | 228 | #: data/io.github.fsobolev.Cavalier.gschema.xml:71 229 | msgid "Mono or stereo" 230 | msgstr "Mono ou stéréo" 231 | 232 | #: data/io.github.fsobolev.Cavalier.gschema.xml:79 233 | #: src/preferences_window.py:237 234 | msgid "Smoothing" 235 | msgstr "Lissage" 236 | 237 | #: data/io.github.fsobolev.Cavalier.gschema.xml:87 238 | msgid "Noise reduction" 239 | msgstr "Réduction de bruit" 240 | 241 | #: data/io.github.fsobolev.Cavalier.gschema.xml:88 242 | msgid "" 243 | "This factor adjusts the integral and gravity filters to keep the signal " 244 | "smooth. 1 will be very slow and smooth, 0 will be fast but noisy." 245 | msgstr "" 246 | "Ce facteur ajuste les filtres de gravité et d’intégrale pour garder un " 247 | "signal lisse. 1 sera très lent et lisse, 0 sera vif mais bruyant." 248 | 249 | #: data/io.github.fsobolev.Cavalier.gschema.xml:93 250 | #: src/preferences_window.py:255 251 | msgid "Reverse order" 252 | msgstr "Inverser l’ordre" 253 | 254 | #: data/io.github.fsobolev.Cavalier.gschema.xml:97 255 | #: src/preferences_window.py:272 256 | msgid "Widgets style" 257 | msgstr "Style des widgets" 258 | 259 | #: data/io.github.fsobolev.Cavalier.gschema.xml:98 260 | #: src/preferences_window.py:273 261 | msgid "Style used by Adwaita widgets." 262 | msgstr "Style des widgets Adwaita." 263 | 264 | #: data/io.github.fsobolev.Cavalier.gschema.xml:106 265 | #: src/preferences_window.py:136 266 | msgid "Sharp corners" 267 | msgstr "Angles saillants" 268 | 269 | #: data/io.github.fsobolev.Cavalier.gschema.xml:107 270 | #: src/preferences_window.py:138 271 | msgid "Whether the main window corners should be sharp." 272 | msgstr "Indique si les angles de la fenêtre principale doivent être saillants." 273 | 274 | #: data/io.github.fsobolev.Cavalier.gschema.xml:111 275 | msgid "Color Profiles" 276 | msgstr "Profils de couleur" 277 | 278 | #: data/io.github.fsobolev.Cavalier.gschema.xml:115 279 | msgid "Index of active color profile" 280 | msgstr "Index des profils de couleur actifs" 281 | 282 | #: src/preferences_window.py:59 283 | msgid "Drawing Mode" 284 | msgstr "Mode de dessin" 285 | 286 | #: src/preferences_window.py:63 287 | msgid "Wave" 288 | msgstr "Ondulations" 289 | 290 | #: src/preferences_window.py:70 291 | msgid "Levels" 292 | msgstr "Niveaux" 293 | 294 | #: src/preferences_window.py:78 295 | msgid "Particles" 296 | msgstr "Particules" 297 | 298 | #: src/preferences_window.py:86 src/preferences_window.py:193 299 | msgid "Bars" 300 | msgstr "Barres" 301 | 302 | #: src/preferences_window.py:123 303 | msgid "" 304 | "This setting only affects \"levels\" and \"particles\" modes.\n" 305 | "0 - square, 1 - round" 306 | msgstr "" 307 | "Ce paramètre n’affecte que les modes « niveaux » et « particules ».\n" 308 | "0 - carré, 1 - rond" 309 | 310 | #: src/preferences_window.py:173 311 | msgid "Import" 312 | msgstr "Importer" 313 | 314 | #: src/preferences_window.py:178 315 | msgid "Export" 316 | msgstr "Exporter" 317 | 318 | #: src/preferences_window.py:231 319 | msgid "Mono" 320 | msgstr "Mono" 321 | 322 | #: src/preferences_window.py:233 323 | msgid "Stereo" 324 | msgstr "Stéréo" 325 | 326 | #: src/preferences_window.py:239 327 | msgid "Off" 328 | msgstr "Désactivé" 329 | 330 | #: src/preferences_window.py:239 331 | msgid "Monstercat" 332 | msgstr "Monstercat" 333 | 334 | #: src/preferences_window.py:242 335 | msgid "Noise Reduction" 336 | msgstr "Réduction de bruit" 337 | 338 | #: src/preferences_window.py:243 339 | msgid "0 - noisy, 1 - smooth" 340 | msgstr "0 - bruyant, 1 - doux" 341 | 342 | #: src/preferences_window.py:264 src/preferences_window.py:285 343 | #: src/shortcuts_dialog.ui:82 344 | msgid "Colors" 345 | msgstr "Couleurs" 346 | 347 | #: src/preferences_window.py:278 348 | msgid "Light" 349 | msgstr "Clair" 350 | 351 | #: src/preferences_window.py:280 352 | msgid "Dark" 353 | msgstr "Sombre" 354 | 355 | #: src/preferences_window.py:291 356 | msgid "Profile:" 357 | msgstr "Profil :" 358 | 359 | #: src/preferences_window.py:299 360 | msgid "Add new profile" 361 | msgstr "Ajouter un nouveau profil" 362 | 363 | #: src/preferences_window.py:310 364 | msgid "Type a name for a new profile" 365 | msgstr "Saisissez un nom pour le nouveau profil" 366 | 367 | #: src/preferences_window.py:312 src/preferences_window.py:508 368 | #: src/preferences_window.py:547 369 | msgid "Add" 370 | msgstr "Ajouter" 371 | 372 | #: src/preferences_window.py:322 373 | msgid "Remove profile" 374 | msgstr "Supprimer le profil" 375 | 376 | #: src/preferences_window.py:329 377 | msgid "Are you sure you want to remove this profile?" 378 | msgstr "Êtes-vous sûr de vouloir supprimer ce profil ?" 379 | 380 | #: src/preferences_window.py:336 381 | msgid "Remove" 382 | msgstr "Supprimer" 383 | 384 | #: src/preferences_window.py:343 src/preferences_window.py:695 385 | #: src/preferences_window.py:714 386 | msgid "Cancel" 387 | msgstr "Annuler" 388 | 389 | #: src/preferences_window.py:353 390 | msgid "Foreground" 391 | msgstr "Premier plan" 392 | 393 | #: src/preferences_window.py:358 394 | msgid "Background" 395 | msgstr "Arrière-plan" 396 | 397 | #: src/preferences_window.py:489 src/preferences_window.py:512 398 | #: src/preferences_window.py:530 src/preferences_window.py:551 399 | msgid "Select color" 400 | msgstr "Sélectionner une couleur" 401 | 402 | #: src/preferences_window.py:496 src/preferences_window.py:537 403 | msgid "Remove color" 404 | msgstr "Supprimer la couleur" 405 | 406 | #: src/preferences_window.py:517 src/preferences_window.py:556 407 | msgid "Add color" 408 | msgstr "Ajouter une couleur" 409 | 410 | #: src/preferences_window.py:584 411 | msgid "This name is already in use." 412 | msgstr "Ce nom est déjà utilisé." 413 | 414 | #: src/preferences_window.py:694 415 | msgid "Import Settings" 416 | msgstr "Paramètres d’importation" 417 | 418 | #: src/preferences_window.py:695 419 | msgid "Open" 420 | msgstr "Ouvrir" 421 | 422 | #: src/preferences_window.py:698 src/preferences_window.py:717 423 | msgid "Cavalier Settings File (*.cavalier)" 424 | msgstr "Fichier de paramètres Cavalier (*.cavalier)" 425 | 426 | #: src/preferences_window.py:702 427 | msgid "All Files" 428 | msgstr "Tous les fichiers" 429 | 430 | #: src/preferences_window.py:713 431 | msgid "Export Settings" 432 | msgstr "Paramètres d’exportation" 433 | 434 | #: src/preferences_window.py:714 435 | msgid "Save" 436 | msgstr "Enregistrer" 437 | 438 | #: src/window.py:109 439 | msgid "Preferences" 440 | msgstr "Préférences" 441 | 442 | #: src/window.py:110 443 | msgid "Keyboard Shortcuts" 444 | msgstr "Raccourcis clavier" 445 | 446 | #: src/window.py:111 447 | msgid "About" 448 | msgstr "À propos" 449 | 450 | #: src/window.py:112 451 | msgid "Quit" 452 | msgstr "Quitter" 453 | 454 | #: src/shortcuts_dialog.ui:15 455 | msgid "Change Drawing Mode" 456 | msgstr "Changer le mode de dessin" 457 | 458 | #: src/shortcuts_dialog.ui:21 459 | msgid "Change Drawing Area Margin" 460 | msgstr "Modifier la marge autour de l’aire de dessin" 461 | 462 | #: src/shortcuts_dialog.ui:27 463 | msgid "Change Offset Between Items" 464 | msgstr "Modifier l’espace entre les éléments" 465 | 466 | #: src/shortcuts_dialog.ui:33 467 | msgid "Change Roundness of Items" 468 | msgstr "Modifier la rondeur des éléments" 469 | 470 | #: src/shortcuts_dialog.ui:39 471 | msgid "Toggle Sharp Corners" 472 | msgstr "Activer / désactiver les angles saillants" 473 | 474 | #: src/shortcuts_dialog.ui:45 475 | msgid "Toggle Window Controls" 476 | msgstr "Afficher / masquer les contrôles de la fenêtre" 477 | 478 | #: src/shortcuts_dialog.ui:51 479 | msgid "Toggle Autohide Headerbar" 480 | msgstr "Masquage automatique de la barre supérieure" 481 | 482 | #: src/shortcuts_dialog.ui:62 483 | msgid "Change Number of Bars" 484 | msgstr "Changer le nombre de barres" 485 | 486 | #: src/shortcuts_dialog.ui:68 487 | msgid "Toggle Channels" 488 | msgstr "Changer le canal" 489 | 490 | #: src/shortcuts_dialog.ui:74 491 | msgid "Toggle Reverse Order" 492 | msgstr "Inverser l’ordre" 493 | 494 | #: src/shortcuts_dialog.ui:85 495 | msgid "Change Colors Profile" 496 | msgstr "Changer le profil de couleurs" 497 | 498 | #: src/shortcuts_dialog.ui:91 499 | msgid "Toggle Widgets Style" 500 | msgstr "Changer les styles des widgets" 501 | -------------------------------------------------------------------------------- /po/nl.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2022 Fyodor Sobolev 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # Heimen Stoffels , 2022. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: cavalier\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2023-01-29 12:46+0300\n" 10 | "PO-Revision-Date: 2023-01-29 13:35+0100\n" 11 | "Last-Translator: Heimen Stoffels \n" 12 | "Language-Team: Dutch\n" 13 | "Language: nl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Generator: Poedit 3.2.2\n" 19 | 20 | #: data/io.github.fsobolev.Cavalier.desktop.in:3 21 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:6 22 | msgid "Cavalier" 23 | msgstr "Cavalier" 24 | 25 | #: data/io.github.fsobolev.Cavalier.desktop.in:4 26 | msgid "Audio Visualizer" 27 | msgstr "Audiovisualisatie" 28 | 29 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:7 30 | msgid "Audio visualizer based on CAVA." 31 | msgstr "Audiovisualisatie, gebaseerd op CAVA." 32 | 33 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:9 34 | msgid "" 35 | "Cavalier is an audio visualizer based on CAVA with customizable LibAdwaita " 36 | "interface." 37 | msgstr "" 38 | "Cavalier is een audiovisualisatietoepassing, gemaakt met LibAdwaita en " 39 | "gebaseerd op CAVA." 40 | 41 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:11 42 | msgid "4 drawing modes!" 43 | msgstr "4 weergavemodi!" 44 | 45 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:12 46 | msgid "" 47 | "Set single color or up to 10 colors gradient for background and foreground." 48 | msgstr "Stel een of maximaal tien kleurverlopen in voor voor- en achtergrond." 49 | 50 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:13 51 | msgid "Configure smoothing, noise reduction and a few other CAVA settings." 52 | msgstr "" 53 | "Stel vloeiendheid, ruisonderdrukking en enkele andere CAVA-voorkeuren in." 54 | 55 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:19 src/main.py:72 56 | #: src/main.py:74 57 | msgid "Fyodor Sobolev" 58 | msgstr "Fyodor Sobolev" 59 | 60 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:41 61 | msgid "Second release of Cavalier." 62 | msgstr "De tweede versie van Cavalier." 63 | 64 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:43 65 | msgid "New drawing mode — Particles!" 66 | msgstr "Nieuwe weergavemodus: deeltjes!" 67 | 68 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:44 69 | msgid "" 70 | "Color profiles! Create as many as you want and change between them " 71 | "instantly. Unfortunately, this new feature required to change how the " 72 | "application saves colors, and because of this your previous colors settings " 73 | "will be lost after installing this update." 74 | msgstr "" 75 | "Kleurenprofielen! Maak zo veel profielen als u wilt en wissel met één " 76 | "muisklik van profiel. Helaas moest hiervoor code worden aangepast, dus uw " 77 | "huidige kleurvoorkeuren worden door deze update gewist." 78 | 79 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:45 80 | msgid "Added keyboard shortcuts to change most of the settings on the fly." 81 | msgstr "Nieuw: sneltoetsen om de meeste voorkeuren aan te passen." 82 | 83 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:46 84 | msgid "Added option to show/hide window controls." 85 | msgstr "Nieuw: optie om de titelbalkknoppen te tonen/verbergen." 86 | 87 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:47 88 | msgid "Added option to autohide headerbar when the main window is not focused." 89 | msgstr "" 90 | "Nieuw: optie om de kopbalk te verbergen als het hoofdvenster niet gefocust " 91 | "is." 92 | 93 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:48 94 | msgid "" 95 | "Added option to change roundness of items in \"levels\" and \"particles\" " 96 | "modes." 97 | msgstr "" 98 | "Nieuw: optie om de rondheid van items aan te passen in de niveau- en " 99 | "deeltjesmodi." 100 | 101 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:49 102 | msgid "Added option to reverse the order of bars." 103 | msgstr "Nieuw: optie om de volgorde van balken aan te passen." 104 | 105 | #: data/io.github.fsobolev.Cavalier.metainfo.xml.in:50 106 | msgid "Import/Export Settings" 107 | msgstr "Voorkeuren ex-/importeren" 108 | 109 | #: data/io.github.fsobolev.Cavalier.gschema.xml:5 110 | msgid "Window size" 111 | msgstr "Vensterafmetingen" 112 | 113 | #: data/io.github.fsobolev.Cavalier.gschema.xml:9 114 | msgid "Window maximized state" 115 | msgstr "Venstermaximalisatie" 116 | 117 | #: data/io.github.fsobolev.Cavalier.gschema.xml:10 118 | msgid "Whether main window is maximized or not" 119 | msgstr "Of het venster gemaximaliseerd moet worden." 120 | 121 | #: data/io.github.fsobolev.Cavalier.gschema.xml:14 122 | #: src/preferences_window.py:147 123 | msgid "Window controls" 124 | msgstr "Titelbalkknoppen" 125 | 126 | #: data/io.github.fsobolev.Cavalier.gschema.xml:15 127 | #: src/preferences_window.py:149 128 | msgid "Whether to show window control buttons." 129 | msgstr "Of de titelbalkknoppen getoond dienen te worden." 130 | 131 | #: data/io.github.fsobolev.Cavalier.gschema.xml:19 132 | #: src/preferences_window.py:158 133 | msgid "Autohide headerbar" 134 | msgstr "Kopbalk automatisch verbergen" 135 | 136 | #: data/io.github.fsobolev.Cavalier.gschema.xml:20 137 | #: src/preferences_window.py:160 138 | msgid "Whether to hide headerbar when main window is not focused." 139 | msgstr "" 140 | "Of de kopbalk automatisch moet worden verborgen als het hoofdvenster niet " 141 | "gefocust is." 142 | 143 | #: data/io.github.fsobolev.Cavalier.gschema.xml:24 144 | msgid "Drawing mode" 145 | msgstr "Weergavemodus" 146 | 147 | #: data/io.github.fsobolev.Cavalier.gschema.xml:25 148 | msgid "Defines what the visualizer looks like." 149 | msgstr "Geef aan hoe de visualisatie er uit moet zien." 150 | 151 | #: data/io.github.fsobolev.Cavalier.gschema.xml:35 src/preferences_window.py:97 152 | msgid "Drawing area margin" 153 | msgstr "Weergavemodusmarge" 154 | 155 | #: data/io.github.fsobolev.Cavalier.gschema.xml:36 src/preferences_window.py:99 156 | msgid "Size of gaps around drawing area (in pixels)." 157 | msgstr "De grootte van ruimtes om het weergavegebied heen (in pixels)." 158 | 159 | #: data/io.github.fsobolev.Cavalier.gschema.xml:41 160 | #: src/preferences_window.py:109 161 | msgid "Offset between items" 162 | msgstr "Verschuiving tussen items" 163 | 164 | #: data/io.github.fsobolev.Cavalier.gschema.xml:42 165 | #: src/preferences_window.py:111 166 | msgid "" 167 | "The size of spaces between elements in \"levels\", \"particles\" and " 168 | "\"bars\" modes (in percent)." 169 | msgstr "" 170 | "De ruimte tussen elementen in niveau-, balk- en deeltjesmodi (in procenten)." 171 | 172 | #: data/io.github.fsobolev.Cavalier.gschema.xml:47 173 | #: src/preferences_window.py:121 174 | msgid "Roundness of items" 175 | msgstr "Rondheid van items" 176 | 177 | #: data/io.github.fsobolev.Cavalier.gschema.xml:48 178 | msgid "This setting only affects \"levels\" and \"particles\" modes." 179 | msgstr "Deze voorkeur is alleen van toepassing op de niveau- en deeltjesmodi." 180 | 181 | #: data/io.github.fsobolev.Cavalier.gschema.xml:53 182 | msgid "Number of bars" 183 | msgstr "Aantal balken" 184 | 185 | #: data/io.github.fsobolev.Cavalier.gschema.xml:54 186 | msgid "Number of bars in CAVA config" 187 | msgstr "Het aantal CAVA-balken" 188 | 189 | #: data/io.github.fsobolev.Cavalier.gschema.xml:59 190 | #: src/preferences_window.py:204 191 | msgid "Automatic sensitivity" 192 | msgstr "Automatische gevoeligheid" 193 | 194 | #: data/io.github.fsobolev.Cavalier.gschema.xml:60 195 | #: src/preferences_window.py:206 196 | msgid "Attempt to decrease sensitivity if the bars peak." 197 | msgstr "" 198 | "Probeer de gevoeligheid te verlagen zodra het maximale aantal balken bereikt " 199 | "is." 200 | 201 | #: data/io.github.fsobolev.Cavalier.gschema.xml:64 202 | #: src/preferences_window.py:214 203 | msgid "Sensitivity" 204 | msgstr "Gevoeligheidsgraad" 205 | 206 | #: data/io.github.fsobolev.Cavalier.gschema.xml:65 207 | #: src/preferences_window.py:216 208 | msgid "" 209 | "Manual sensitivity. If automatic sensitivity is enabled, this will only be " 210 | "the initial value." 211 | msgstr "" 212 | "De handmatige gevoeligheidsgraad. Als de automatische modus is ingeschakeld, " 213 | "dan wordt dit als startwaarde gebruikt." 214 | 215 | #: data/io.github.fsobolev.Cavalier.gschema.xml:70 216 | #: src/preferences_window.py:225 217 | msgid "Channels" 218 | msgstr "Kanalen" 219 | 220 | #: data/io.github.fsobolev.Cavalier.gschema.xml:71 221 | msgid "Mono or stereo" 222 | msgstr "Mono of stereo" 223 | 224 | #: data/io.github.fsobolev.Cavalier.gschema.xml:79 225 | #: src/preferences_window.py:237 226 | msgid "Smoothing" 227 | msgstr "Vloeiendheid" 228 | 229 | #: data/io.github.fsobolev.Cavalier.gschema.xml:87 230 | msgid "Noise reduction" 231 | msgstr "Ruisonderdrukking" 232 | 233 | #: data/io.github.fsobolev.Cavalier.gschema.xml:88 234 | msgid "" 235 | "This factor adjusts the integral and gravity filters to keep the signal " 236 | "smooth. 1 will be very slow and smooth, 0 will be fast but noisy." 237 | msgstr "" 238 | "Deze factor bepaalt de zwaarte van de filters om het signaal vloeiend door " 239 | "te laten komen. 1 = erg zwaar, maar vloeiend - 0 = licht, maar met ruis." 240 | 241 | #: data/io.github.fsobolev.Cavalier.gschema.xml:93 242 | #: src/preferences_window.py:255 243 | msgid "Reverse order" 244 | msgstr "Volgorde omdraaien" 245 | 246 | #: data/io.github.fsobolev.Cavalier.gschema.xml:97 247 | #: src/preferences_window.py:272 248 | msgid "Widgets style" 249 | msgstr "Itemstijl" 250 | 251 | #: data/io.github.fsobolev.Cavalier.gschema.xml:98 252 | #: src/preferences_window.py:273 253 | msgid "Style used by Adwaita widgets." 254 | msgstr "De door Adwaita gebruikte itemstijl." 255 | 256 | #: data/io.github.fsobolev.Cavalier.gschema.xml:106 257 | #: src/preferences_window.py:136 258 | msgid "Sharp corners" 259 | msgstr "Scherpe hoeken" 260 | 261 | #: data/io.github.fsobolev.Cavalier.gschema.xml:107 262 | #: src/preferences_window.py:138 263 | msgid "Whether the main window corners should be sharp." 264 | msgstr "Of het hoofdvenster scherpe hoeken dient te hebben." 265 | 266 | #: data/io.github.fsobolev.Cavalier.gschema.xml:111 267 | msgid "Color Profiles" 268 | msgstr "Kleurenprofielen" 269 | 270 | #: data/io.github.fsobolev.Cavalier.gschema.xml:115 271 | msgid "Index of active color profile" 272 | msgstr "Index van actief profiel" 273 | 274 | #: src/preferences_window.py:59 275 | msgid "Drawing Mode" 276 | msgstr "Weergavemodus" 277 | 278 | #: src/preferences_window.py:63 279 | msgid "Wave" 280 | msgstr "Golf" 281 | 282 | #: src/preferences_window.py:70 283 | msgid "Levels" 284 | msgstr "Niveaus" 285 | 286 | #: src/preferences_window.py:78 287 | msgid "Particles" 288 | msgstr "Deeltjes" 289 | 290 | #: src/preferences_window.py:86 src/preferences_window.py:193 291 | msgid "Bars" 292 | msgstr "Balken" 293 | 294 | #: src/preferences_window.py:123 295 | msgid "" 296 | "This setting only affects \"levels\" and \"particles\" modes.\n" 297 | "0 - square, 1 - round" 298 | msgstr "" 299 | "Deze voorkeur is alleen van toepassing op de niveau- en deeltjesmodi.\n" 300 | "0 = vierkant; 1 = rond" 301 | 302 | #: src/preferences_window.py:173 303 | msgid "Import" 304 | msgstr "Importeren" 305 | 306 | #: src/preferences_window.py:178 307 | msgid "Export" 308 | msgstr "Exporteren" 309 | 310 | #: src/preferences_window.py:231 311 | msgid "Mono" 312 | msgstr "Mono" 313 | 314 | #: src/preferences_window.py:233 315 | msgid "Stereo" 316 | msgstr "Stereo" 317 | 318 | #: src/preferences_window.py:239 319 | msgid "Off" 320 | msgstr "Uit" 321 | 322 | #: src/preferences_window.py:239 323 | msgid "Monstercat" 324 | msgstr "Monstercat" 325 | 326 | #: src/preferences_window.py:242 327 | msgid "Noise Reduction" 328 | msgstr "Ruisonderdrukking" 329 | 330 | #: src/preferences_window.py:243 331 | msgid "0 - noisy, 1 - smooth" 332 | msgstr "0 - ruis - 1 - vloeiend" 333 | 334 | #: src/preferences_window.py:264 src/preferences_window.py:285 335 | #: src/shortcuts_dialog.ui:82 336 | msgid "Colors" 337 | msgstr "Kleuren" 338 | 339 | #: src/preferences_window.py:278 340 | msgid "Light" 341 | msgstr "Licht" 342 | 343 | #: src/preferences_window.py:280 344 | msgid "Dark" 345 | msgstr "Donker" 346 | 347 | #: src/preferences_window.py:291 348 | msgid "Profile:" 349 | msgstr "Profiel:" 350 | 351 | #: src/preferences_window.py:299 352 | msgid "Add new profile" 353 | msgstr "Profiel toevoegen" 354 | 355 | #: src/preferences_window.py:310 356 | msgid "Type a name for a new profile" 357 | msgstr "Geef het nieuwe profiel een naam" 358 | 359 | #: src/preferences_window.py:312 src/preferences_window.py:508 360 | #: src/preferences_window.py:547 361 | msgid "Add" 362 | msgstr "Toevoegen" 363 | 364 | #: src/preferences_window.py:322 365 | msgid "Remove profile" 366 | msgstr "Profiel verwijderen" 367 | 368 | #: src/preferences_window.py:329 369 | msgid "Are you sure you want to remove this profile?" 370 | msgstr "Weet u zeker dat u dit profiel wilt verwijderen?" 371 | 372 | #: src/preferences_window.py:336 373 | msgid "Remove" 374 | msgstr "Verwijderen" 375 | 376 | #: src/preferences_window.py:343 src/preferences_window.py:695 377 | #: src/preferences_window.py:714 378 | msgid "Cancel" 379 | msgstr "Annuleren" 380 | 381 | #: src/preferences_window.py:353 382 | msgid "Foreground" 383 | msgstr "Voorgrond" 384 | 385 | #: src/preferences_window.py:358 386 | msgid "Background" 387 | msgstr "Achtergrond" 388 | 389 | #: src/preferences_window.py:489 src/preferences_window.py:512 390 | #: src/preferences_window.py:530 src/preferences_window.py:551 391 | msgid "Select color" 392 | msgstr "Kies een kleur" 393 | 394 | #: src/preferences_window.py:496 src/preferences_window.py:537 395 | msgid "Remove color" 396 | msgstr "Kleur verwijderen" 397 | 398 | #: src/preferences_window.py:517 src/preferences_window.py:556 399 | msgid "Add color" 400 | msgstr "Kleur toevoegen" 401 | 402 | #: src/preferences_window.py:584 403 | msgid "This name is already in use." 404 | msgstr "Deze naam is al in gebruik." 405 | 406 | #: src/preferences_window.py:694 407 | msgid "Import Settings" 408 | msgstr "Voorkeuren importeren" 409 | 410 | #: src/preferences_window.py:695 411 | msgid "Open" 412 | msgstr "Openen" 413 | 414 | #: src/preferences_window.py:698 src/preferences_window.py:717 415 | msgid "Cavalier Settings File (*.cavalier)" 416 | msgstr "Cavalier-voorkeurenbestand (*.cavalier)" 417 | 418 | #: src/preferences_window.py:702 419 | msgid "All Files" 420 | msgstr "Alle bestanden" 421 | 422 | #: src/preferences_window.py:713 423 | msgid "Export Settings" 424 | msgstr "Voorkeuren exporteren" 425 | 426 | #: src/preferences_window.py:714 427 | msgid "Save" 428 | msgstr "Opslaan" 429 | 430 | #: src/window.py:109 431 | msgid "Preferences" 432 | msgstr "Voorkeuren" 433 | 434 | #: src/window.py:110 435 | msgid "Keyboard Shortcuts" 436 | msgstr "Sneltoetsen" 437 | 438 | #: src/window.py:111 439 | msgid "About" 440 | msgstr "Over" 441 | 442 | #: src/window.py:112 443 | msgid "Quit" 444 | msgstr "Afsluiten" 445 | 446 | #: src/shortcuts_dialog.ui:15 447 | msgid "Change Drawing Mode" 448 | msgstr "Weergavemodus aanpassen" 449 | 450 | #: src/shortcuts_dialog.ui:21 451 | msgid "Change Drawing Area Margin" 452 | msgstr "Weergavemodusmarge aanpassen" 453 | 454 | #: src/shortcuts_dialog.ui:27 455 | msgid "Change Offset Between Items" 456 | msgstr "Verschuiving tussen items aanpassen" 457 | 458 | #: src/shortcuts_dialog.ui:33 459 | msgid "Change Roundness of Items" 460 | msgstr "Rondheid van items aanpassen" 461 | 462 | #: src/shortcuts_dialog.ui:39 463 | msgid "Toggle Sharp Corners" 464 | msgstr "Scherpe hoeken aan/uit" 465 | 466 | #: src/shortcuts_dialog.ui:45 467 | msgid "Toggle Window Controls" 468 | msgstr "Titelbalkknoppen tonen/verbergen" 469 | 470 | #: src/shortcuts_dialog.ui:51 471 | msgid "Toggle Autohide Headerbar" 472 | msgstr "Kopbalk automatisch verbergen aan/uit" 473 | 474 | #: src/shortcuts_dialog.ui:62 475 | msgid "Change Number of Bars" 476 | msgstr "Aantal balken aanpassen" 477 | 478 | #: src/shortcuts_dialog.ui:68 479 | msgid "Toggle Channels" 480 | msgstr "Aantal kanalen aanpassen" 481 | 482 | #: src/shortcuts_dialog.ui:74 483 | msgid "Toggle Reverse Order" 484 | msgstr "Volgorde omdraaien aan/uit" 485 | 486 | #: src/shortcuts_dialog.ui:85 487 | msgid "Change Colors Profile" 488 | msgstr "Ander kleurenprofiel kiezen" 489 | 490 | #: src/shortcuts_dialog.ui:91 491 | msgid "Toggle Widgets Style" 492 | msgstr "Itemstijl aanpassen" 493 | 494 | #~ msgid "" 495 | #~ "3 drawing modes: weird Wave, retro-ish Levels and classic CAVA look - " 496 | #~ "Bars!" 497 | #~ msgstr "" 498 | #~ "Er zijn drie weergavemodi beschikbaar: dansende golf, retro-achtige " 499 | #~ "volumeniveaubalken en klassieke CAVA-balken." 500 | 501 | #~ msgid "Foreground colors" 502 | #~ msgstr "Voorgrondkleuren" 503 | 504 | #~ msgid "The array of foregound colors (RGBA)." 505 | #~ msgstr "Het voorgrondkleurbereik (rgba)." 506 | 507 | #~ msgid "Background colors" 508 | #~ msgstr "Achtergrondkleuren" 509 | 510 | #~ msgid "The array of background colors (RGBA)." 511 | #~ msgstr "Het achtergrondkleurbereik (rgba)." 512 | --------------------------------------------------------------------------------