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