New upstream version 2.1
Dennis Braun
1 year, 11 months ago
54 | 54 | po/remove-potcdate.sin |
55 | 55 | po/stamp-po |
56 | 56 | po/remove-potcdate.sed |
57 | ||
57 | debian/.debhelper/ | |
58 | debian/autoreconf.after | |
59 | debian/autoreconf.before | |
60 | debian/debhelper-build-stamp | |
61 | debian/elektroid.substvars | |
62 | debian/elektroid/ | |
63 | debian/files |
0 | As with other autotools project, you need to run the following commands. | |
1 | ||
2 | autoreconf --install | |
3 | ./configure | |
4 | make | |
5 | sudo make install | |
6 | ||
7 | The package dependencies for Debian based distributions are: | |
8 | ||
9 | automake | |
10 | libasound2-dev | |
11 | libgtk-3-dev | |
12 | libpulse-dev | |
13 | libsndfile1-dev | |
14 | libsamplerate0-dev | |
15 | libtool | |
16 | autopoint | |
17 | gettext | |
18 | ||
19 | You can easily install them by running sudo apt install automake libasound2-dev libgtk-3-dev libpulse-dev libsndfile1-dev libsamplerate0-dev libtool autopoint gettext. | |
0 | Installation Instructions | |
1 | ************************* | |
2 | ||
3 | Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software | |
4 | Foundation, Inc. | |
5 | ||
6 | Copying and distribution of this file, with or without modification, | |
7 | are permitted in any medium without royalty provided the copyright | |
8 | notice and this notice are preserved. This file is offered as-is, | |
9 | without warranty of any kind. | |
10 | ||
11 | Basic Installation | |
12 | ================== | |
13 | ||
14 | Briefly, the shell command './configure && make && make install' | |
15 | should configure, build, and install this package. The following | |
16 | more-detailed instructions are generic; see the 'README' file for | |
17 | instructions specific to this package. Some packages provide this | |
18 | 'INSTALL' file but do not implement all of the features documented | |
19 | below. The lack of an optional feature in a given package is not | |
20 | necessarily a bug. More recommendations for GNU packages can be found | |
21 | in *note Makefile Conventions: (standards)Makefile Conventions. | |
22 | ||
23 | The 'configure' shell script attempts to guess correct values for | |
24 | various system-dependent variables used during compilation. It uses | |
25 | those values to create a 'Makefile' in each directory of the package. | |
26 | It may also create one or more '.h' files containing system-dependent | |
27 | definitions. Finally, it creates a shell script 'config.status' that | |
28 | you can run in the future to recreate the current configuration, and a | |
29 | file 'config.log' containing compiler output (useful mainly for | |
30 | debugging 'configure'). | |
31 | ||
32 | It can also use an optional file (typically called 'config.cache' and | |
33 | enabled with '--cache-file=config.cache' or simply '-C') that saves the | |
34 | results of its tests to speed up reconfiguring. Caching is disabled by | |
35 | default to prevent problems with accidental use of stale cache files. | |
36 | ||
37 | If you need to do unusual things to compile the package, please try | |
38 | to figure out how 'configure' could check whether to do them, and mail | |
39 | diffs or instructions to the address given in the 'README' so they can | |
40 | be considered for the next release. If you are using the cache, and at | |
41 | some point 'config.cache' contains results you don't want to keep, you | |
42 | may remove or edit it. | |
43 | ||
44 | The file 'configure.ac' (or 'configure.in') is used to create | |
45 | 'configure' by a program called 'autoconf'. You need 'configure.ac' if | |
46 | you want to change it or regenerate 'configure' using a newer version of | |
47 | 'autoconf'. | |
48 | ||
49 | The simplest way to compile this package is: | |
50 | ||
51 | 1. 'cd' to the directory containing the package's source code and type | |
52 | './configure' to configure the package for your system. | |
53 | ||
54 | Running 'configure' might take a while. While running, it prints | |
55 | some messages telling which features it is checking for. | |
56 | ||
57 | 2. Type 'make' to compile the package. | |
58 | ||
59 | 3. Optionally, type 'make check' to run any self-tests that come with | |
60 | the package, generally using the just-built uninstalled binaries. | |
61 | ||
62 | 4. Type 'make install' to install the programs and any data files and | |
63 | documentation. When installing into a prefix owned by root, it is | |
64 | recommended that the package be configured and built as a regular | |
65 | user, and only the 'make install' phase executed with root | |
66 | privileges. | |
67 | ||
68 | 5. Optionally, type 'make installcheck' to repeat any self-tests, but | |
69 | this time using the binaries in their final installed location. | |
70 | This target does not install anything. Running this target as a | |
71 | regular user, particularly if the prior 'make install' required | |
72 | root privileges, verifies that the installation completed | |
73 | correctly. | |
74 | ||
75 | 6. You can remove the program binaries and object files from the | |
76 | source code directory by typing 'make clean'. To also remove the | |
77 | files that 'configure' created (so you can compile the package for | |
78 | a different kind of computer), type 'make distclean'. There is | |
79 | also a 'make maintainer-clean' target, but that is intended mainly | |
80 | for the package's developers. If you use it, you may have to get | |
81 | all sorts of other programs in order to regenerate files that came | |
82 | with the distribution. | |
83 | ||
84 | 7. Often, you can also type 'make uninstall' to remove the installed | |
85 | files again. In practice, not all packages have tested that | |
86 | uninstallation works correctly, even though it is required by the | |
87 | GNU Coding Standards. | |
88 | ||
89 | 8. Some packages, particularly those that use Automake, provide 'make | |
90 | distcheck', which can by used by developers to test that all other | |
91 | targets like 'make install' and 'make uninstall' work correctly. | |
92 | This target is generally not run by end users. | |
93 | ||
94 | Compilers and Options | |
95 | ===================== | |
96 | ||
97 | Some systems require unusual options for compilation or linking that | |
98 | the 'configure' script does not know about. Run './configure --help' | |
99 | for details on some of the pertinent environment variables. | |
100 | ||
101 | You can give 'configure' initial values for configuration parameters | |
102 | by setting variables in the command line or in the environment. Here is | |
103 | an example: | |
104 | ||
105 | ./configure CC=c99 CFLAGS=-g LIBS=-lposix | |
106 | ||
107 | *Note Defining Variables::, for more details. | |
108 | ||
109 | Compiling For Multiple Architectures | |
110 | ==================================== | |
111 | ||
112 | You can compile the package for more than one kind of computer at the | |
113 | same time, by placing the object files for each architecture in their | |
114 | own directory. To do this, you can use GNU 'make'. 'cd' to the | |
115 | directory where you want the object files and executables to go and run | |
116 | the 'configure' script. 'configure' automatically checks for the source | |
117 | code in the directory that 'configure' is in and in '..'. This is known | |
118 | as a "VPATH" build. | |
119 | ||
120 | With a non-GNU 'make', it is safer to compile the package for one | |
121 | architecture at a time in the source code directory. After you have | |
122 | installed the package for one architecture, use 'make distclean' before | |
123 | reconfiguring for another architecture. | |
124 | ||
125 | On MacOS X 10.5 and later systems, you can create libraries and | |
126 | executables that work on multiple system types--known as "fat" or | |
127 | "universal" binaries--by specifying multiple '-arch' options to the | |
128 | compiler but only a single '-arch' option to the preprocessor. Like | |
129 | this: | |
130 | ||
131 | ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ | |
132 | CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ | |
133 | CPP="gcc -E" CXXCPP="g++ -E" | |
134 | ||
135 | This is not guaranteed to produce working output in all cases, you | |
136 | may have to build one architecture at a time and combine the results | |
137 | using the 'lipo' tool if you have problems. | |
138 | ||
139 | Installation Names | |
140 | ================== | |
141 | ||
142 | By default, 'make install' installs the package's commands under | |
143 | '/usr/local/bin', include files under '/usr/local/include', etc. You | |
144 | can specify an installation prefix other than '/usr/local' by giving | |
145 | 'configure' the option '--prefix=PREFIX', where PREFIX must be an | |
146 | absolute file name. | |
147 | ||
148 | You can specify separate installation prefixes for | |
149 | architecture-specific files and architecture-independent files. If you | |
150 | pass the option '--exec-prefix=PREFIX' to 'configure', the package uses | |
151 | PREFIX as the prefix for installing programs and libraries. | |
152 | Documentation and other data files still use the regular prefix. | |
153 | ||
154 | In addition, if you use an unusual directory layout you can give | |
155 | options like '--bindir=DIR' to specify different values for particular | |
156 | kinds of files. Run 'configure --help' for a list of the directories | |
157 | you can set and what kinds of files go in them. In general, the default | |
158 | for these options is expressed in terms of '${prefix}', so that | |
159 | specifying just '--prefix' will affect all of the other directory | |
160 | specifications that were not explicitly provided. | |
161 | ||
162 | The most portable way to affect installation locations is to pass the | |
163 | correct locations to 'configure'; however, many packages provide one or | |
164 | both of the following shortcuts of passing variable assignments to the | |
165 | 'make install' command line to change installation locations without | |
166 | having to reconfigure or recompile. | |
167 | ||
168 | The first method involves providing an override variable for each | |
169 | affected directory. For example, 'make install | |
170 | prefix=/alternate/directory' will choose an alternate location for all | |
171 | directory configuration variables that were expressed in terms of | |
172 | '${prefix}'. Any directories that were specified during 'configure', | |
173 | but not in terms of '${prefix}', must each be overridden at install time | |
174 | for the entire installation to be relocated. The approach of makefile | |
175 | variable overrides for each directory variable is required by the GNU | |
176 | Coding Standards, and ideally causes no recompilation. However, some | |
177 | platforms have known limitations with the semantics of shared libraries | |
178 | that end up requiring recompilation when using this method, particularly | |
179 | noticeable in packages that use GNU Libtool. | |
180 | ||
181 | The second method involves providing the 'DESTDIR' variable. For | |
182 | example, 'make install DESTDIR=/alternate/directory' will prepend | |
183 | '/alternate/directory' before all installation names. The approach of | |
184 | 'DESTDIR' overrides is not required by the GNU Coding Standards, and | |
185 | does not work on platforms that have drive letters. On the other hand, | |
186 | it does better at avoiding recompilation issues, and works well even | |
187 | when some directory options were not specified in terms of '${prefix}' | |
188 | at 'configure' time. | |
189 | ||
190 | Optional Features | |
191 | ================= | |
192 | ||
193 | If the package supports it, you can cause programs to be installed | |
194 | with an extra prefix or suffix on their names by giving 'configure' the | |
195 | option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. | |
196 | ||
197 | Some packages pay attention to '--enable-FEATURE' options to | |
198 | 'configure', where FEATURE indicates an optional part of the package. | |
199 | They may also pay attention to '--with-PACKAGE' options, where PACKAGE | |
200 | is something like 'gnu-as' or 'x' (for the X Window System). The | |
201 | 'README' should mention any '--enable-' and '--with-' options that the | |
202 | package recognizes. | |
203 | ||
204 | For packages that use the X Window System, 'configure' can usually | |
205 | find the X include and library files automatically, but if it doesn't, | |
206 | you can use the 'configure' options '--x-includes=DIR' and | |
207 | '--x-libraries=DIR' to specify their locations. | |
208 | ||
209 | Some packages offer the ability to configure how verbose the | |
210 | execution of 'make' will be. For these packages, running './configure | |
211 | --enable-silent-rules' sets the default to minimal output, which can be | |
212 | overridden with 'make V=1'; while running './configure | |
213 | --disable-silent-rules' sets the default to verbose, which can be | |
214 | overridden with 'make V=0'. | |
215 | ||
216 | Particular systems | |
217 | ================== | |
218 | ||
219 | On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC | |
220 | is not installed, it is recommended to use the following options in | |
221 | order to use an ANSI C compiler: | |
222 | ||
223 | ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" | |
224 | ||
225 | and if that doesn't work, install pre-built binaries of GCC for HP-UX. | |
226 | ||
227 | HP-UX 'make' updates targets which have the same time stamps as their | |
228 | prerequisites, which makes it generally unusable when shipped generated | |
229 | files such as 'configure' are involved. Use GNU 'make' instead. | |
230 | ||
231 | On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot | |
232 | parse its '<wchar.h>' header file. The option '-nodtk' can be used as a | |
233 | workaround. If GNU CC is not installed, it is therefore recommended to | |
234 | try | |
235 | ||
236 | ./configure CC="cc" | |
237 | ||
238 | and if that doesn't work, try | |
239 | ||
240 | ./configure CC="cc -nodtk" | |
241 | ||
242 | On Solaris, don't put '/usr/ucb' early in your 'PATH'. This | |
243 | directory contains several dysfunctional programs; working variants of | |
244 | these programs are available in '/usr/bin'. So, if you need '/usr/ucb' | |
245 | in your 'PATH', put it _after_ '/usr/bin'. | |
246 | ||
247 | On Haiku, software installed for all users goes in '/boot/common', | |
248 | not '/usr/local'. It is recommended to use the following options: | |
249 | ||
250 | ./configure --prefix=/boot/common | |
251 | ||
252 | Specifying the System Type | |
253 | ========================== | |
254 | ||
255 | There may be some features 'configure' cannot figure out | |
256 | automatically, but needs to determine by the type of machine the package | |
257 | will run on. Usually, assuming the package is built to be run on the | |
258 | _same_ architectures, 'configure' can figure that out, but if it prints | |
259 | a message saying it cannot guess the machine type, give it the | |
260 | '--build=TYPE' option. TYPE can either be a short name for the system | |
261 | type, such as 'sun4', or a canonical name which has the form: | |
262 | ||
263 | CPU-COMPANY-SYSTEM | |
264 | ||
265 | where SYSTEM can have one of these forms: | |
266 | ||
267 | OS | |
268 | KERNEL-OS | |
269 | ||
270 | See the file 'config.sub' for the possible values of each field. If | |
271 | 'config.sub' isn't included in this package, then this package doesn't | |
272 | need to know the machine type. | |
273 | ||
274 | If you are _building_ compiler tools for cross-compiling, you should | |
275 | use the option '--target=TYPE' to select the type of system they will | |
276 | produce code for. | |
277 | ||
278 | If you want to _use_ a cross compiler, that generates code for a | |
279 | platform different from the build platform, you should specify the | |
280 | "host" platform (i.e., that on which the generated programs will | |
281 | eventually be run) with '--host=TYPE'. | |
282 | ||
283 | Sharing Defaults | |
284 | ================ | |
285 | ||
286 | If you want to set default values for 'configure' scripts to share, | |
287 | you can create a site shell script called 'config.site' that gives | |
288 | default values for variables like 'CC', 'cache_file', and 'prefix'. | |
289 | 'configure' looks for 'PREFIX/share/config.site' if it exists, then | |
290 | 'PREFIX/etc/config.site' if it exists. Or, you can set the | |
291 | 'CONFIG_SITE' environment variable to the location of the site script. | |
292 | A warning: not all 'configure' scripts look for a site script. | |
293 | ||
294 | Defining Variables | |
295 | ================== | |
296 | ||
297 | Variables not defined in a site shell script can be set in the | |
298 | environment passed to 'configure'. However, some packages may run | |
299 | configure again during the build, and the customized values of these | |
300 | variables may be lost. In order to avoid this problem, you should set | |
301 | them in the 'configure' command line, using 'VAR=value'. For example: | |
302 | ||
303 | ./configure CC=/usr/local2/bin/gcc | |
304 | ||
305 | causes the specified 'gcc' to be used as the C compiler (unless it is | |
306 | overridden in the site shell script). | |
307 | ||
308 | Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an | |
309 | Autoconf limitation. Until the limitation is lifted, you can use this | |
310 | workaround: | |
311 | ||
312 | CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash | |
313 | ||
314 | 'configure' Invocation | |
315 | ====================== | |
316 | ||
317 | 'configure' recognizes the following options to control how it | |
318 | operates. | |
319 | ||
320 | '--help' | |
321 | '-h' | |
322 | Print a summary of all of the options to 'configure', and exit. | |
323 | ||
324 | '--help=short' | |
325 | '--help=recursive' | |
326 | Print a summary of the options unique to this package's | |
327 | 'configure', and exit. The 'short' variant lists options used only | |
328 | in the top level, while the 'recursive' variant lists options also | |
329 | present in any nested packages. | |
330 | ||
331 | '--version' | |
332 | '-V' | |
333 | Print the version of Autoconf used to generate the 'configure' | |
334 | script, and exit. | |
335 | ||
336 | '--cache-file=FILE' | |
337 | Enable the cache: use and save the results of the tests in FILE, | |
338 | traditionally 'config.cache'. FILE defaults to '/dev/null' to | |
339 | disable caching. | |
340 | ||
341 | '--config-cache' | |
342 | '-C' | |
343 | Alias for '--cache-file=config.cache'. | |
344 | ||
345 | '--quiet' | |
346 | '--silent' | |
347 | '-q' | |
348 | Do not print messages saying which checks are being made. To | |
349 | suppress all normal output, redirect it to '/dev/null' (any error | |
350 | messages will still be shown). | |
351 | ||
352 | '--srcdir=DIR' | |
353 | Look for the package's source code in directory DIR. Usually | |
354 | 'configure' can determine that directory automatically. | |
355 | ||
356 | '--prefix=DIR' | |
357 | Use DIR as the installation prefix. *note Installation Names:: for | |
358 | more details, including other options available for fine-tuning the | |
359 | installation locations. | |
360 | ||
361 | '--no-create' | |
362 | '-n' | |
363 | Run the configure checks, but stop before creating any output | |
364 | files. | |
365 | ||
366 | 'configure' also accepts some other, not widely useful, options. Run | |
367 | 'configure --help' for more details. |
0 | 0 | ACLOCAL_AMFLAGS=-I m4 |
1 | 1 | |
2 | 2 | if CLI_ONLY |
3 | SUBDIRS=src test man | |
3 | SUBDIRS=src res test man | |
4 | 4 | else |
5 | 5 | SUBDIRS=src res test po man |
6 | 6 | endif |
0 | 0 | # Elektroid |
1 | 1 | |
2 | 2 | Elektroid is a GNU/Linux transfer application for Elektron devices. It includes the `elektroid` GUI application and the `elektroid-cli` CLI application. |
3 | Elektroid has been reported to work with Model:Samples, Model:Cycles, Digitakt, Digitone and Analog Rytm MKI and MKII. | |
3 | Elektroid has been reported to work with Model:Samples, Model:Cycles, Digitakt, Digitone, Syntakt, and Analog Rytm MKI and MKII. | |
4 | 4 | |
5 | 5 | To use Elektroid, USB configuration must be set to `USB MIDI` or `USB AUDIO/MIDI` as it won't work in Overbridge mode. |
6 | 6 | |
15 | 15 | sudo make install |
16 | 16 | ``` |
17 | 17 | |
18 | The package dependencies for Debian based distributions are: | |
18 | The package dependencies for Debian-based distributions are: | |
19 | 19 | - automake |
20 | 20 | - libtool |
21 | 21 | - build-essential |
32 | 32 | |
33 | 33 | You can easily install them by running `sudo apt install automake libtool build-essential libasound2-dev libgtk-3-dev libpulse-dev libsndfile1-dev libsamplerate0-dev autopoint gettext zlib1g-dev libjson-glib-dev libzip-dev`. |
34 | 34 | |
35 | If you are only compiling the CLI, install the dependencies with `sudo apt install automake libtool build-essential libasound2-dev libglib2.0-dev libsndfile1-dev libsamplerate0-dev libtool zlib1g-dev libjson-glib-dev libzip-dev`. | |
35 | If you are only compiling the CLI, install the dependencies with `sudo apt install automake libtool build-essential libasound2-dev libglib2.0-dev libsndfile1-dev libsamplerate0-dev autopoint libtool zlib1g-dev libjson-glib-dev libzip-dev`. | |
36 | ||
37 | For Fedora, `sudo dnf install autoconf libtool alsa-lib-devel zlib-devel libzip-devel gtk3-devel libsndfile-devel gettext-devel libsamplerate-devel pulseaudio-libs-devel json-glib-devel` will install the build dependencies. | |
38 | ||
39 | For Arch Linux, `sudo pacman -S base-devel autoconf libtool alsa-lib zlib libzip gtk3 libsndfile gettext libsamplerate pulseaudio json-glib` will install the build dependencies. | |
40 | ||
41 | ## Packaging | |
42 | ||
43 | This is a quick glance at the instructions needed to build some distribution packages. | |
44 | ||
45 | ### Debian | |
46 | ||
47 | ``` | |
48 | $ dpkg-buildpackage -b -rfakeroot -us -uc | |
49 | ``` | |
50 | ||
51 | ### Fedora | |
52 | ||
53 | ``` | |
54 | $ rel=35 | |
55 | $ mock -r fedora-$rel-x86_64 --buildsrpm --spec elektroid.spec --sources . | |
56 | $ mock -r fedora-$rel-x86_64 --no-clean --rebuild /var/lib/mock/fedora-$rel-x86_64/result/elektroid-*.src.rpm | |
57 | ``` | |
36 | 58 | |
37 | 59 | ## CLI |
38 | 60 | |
39 | `elektroid-cli` brings the same funcionality than `elektroid` to the command line. | |
61 | `elektroid-cli` brings the same functionality as `elektroid` to the command line. | |
40 | 62 | |
41 | 63 | There are device commands and filesystem commands. The latter have the form `a-b` where `a` is a command and `b` is a filesystem, (e.g., `ls-project`, `download-sound`, `mkdir-sample`). Notice that the filesystem is always in the singular form and some older commands are deprecated but kept for compatibility reasons although there are not documented here. |
42 | 64 | |
223 | 245 | ``` |
224 | 246 | $ elektroid-cli ul-data sound 0:/soundbanks/D |
225 | 247 | ``` |
248 | ||
249 | ## Adding and reconfiguring devices | |
250 | ||
251 | Since version 2.1, it is possible to add and reconfigure devices without recompiling as the device definitions are stored in a JSON file. Hopefully, this approach will make it easier for users to modify and add devices and new releases will only be needed if new funcionalities are actually added. | |
252 | ||
253 | This is a device definition from `res/devices.json`. | |
254 | ||
255 | ``` | |
256 | }, { | |
257 | "id": 12, | |
258 | "name": "Digitakt", | |
259 | "alias": "dt", | |
260 | "filesystems": 57, | |
261 | "storage": 3 | |
262 | }, { | |
263 | ``` | |
264 | ||
265 | Properties `filesystems` and `storage` are based on the definitions found in `src/connector.h` and are the bitwise OR result of all the supported filesystems and storage types. | |
266 | ||
267 | ``` | |
268 | enum connector_fs | |
269 | { | |
270 | FS_SAMPLES = 0x1, | |
271 | FS_RAW_ALL = 0x2, | |
272 | FS_RAW_PRESETS = 0x4, | |
273 | FS_DATA_ALL = 0x8, | |
274 | FS_DATA_PRJ = 0x10, | |
275 | FS_DATA_SND = 0x20, | |
276 | }; | |
277 | ``` | |
278 | ||
279 | ``` | |
280 | enum connector_storage | |
281 | { | |
282 | STORAGE_PLUS_DRIVE = 0x1, | |
283 | STORAGE_RAM = 0x2 | |
284 | }; | |
285 | ``` | |
286 | ||
287 | If the file `~/.config/elektroid/devices.json` is found, it will take precedence over the installed one. |
1 | 1 | # Process this file with autoconf to produce a configure script. |
2 | 2 | |
3 | 3 | AC_PREREQ([2.69]) |
4 | AC_INIT([elektroid],[2.0],[dagargo@gmail.com]) | |
4 | AC_INIT([elektroid],[2.1],[dagargo@gmail.com]) | |
5 | 5 | AC_CONFIG_SRCDIR([src]) |
6 | 6 | AC_CONFIG_HEADERS([config.h]) |
7 | 7 | AM_PROG_LIBTOOL |
38 | 38 | |
39 | 39 | AM_COND_IF(GUI, [ |
40 | 40 | AM_GNU_GETTEXT([external]) |
41 | AM_GNU_GETTEXT_VERSION([0.12.1]) | |
41 | AM_GNU_GETTEXT_VERSION([0.19]) | |
42 | 42 | ]) |
43 | 43 | |
44 | 44 | # Checks for header files. |
20 | 20 | Architecture: any |
21 | 21 | Depends: ${misc:Depends}, |
22 | 22 | ${shlibs:Depends} |
23 | Description: Sample transfer application | |
24 | Elektroid is an sample transfer application for Elektron devices. | |
23 | Description: Transfer application for Elektron devices | |
24 | Elektroid is an transfer application for Elektron devices. | |
25 | 25 | . |
26 | With elektroid you can easily load audio files like flac or wav into your | |
27 | elektron sampler. You can also transfer audio samples from your elektroid | |
28 | device to your local hard disk. | |
26 | With Elektroid you can easily upload and download audio files, projects, | |
27 | sounds and presets to and from Elektron devices. It can also be used to | |
28 | send and receive MIDI SysEx files. | |
29 | 29 | . |
30 | It has been reported to work with Model:Samples, Digitakt | |
31 | and Analog Rytm mk1 and mk2. | |
30 | Elektroid has been reported to work with Model:Samples, Model:Cycles, | |
31 | Digitakt, Digitone and Analog Rytm MKI and MKII. | |
32 | 32 | . |
33 | 33 | This package provides both the GUI and CLI application of elektroid. |
0 | Name: elektroid | |
1 | Version: 2.0 | |
2 | Release: 1%{?dist} | |
3 | Summary: Transfer application for Elektron devices | |
4 | ||
5 | License: GPLv3+ | |
6 | URL: https://github.com/dagargo/elektroid | |
7 | Source0: https://github.com/dagargo/elektroid/archive/elektroid-%{version}.tar.gz | |
8 | ||
9 | BuildRequires: autoconf | |
10 | BuildRequires: libtool | |
11 | BuildRequires: alsa-lib-devel | |
12 | BuildRequires: zlib-devel | |
13 | BuildRequires: libzip-devel | |
14 | BuildRequires: gtk3-devel | |
15 | BuildRequires: libsndfile-devel | |
16 | BuildRequires: libsamplerate-devel | |
17 | %if 0%{?suse_version} | |
18 | BuildRequires: libpulse-devel | |
19 | %else | |
20 | %if 0%{?mgaversion} | |
21 | BuildRequires: libpulseaudio-devel | |
22 | %else | |
23 | # RHEL, CentOS and Fedora use this name: | |
24 | BuildRequires: pulseaudio-libs-devel | |
25 | %endif | |
26 | %endif | |
27 | BuildRequires: gettext-devel | |
28 | BuildRequires: json-glib-devel | |
29 | ||
30 | %description | |
31 | Elektroid is an transfer application for Elektron devices. | |
32 | With Elektroid you can easily upload and download audio files, projects, sounds | |
33 | and presets to and from Elektron devices. It can also be used to send and | |
34 | receive MIDI SysEx files. | |
35 | Elektroid has been reported to work with Model:Samples, Model:Cycles, Digitakt, | |
36 | Digitone and Analog Rytm MKI and MKII. | |
37 | ||
38 | ||
39 | %prep | |
40 | %autosetup -p1 | |
41 | sed -i s/^include_HEADERS/noinst_HEADERS/ src/Makefile.am | |
42 | aclocal | |
43 | automake | |
44 | ||
45 | ||
46 | %build | |
47 | %configure | |
48 | %make_build | |
49 | ||
50 | ||
51 | %install | |
52 | %make_install | |
53 | ||
54 | ||
55 | %files | |
56 | %{_bindir}/elektroid-cli | |
57 | %{_bindir}/elektroid | |
58 | %{_datadir}/applications/%{name}.desktop | |
59 | %{_datadir}/%{name}/res/gui.css | |
60 | %{_datadir}/%{name}/res/gui.glade | |
61 | %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg | |
62 | %{_datadir}/icons/hicolor/scalable/apps/%{name}-symbolic.svg | |
63 | %{_datadir}/icons/hicolor/scalable/apps/%{name}-data-symbolic.svg | |
64 | %{_datadir}/icons/hicolor/scalable/apps/%{name}-project-symbolic.svg | |
65 | %{_datadir}/icons/hicolor/scalable/apps/%{name}-sound-symbolic.svg | |
66 | %{_datadir}/icons/hicolor/scalable/apps/%{name}-wave-symbolic.svg | |
67 | %{_datadir}/locale/*/LC_MESSAGES/%{name}.mo | |
68 | %{_mandir}/man1/elektroid-cli.1.gz | |
69 | %{_mandir}/man1/elektroid.1.gz | |
70 | %{_metainfodir}/%{name}.appdata.xml | |
71 | %license COPYING | |
72 | ||
73 | ||
74 | %changelog | |
75 | * Mon Feb 07 2022 Jonathan Wakely <jwakely@fedoraproject.org> - 2.0-1 | |
76 | - RPM package for Fedora |
10 | 10 | .B Elektroid |
11 | 11 | is a GNU/Linux transfer application for Elektron devices. See man elektroid-cli for the CLI application. |
12 | 12 | .PP |
13 | With Elektroid you can easily upload and download audio files, projects, sounds and presets to and from your Elektron device. It can also be used to send and receive MIDI SysEx files. | |
13 | With Elektroid you can easily upload and download audio files, projects, sounds and presets to and from Elektron devices. It can also be used to send and receive MIDI SysEx files. | |
14 | 14 | .PP |
15 | Elektroid has been reported to work with Model:Samples, Model:Cycles, Digitakt, Digitone and Analog Rytm MKI and MKII. | |
15 | Elektroid has been reported to work with Model:Samples, Model:Cycles, Digitakt, Digitone, Syntakt and Analog Rytm MKI and MKII. | |
16 | 16 | |
17 | 17 | .SH OPTIONS |
18 | 18 | .TP |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: elektroid 1.4\n" |
8 | 8 | "Report-Msgid-Bugs-To: dagargo@gmail.com\n" |
9 | "POT-Creation-Date: 2021-12-01 18:58+0100\n" | |
9 | "POT-Creation-Date: 2022-06-03 08:47+0200\n" | |
10 | 10 | "PO-Revision-Date: 2020-04-26 13:00+0100\n" |
11 | 11 | "Last-Translator: David García Goñi <dagargo@gmail.com>\n" |
12 | 12 | "Language-Team: Catalan\n" |
16 | 16 | "Content-Transfer-Encoding: 8bit\n" |
17 | 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" |
18 | 18 | |
19 | #: src/elektroid.c:249 | |
19 | #: src/elektroid.c:246 | |
20 | 20 | msgid "Samples" |
21 | 21 | msgstr "Mostres" |
22 | 22 | |
23 | #: src/elektroid.c:251 | |
23 | #: src/elektroid.c:248 | |
24 | 24 | msgid "Presets" |
25 | 25 | msgstr "Programes" |
26 | 26 | |
27 | #: src/elektroid.c:253 | |
27 | #: src/elektroid.c:250 | |
28 | 28 | msgid "Projects" |
29 | 29 | msgstr "Projectes" |
30 | 30 | |
31 | #: src/elektroid.c:255 | |
31 | #: src/elektroid.c:252 | |
32 | 32 | msgid "Sounds" |
33 | 33 | msgstr "Sos" |
34 | 34 | |
35 | #: src/elektroid.c:257 src/elektroid.c:1650 src/elektroid.c:1664 | |
35 | #: src/elektroid.c:254 src/elektroid.c:1689 src/elektroid.c:1703 | |
36 | 36 | msgid "Undefined" |
37 | 37 | msgstr "Indefinit" |
38 | 38 | |
39 | #: src/elektroid.c:398 | |
39 | #: src/elektroid.c:434 | |
40 | 40 | #, c-format |
41 | 41 | msgid "Connected to %s%s" |
42 | 42 | msgstr "Connectat a %s%s" |
43 | 43 | |
44 | #: src/elektroid.c:406 src/elektroid.c:3215 | |
44 | #: src/elektroid.c:442 src/elektroid.c:3256 | |
45 | 45 | msgid "Not connected" |
46 | 46 | msgstr "No connectat" |
47 | 47 | |
48 | #: src/elektroid.c:549 | |
48 | #: src/elektroid.c:585 | |
49 | 49 | msgid "Waiting..." |
50 | 50 | msgstr "Esperant..." |
51 | 51 | |
52 | #: src/elektroid.c:552 | |
52 | #: src/elektroid.c:588 | |
53 | 53 | msgid "Sending..." |
54 | 54 | msgstr "Enviant..." |
55 | 55 | |
56 | #: src/elektroid.c:556 | |
56 | #: src/elektroid.c:592 | |
57 | 57 | msgid "Receiving..." |
58 | 58 | msgstr "Rebent..." |
59 | 59 | |
60 | #: src/elektroid.c:624 | |
60 | #: src/elektroid.c:660 | |
61 | 61 | msgid "Receive SysEx" |
62 | 62 | msgstr "Rep SysEx" |
63 | 63 | |
64 | #: src/elektroid.c:648 | |
64 | #: src/elektroid.c:684 | |
65 | 65 | msgid "Save SysEx" |
66 | 66 | msgstr "Alça SysEx" |
67 | 67 | |
68 | #: src/elektroid.c:651 src/elektroid.c:747 src/elektroid.c:915 | |
68 | #: src/elektroid.c:687 src/elektroid.c:783 src/elektroid.c:951 | |
69 | #: res/gui.glade:1332 res/gui.glade:1432 | |
69 | 70 | msgid "_Cancel" |
70 | 71 | msgstr "_Cancel·la" |
71 | 72 | |
72 | #: src/elektroid.c:653 | |
73 | #: src/elektroid.c:689 res/gui.glade:1346 | |
73 | 74 | msgid "_Save" |
74 | 75 | msgstr "_Alça" |
75 | 76 | |
76 | #: src/elektroid.c:657 | |
77 | #: src/elektroid.c:693 | |
77 | 78 | msgid "Received SysEx" |
78 | 79 | msgstr "SysEx rebut" |
79 | 80 | |
80 | #: src/elektroid.c:662 src/elektroid.c:753 | |
81 | #: src/elektroid.c:698 src/elektroid.c:789 | |
81 | 82 | msgid "SysEx Files" |
82 | 83 | msgstr "Fitxers SysEx" |
83 | 84 | |
84 | #: src/elektroid.c:696 | |
85 | #: src/elektroid.c:732 | |
85 | 86 | #, c-format |
86 | 87 | msgid "Error while saving “%s”: %s." |
87 | 88 | msgstr "Error al guardar «%s»: %s." |
88 | 89 | |
89 | #: src/elektroid.c:744 | |
90 | #: src/elektroid.c:780 | |
90 | 91 | msgid "Open SysEx" |
91 | 92 | msgstr "Obri SysEx" |
92 | 93 | |
93 | #: src/elektroid.c:749 | |
94 | #: src/elektroid.c:785 | |
94 | 95 | msgid "_Open" |
95 | 96 | msgstr "_Obri" |
96 | 97 | |
97 | #: src/elektroid.c:770 | |
98 | #: src/elektroid.c:806 | |
98 | 99 | #, c-format |
99 | 100 | msgid "Error while loading “%s”: %s." |
100 | 101 | msgstr "Error al carregar «%s»: %s." |
101 | 102 | |
102 | #: src/elektroid.c:780 | |
103 | #: src/elektroid.c:816 | |
103 | 104 | msgid "Send SysEx" |
104 | 105 | msgstr "Envia SysEx" |
105 | 106 | |
106 | #: src/elektroid.c:882 | |
107 | #: src/elektroid.c:918 | |
107 | 108 | #, c-format |
108 | 109 | msgid "Error while deleting “%s”: %s." |
109 | 110 | msgstr "Error al eliminar «%s»: %s." |
110 | 111 | |
111 | #: src/elektroid.c:914 | |
112 | #: src/elektroid.c:950 | |
112 | 113 | msgid "Are you sure you want to delete the selected items?" |
113 | 114 | msgstr "Està segur de que vol eliminar els elements seleccionats?" |
114 | 115 | |
115 | #: src/elektroid.c:916 | |
116 | #: src/elektroid.c:952 | |
116 | 117 | msgid "_Delete" |
117 | 118 | msgstr "_Elimina" |
118 | 119 | |
119 | #: src/elektroid.c:969 res/gui.glade:130 res/gui.glade:193 | |
120 | #: src/elektroid.c:1005 res/gui.glade:121 res/gui.glade:174 | |
120 | 121 | msgid "Rename" |
121 | 122 | msgstr "Canvia el nom" |
122 | 123 | |
123 | #: src/elektroid.c:987 | |
124 | #: src/elektroid.c:1023 | |
124 | 125 | #, c-format |
125 | 126 | msgid "Error while renaming to “%s”: %s." |
126 | 127 | msgstr "Error al canviar el nom a «%s»: %s." |
127 | 128 | |
128 | #: src/elektroid.c:1550 res/gui.glade:121 res/gui.glade:183 res/gui.glade:184 | |
129 | #: src/elektroid.c:1589 res/gui.glade:436 res/gui.glade:606 | |
129 | 130 | msgid "Add Directory" |
130 | 131 | msgstr "Afig directori" |
131 | 132 | |
132 | #: src/elektroid.c:1568 | |
133 | #: src/elektroid.c:1607 | |
133 | 134 | #, c-format |
134 | 135 | msgid "Error while creating dir “%s”: %s." |
135 | 136 | msgstr "Error al crear el directori «%s»: %s." |
136 | 137 | |
137 | #: src/elektroid.c:1640 | |
138 | #: src/elektroid.c:1679 | |
138 | 139 | msgid "Queued" |
139 | 140 | msgstr "A la cua" |
140 | 141 | |
141 | #: src/elektroid.c:1642 | |
142 | #: src/elektroid.c:1681 | |
142 | 143 | msgid "Running" |
143 | 144 | msgstr "Executant" |
144 | 145 | |
145 | #: src/elektroid.c:1644 | |
146 | #: src/elektroid.c:1683 | |
146 | 147 | msgid "Completed" |
147 | 148 | msgstr "Completada" |
148 | 149 | |
149 | #: src/elektroid.c:1646 | |
150 | #: src/elektroid.c:1685 | |
150 | 151 | msgid "Completed with errors" |
151 | 152 | msgstr "Completada amb errors" |
152 | 153 | |
153 | #: src/elektroid.c:1648 | |
154 | #: src/elektroid.c:1687 | |
154 | 155 | msgid "Canceled" |
155 | 156 | msgstr "Cancel·lada" |
156 | 157 | |
157 | #: src/elektroid.c:1660 | |
158 | #: src/elektroid.c:1699 | |
158 | 159 | msgid "Upload" |
159 | 160 | msgstr "Càrrega" |
160 | 161 | |
161 | #: src/elektroid.c:1662 | |
162 | #: src/elektroid.c:1701 | |
162 | 163 | msgid "Download" |
163 | 164 | msgstr "Descàrrega" |
164 | 165 | |
165 | #: src/elektroid.c:2518 src/elektroid.c:2559 | |
166 | #: src/elektroid.c:2560 src/elektroid.c:2601 | |
166 | 167 | #, c-format |
167 | 168 | msgid "Error while moving from “%s” to “%s”: %s." |
168 | 169 | msgstr "Error al moure de «%s» a «%s»: %s." |
183 | 184 | msgid "Show in File Manager" |
184 | 185 | msgstr "Mostra al navegador de fitxers" |
185 | 186 | |
186 | #: res/gui.glade:139 res/gui.glade:202 | |
187 | #: res/gui.glade:130 res/gui.glade:183 | |
187 | 188 | msgid "Delete" |
188 | 189 | msgstr "Elimina" |
189 | 190 | |
190 | #: res/gui.glade:168 | |
191 | #: res/gui.glade:159 | |
191 | 192 | msgid "Download Selection" |
192 | 193 | msgstr "Descarrega la selecció" |
193 | 194 | |
194 | #: res/gui.glade:238 | |
195 | #: res/gui.glade:219 | |
195 | 196 | msgid "GNU/Linux transfer application for Elektron devices" |
196 | 197 | msgstr "Aplicació GNU/Linux de transferència per a dispositius Elektron" |
197 | 198 | |
198 | #: res/gui.glade:241 | |
199 | #: res/gui.glade:222 | |
199 | 200 | msgid "translator-credits" |
200 | 201 | msgstr "David García Goñi <dagargo@gmail.com>" |
201 | 202 | |
202 | #: res/gui.glade:289 | |
203 | #: res/gui.glade:270 | |
203 | 204 | msgid "_Receive SysEx" |
204 | 205 | msgstr "_Rep SysEx" |
205 | 206 | |
206 | #: res/gui.glade:302 | |
207 | #: res/gui.glade:283 | |
207 | 208 | msgid "_Send SysEx" |
208 | 209 | msgstr "_Envia SysEx" |
209 | 210 | |
210 | #: res/gui.glade:326 | |
211 | #: res/gui.glade:307 | |
211 | 212 | msgid "OS _Upgrade" |
212 | 213 | msgstr "_Actualitza el SO" |
213 | 214 | |
214 | #: res/gui.glade:350 | |
215 | #: res/gui.glade:331 | |
215 | 216 | msgid "_About" |
216 | 217 | msgstr "_Quant a" |
217 | 218 | |
218 | #: res/gui.glade:434 res/gui.glade:583 | |
219 | #: res/gui.glade:415 res/gui.glade:585 | |
219 | 220 | msgid "Go to Parent Directory" |
220 | 221 | msgstr "Ves al directori pare" |
221 | 222 | |
222 | #: res/gui.glade:455 res/gui.glade:604 | |
223 | #: res/gui.glade:457 res/gui.glade:627 | |
223 | 224 | msgid "Refresh Directory" |
224 | 225 | msgstr "Actualitza el directori" |
225 | 226 | |
226 | #: res/gui.glade:512 res/gui.glade:671 res/gui.glade:1362 | |
227 | #: res/gui.glade:514 res/gui.glade:694 res/gui.glade:1377 | |
227 | 228 | msgid "Name" |
228 | 229 | msgstr "Nom" |
229 | 230 | |
230 | #: res/gui.glade:526 res/gui.glade:685 | |
231 | #: res/gui.glade:528 res/gui.glade:708 | |
231 | 232 | msgid "Size" |
232 | 233 | msgstr "Mida" |
233 | 234 | |
234 | #: res/gui.glade:738 | |
235 | #: res/gui.glade:761 | |
235 | 236 | msgid "Refresh Devices" |
236 | 237 | msgstr "Actualitza els dispositius" |
237 | 238 | |
238 | 239 | #. It is recommended to split the text in two lines if it is too long |
239 | #: res/gui.glade:856 | |
240 | #: res/gui.glade:879 | |
240 | 241 | msgid "Auto play" |
241 | 242 | msgstr "" |
242 | 243 | "Reproducció\n" |
243 | 244 | "automàtica" |
244 | 245 | |
245 | #: res/gui.glade:1088 | |
246 | #: res/gui.glade:1101 | |
246 | 247 | msgid "Status" |
247 | 248 | msgstr "Estat" |
248 | 249 | |
249 | #: res/gui.glade:1099 | |
250 | #: res/gui.glade:1112 | |
250 | 251 | msgid "Type" |
251 | 252 | msgstr "Tipus" |
252 | 253 | |
253 | #: res/gui.glade:1120 | |
254 | #: res/gui.glade:1133 | |
254 | 255 | msgid "Source" |
255 | 256 | msgstr "Origen" |
256 | 257 | |
257 | #: res/gui.glade:1134 | |
258 | #: res/gui.glade:1147 | |
258 | 259 | msgid "Destination" |
259 | 260 | msgstr "Destinació" |
260 | 261 | |
261 | #: res/gui.glade:1149 | |
262 | #: res/gui.glade:1162 | |
262 | 263 | msgid "Progress" |
263 | 264 | msgstr "Progrés" |
264 | 265 | |
265 | #: res/gui.glade:1181 | |
266 | #: res/gui.glade:1194 | |
266 | 267 | msgid "Cancel Tasks" |
267 | 268 | msgstr "Cancel·la les tasques" |
268 | 269 | |
269 | #: res/gui.glade:1202 | |
270 | #: res/gui.glade:1215 | |
270 | 271 | msgid "Remove Queued Tasks" |
271 | 272 | msgstr "Elimina les tasques de la cua" |
272 | 273 | |
273 | #: res/gui.glade:1223 | |
274 | #: res/gui.glade:1236 | |
274 | 275 | msgid "Clear Finished Tasks" |
275 | 276 | msgstr "Neteja les tasques terminadas" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: elektroid 1.4\n" |
8 | 8 | "Report-Msgid-Bugs-To: dagargo@gmail.com\n" |
9 | "POT-Creation-Date: 2021-12-01 18:58+0100\n" | |
9 | "POT-Creation-Date: 2022-06-03 08:47+0200\n" | |
10 | 10 | "PO-Revision-Date: 2021-01-11 22:00+0100\n" |
11 | 11 | "Last-Translator: Dennis Braun <d_braun@kabelmail.de>\n" |
12 | 12 | "Language-Team: German\n" |
16 | 16 | "Content-Transfer-Encoding: 8bit\n" |
17 | 17 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
18 | 18 | |
19 | #: src/elektroid.c:249 | |
19 | #: src/elektroid.c:246 | |
20 | 20 | msgid "Samples" |
21 | 21 | msgstr "Samples" |
22 | 22 | |
23 | #: src/elektroid.c:251 | |
23 | #: src/elektroid.c:248 | |
24 | 24 | msgid "Presets" |
25 | 25 | msgstr "Presets" |
26 | 26 | |
27 | #: src/elektroid.c:253 | |
27 | #: src/elektroid.c:250 | |
28 | 28 | msgid "Projects" |
29 | 29 | msgstr "Projekte" |
30 | 30 | |
31 | #: src/elektroid.c:255 | |
31 | #: src/elektroid.c:252 | |
32 | 32 | msgid "Sounds" |
33 | 33 | msgstr "Sounds" |
34 | 34 | |
35 | #: src/elektroid.c:257 src/elektroid.c:1650 src/elektroid.c:1664 | |
35 | #: src/elektroid.c:254 src/elektroid.c:1689 src/elektroid.c:1703 | |
36 | 36 | msgid "Undefined" |
37 | 37 | msgstr "Undefiniert" |
38 | 38 | |
39 | #: src/elektroid.c:398 | |
39 | #: src/elektroid.c:434 | |
40 | 40 | #, c-format |
41 | 41 | msgid "Connected to %s%s" |
42 | 42 | msgstr "Verbunden mit %s%s" |
43 | 43 | |
44 | #: src/elektroid.c:406 src/elektroid.c:3215 | |
44 | #: src/elektroid.c:442 src/elektroid.c:3256 | |
45 | 45 | msgid "Not connected" |
46 | 46 | msgstr "Nicht verbunden" |
47 | 47 | |
48 | #: src/elektroid.c:549 | |
48 | #: src/elektroid.c:585 | |
49 | 49 | msgid "Waiting..." |
50 | 50 | msgstr "Warte..." |
51 | 51 | |
52 | #: src/elektroid.c:552 | |
52 | #: src/elektroid.c:588 | |
53 | 53 | msgid "Sending..." |
54 | 54 | msgstr "Sende..." |
55 | 55 | |
56 | #: src/elektroid.c:556 | |
56 | #: src/elektroid.c:592 | |
57 | 57 | msgid "Receiving..." |
58 | 58 | msgstr "Empfange..." |
59 | 59 | |
60 | #: src/elektroid.c:624 | |
60 | #: src/elektroid.c:660 | |
61 | 61 | msgid "Receive SysEx" |
62 | 62 | msgstr "Empfange SysEx" |
63 | 63 | |
64 | #: src/elektroid.c:648 | |
64 | #: src/elektroid.c:684 | |
65 | 65 | msgid "Save SysEx" |
66 | 66 | msgstr "Speichere SysEx" |
67 | 67 | |
68 | #: src/elektroid.c:651 src/elektroid.c:747 src/elektroid.c:915 | |
68 | #: src/elektroid.c:687 src/elektroid.c:783 src/elektroid.c:951 | |
69 | #: res/gui.glade:1332 res/gui.glade:1432 | |
69 | 70 | msgid "_Cancel" |
70 | 71 | msgstr "_Abbrechen" |
71 | 72 | |
72 | #: src/elektroid.c:653 | |
73 | #: src/elektroid.c:689 res/gui.glade:1346 | |
73 | 74 | msgid "_Save" |
74 | 75 | msgstr "_Speichern" |
75 | 76 | |
76 | #: src/elektroid.c:657 | |
77 | #: src/elektroid.c:693 | |
77 | 78 | msgid "Received SysEx" |
78 | 79 | msgstr "SysEx empfangen" |
79 | 80 | |
80 | #: src/elektroid.c:662 src/elektroid.c:753 | |
81 | #: src/elektroid.c:698 src/elektroid.c:789 | |
81 | 82 | msgid "SysEx Files" |
82 | 83 | msgstr "SysEx Dateien" |
83 | 84 | |
84 | #: src/elektroid.c:696 | |
85 | #, fuzzy, c-format | |
85 | #: src/elektroid.c:732 | |
86 | #, c-format | |
86 | 87 | msgid "Error while saving “%s”: %s." |
87 | 88 | msgstr "Fehler beim Löschen »%s«: %s." |
88 | 89 | |
89 | #: src/elektroid.c:744 | |
90 | #: src/elektroid.c:780 | |
90 | 91 | msgid "Open SysEx" |
91 | 92 | msgstr "Öffne SysEx" |
92 | 93 | |
93 | #: src/elektroid.c:749 | |
94 | #: src/elektroid.c:785 | |
94 | 95 | msgid "_Open" |
95 | 96 | msgstr "_Öffnen" |
96 | 97 | |
97 | #: src/elektroid.c:770 | |
98 | #, fuzzy, c-format | |
98 | #: src/elektroid.c:806 | |
99 | #, c-format | |
99 | 100 | msgid "Error while loading “%s”: %s." |
100 | 101 | msgstr "Fehler beim Löschen »%s«: %s." |
101 | 102 | |
102 | #: src/elektroid.c:780 | |
103 | #: src/elektroid.c:816 | |
103 | 104 | msgid "Send SysEx" |
104 | 105 | msgstr "Sende SysEx" |
105 | 106 | |
106 | #: src/elektroid.c:882 | |
107 | #: src/elektroid.c:918 | |
107 | 108 | #, c-format |
108 | 109 | msgid "Error while deleting “%s”: %s." |
109 | 110 | msgstr "Fehler beim Löschen »%s«: %s." |
110 | 111 | |
111 | #: src/elektroid.c:914 | |
112 | #: src/elektroid.c:950 | |
112 | 113 | msgid "Are you sure you want to delete the selected items?" |
113 | 114 | msgstr "Bist du sicher das du die ausgewählten Elemente löschen möchtest?" |
114 | 115 | |
115 | #: src/elektroid.c:916 | |
116 | #: src/elektroid.c:952 | |
116 | 117 | msgid "_Delete" |
117 | 118 | msgstr "_Löschen" |
118 | 119 | |
119 | #: src/elektroid.c:969 res/gui.glade:130 res/gui.glade:193 | |
120 | #: src/elektroid.c:1005 res/gui.glade:121 res/gui.glade:174 | |
120 | 121 | msgid "Rename" |
121 | 122 | msgstr "Umbenennen" |
122 | 123 | |
123 | #: src/elektroid.c:987 | |
124 | #: src/elektroid.c:1023 | |
124 | 125 | #, c-format |
125 | 126 | msgid "Error while renaming to “%s”: %s." |
126 | 127 | msgstr "Fehler beim Umbenennen von »%s«: %s." |
127 | 128 | |
128 | #: src/elektroid.c:1550 res/gui.glade:121 res/gui.glade:183 res/gui.glade:184 | |
129 | #: src/elektroid.c:1589 res/gui.glade:436 res/gui.glade:606 | |
129 | 130 | msgid "Add Directory" |
130 | 131 | msgstr "Verzeichnis hinzufügen" |
131 | 132 | |
132 | #: src/elektroid.c:1568 | |
133 | #: src/elektroid.c:1607 | |
133 | 134 | #, c-format |
134 | 135 | msgid "Error while creating dir “%s”: %s." |
135 | 136 | msgstr "Fehler beim Erstellen des Verzeichnisses »%s«: %s." |
136 | 137 | |
137 | #: src/elektroid.c:1640 | |
138 | #: src/elektroid.c:1679 | |
138 | 139 | msgid "Queued" |
139 | 140 | msgstr "In der Warteschlange" |
140 | 141 | |
141 | #: src/elektroid.c:1642 | |
142 | #: src/elektroid.c:1681 | |
142 | 143 | msgid "Running" |
143 | 144 | msgstr "Wird ausgeführt" |
144 | 145 | |
145 | #: src/elektroid.c:1644 | |
146 | #: src/elektroid.c:1683 | |
146 | 147 | msgid "Completed" |
147 | 148 | msgstr "Fertig" |
148 | 149 | |
149 | #: src/elektroid.c:1646 | |
150 | #: src/elektroid.c:1685 | |
150 | 151 | msgid "Completed with errors" |
151 | 152 | msgstr "Abgeschlossen mit Fehlern" |
152 | 153 | |
153 | #: src/elektroid.c:1648 | |
154 | #: src/elektroid.c:1687 | |
154 | 155 | msgid "Canceled" |
155 | 156 | msgstr "Abgebrochen" |
156 | 157 | |
157 | #: src/elektroid.c:1660 | |
158 | #: src/elektroid.c:1699 | |
158 | 159 | msgid "Upload" |
159 | 160 | msgstr "Hochladen" |
160 | 161 | |
161 | #: src/elektroid.c:1662 | |
162 | #: src/elektroid.c:1701 | |
162 | 163 | msgid "Download" |
163 | 164 | msgstr "Herunterladen" |
164 | 165 | |
165 | #: src/elektroid.c:2518 src/elektroid.c:2559 | |
166 | #: src/elektroid.c:2560 src/elektroid.c:2601 | |
166 | 167 | #, c-format |
167 | 168 | msgid "Error while moving from “%s” to “%s”: %s." |
168 | 169 | msgstr "Fehler beim Verschieben von »%s« nach »%s«: %s." |
183 | 184 | msgid "Show in File Manager" |
184 | 185 | msgstr "Im Dateimanager _Anzeigen" |
185 | 186 | |
186 | #: res/gui.glade:139 res/gui.glade:202 | |
187 | #: res/gui.glade:130 res/gui.glade:183 | |
187 | 188 | msgid "Delete" |
188 | 189 | msgstr "Löschen" |
189 | 190 | |
190 | #: res/gui.glade:168 | |
191 | #: res/gui.glade:159 | |
191 | 192 | msgid "Download Selection" |
192 | 193 | msgstr "Download Auswahl" |
193 | 194 | |
194 | #: res/gui.glade:238 | |
195 | #, fuzzy | |
195 | #: res/gui.glade:219 | |
196 | 196 | msgid "GNU/Linux transfer application for Elektron devices" |
197 | 197 | msgstr "GNU/Linux Transfer Anwendung für Elektron Instrumente" |
198 | 198 | |
199 | #: res/gui.glade:241 | |
199 | #: res/gui.glade:222 | |
200 | 200 | msgid "translator-credits" |
201 | 201 | msgstr "Dennis Braun <d_braun@kabelmail.de>" |
202 | 202 | |
203 | #: res/gui.glade:289 | |
203 | #: res/gui.glade:270 | |
204 | 204 | msgid "_Receive SysEx" |
205 | 205 | msgstr "_Empfange SysEx" |
206 | 206 | |
207 | #: res/gui.glade:302 | |
207 | #: res/gui.glade:283 | |
208 | 208 | msgid "_Send SysEx" |
209 | 209 | msgstr "_Sende SysEx" |
210 | 210 | |
211 | #: res/gui.glade:326 | |
211 | #: res/gui.glade:307 | |
212 | 212 | msgid "OS _Upgrade" |
213 | 213 | msgstr "OS _Aktualisierung" |
214 | 214 | |
215 | #: res/gui.glade:350 | |
215 | #: res/gui.glade:331 | |
216 | 216 | msgid "_About" |
217 | 217 | msgstr "_Info" |
218 | 218 | |
219 | #: res/gui.glade:434 res/gui.glade:583 | |
219 | #: res/gui.glade:415 res/gui.glade:585 | |
220 | 220 | msgid "Go to Parent Directory" |
221 | 221 | msgstr "Gehe zum Überverzeichnis" |
222 | 222 | |
223 | #: res/gui.glade:455 res/gui.glade:604 | |
223 | #: res/gui.glade:457 res/gui.glade:627 | |
224 | 224 | msgid "Refresh Directory" |
225 | 225 | msgstr "Aktualisiere Verzeichnis" |
226 | 226 | |
227 | #: res/gui.glade:512 res/gui.glade:671 res/gui.glade:1362 | |
227 | #: res/gui.glade:514 res/gui.glade:694 res/gui.glade:1377 | |
228 | 228 | msgid "Name" |
229 | 229 | msgstr "Name" |
230 | 230 | |
231 | #: res/gui.glade:526 res/gui.glade:685 | |
231 | #: res/gui.glade:528 res/gui.glade:708 | |
232 | 232 | msgid "Size" |
233 | 233 | msgstr "Größe" |
234 | 234 | |
235 | #: res/gui.glade:738 | |
235 | #: res/gui.glade:761 | |
236 | 236 | msgid "Refresh Devices" |
237 | 237 | msgstr "Aktualisiere Geräte" |
238 | 238 | |
239 | 239 | #. It is recommended to split the text in two lines if it is too long |
240 | #: res/gui.glade:856 | |
240 | #: res/gui.glade:879 | |
241 | 241 | msgid "Auto play" |
242 | 242 | msgstr "Auto Play" |
243 | 243 | |
244 | #: res/gui.glade:1088 | |
244 | #: res/gui.glade:1101 | |
245 | 245 | msgid "Status" |
246 | 246 | msgstr "Status" |
247 | 247 | |
248 | #: res/gui.glade:1099 | |
248 | #: res/gui.glade:1112 | |
249 | 249 | msgid "Type" |
250 | 250 | msgstr "Typ" |
251 | 251 | |
252 | #: res/gui.glade:1120 | |
252 | #: res/gui.glade:1133 | |
253 | 253 | msgid "Source" |
254 | 254 | msgstr "Quelle" |
255 | 255 | |
256 | #: res/gui.glade:1134 | |
256 | #: res/gui.glade:1147 | |
257 | 257 | msgid "Destination" |
258 | 258 | msgstr "Ziel" |
259 | 259 | |
260 | #: res/gui.glade:1149 | |
260 | #: res/gui.glade:1162 | |
261 | 261 | msgid "Progress" |
262 | 262 | msgstr "Fortschritt" |
263 | 263 | |
264 | #: res/gui.glade:1181 | |
264 | #: res/gui.glade:1194 | |
265 | 265 | msgid "Cancel Tasks" |
266 | 266 | msgstr "Aufgaben abbrechen" |
267 | 267 | |
268 | #: res/gui.glade:1202 | |
268 | #: res/gui.glade:1215 | |
269 | 269 | msgid "Remove Queued Tasks" |
270 | 270 | msgstr "Lösche Aufgaben in der Warteschlange" |
271 | 271 | |
272 | #: res/gui.glade:1223 | |
272 | #: res/gui.glade:1236 | |
273 | 273 | msgid "Clear Finished Tasks" |
274 | 274 | msgstr "Abgeschlossene Aufgaben aufräumen" |
5 | 5 | #, fuzzy |
6 | 6 | msgid "" |
7 | 7 | msgstr "" |
8 | "Project-Id-Version: elektroid 2.0-beta\n" | |
8 | "Project-Id-Version: elektroid 2.1\n" | |
9 | 9 | "Report-Msgid-Bugs-To: dagargo@gmail.com\n" |
10 | "POT-Creation-Date: 2021-12-01 18:58+0100\n" | |
10 | "POT-Creation-Date: 2022-06-03 08:47+0200\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
16 | 16 | "Content-Type: text/plain; charset=UTF-8\n" |
17 | 17 | "Content-Transfer-Encoding: 8bit\n" |
18 | 18 | |
19 | #: src/elektroid.c:249 | |
19 | #: src/elektroid.c:246 | |
20 | 20 | msgid "Samples" |
21 | 21 | msgstr "" |
22 | 22 | |
23 | #: src/elektroid.c:251 | |
23 | #: src/elektroid.c:248 | |
24 | 24 | msgid "Presets" |
25 | 25 | msgstr "" |
26 | 26 | |
27 | #: src/elektroid.c:253 | |
27 | #: src/elektroid.c:250 | |
28 | 28 | msgid "Projects" |
29 | 29 | msgstr "" |
30 | 30 | |
31 | #: src/elektroid.c:255 | |
31 | #: src/elektroid.c:252 | |
32 | 32 | msgid "Sounds" |
33 | 33 | msgstr "" |
34 | 34 | |
35 | #: src/elektroid.c:257 src/elektroid.c:1650 src/elektroid.c:1664 | |
35 | #: src/elektroid.c:254 src/elektroid.c:1689 src/elektroid.c:1703 | |
36 | 36 | msgid "Undefined" |
37 | 37 | msgstr "" |
38 | 38 | |
39 | #: src/elektroid.c:398 | |
39 | #: src/elektroid.c:434 | |
40 | 40 | #, c-format |
41 | 41 | msgid "Connected to %s%s" |
42 | 42 | msgstr "" |
43 | 43 | |
44 | #: src/elektroid.c:406 src/elektroid.c:3215 | |
44 | #: src/elektroid.c:442 src/elektroid.c:3256 | |
45 | 45 | msgid "Not connected" |
46 | 46 | msgstr "" |
47 | 47 | |
48 | #: src/elektroid.c:549 | |
48 | #: src/elektroid.c:585 | |
49 | 49 | msgid "Waiting..." |
50 | 50 | msgstr "" |
51 | 51 | |
52 | #: src/elektroid.c:552 | |
52 | #: src/elektroid.c:588 | |
53 | 53 | msgid "Sending..." |
54 | 54 | msgstr "" |
55 | 55 | |
56 | #: src/elektroid.c:556 | |
56 | #: src/elektroid.c:592 | |
57 | 57 | msgid "Receiving..." |
58 | 58 | msgstr "" |
59 | 59 | |
60 | #: src/elektroid.c:624 | |
60 | #: src/elektroid.c:660 | |
61 | 61 | msgid "Receive SysEx" |
62 | 62 | msgstr "" |
63 | 63 | |
64 | #: src/elektroid.c:648 | |
64 | #: src/elektroid.c:684 | |
65 | 65 | msgid "Save SysEx" |
66 | 66 | msgstr "" |
67 | 67 | |
68 | #: src/elektroid.c:651 src/elektroid.c:747 src/elektroid.c:915 | |
68 | #: src/elektroid.c:687 src/elektroid.c:783 src/elektroid.c:951 | |
69 | #: res/gui.glade:1332 res/gui.glade:1432 | |
69 | 70 | msgid "_Cancel" |
70 | 71 | msgstr "" |
71 | 72 | |
72 | #: src/elektroid.c:653 | |
73 | #: src/elektroid.c:689 res/gui.glade:1346 | |
73 | 74 | msgid "_Save" |
74 | 75 | msgstr "" |
75 | 76 | |
76 | #: src/elektroid.c:657 | |
77 | #: src/elektroid.c:693 | |
77 | 78 | msgid "Received SysEx" |
78 | 79 | msgstr "" |
79 | 80 | |
80 | #: src/elektroid.c:662 src/elektroid.c:753 | |
81 | #: src/elektroid.c:698 src/elektroid.c:789 | |
81 | 82 | msgid "SysEx Files" |
82 | 83 | msgstr "" |
83 | 84 | |
84 | #: src/elektroid.c:696 | |
85 | #: src/elektroid.c:732 | |
85 | 86 | #, c-format |
86 | 87 | msgid "Error while saving “%s”: %s." |
87 | 88 | msgstr "" |
88 | 89 | |
89 | #: src/elektroid.c:744 | |
90 | #: src/elektroid.c:780 | |
90 | 91 | msgid "Open SysEx" |
91 | 92 | msgstr "" |
92 | 93 | |
93 | #: src/elektroid.c:749 | |
94 | #: src/elektroid.c:785 | |
94 | 95 | msgid "_Open" |
95 | 96 | msgstr "" |
96 | 97 | |
97 | #: src/elektroid.c:770 | |
98 | #: src/elektroid.c:806 | |
98 | 99 | #, c-format |
99 | 100 | msgid "Error while loading “%s”: %s." |
100 | 101 | msgstr "" |
101 | 102 | |
102 | #: src/elektroid.c:780 | |
103 | #: src/elektroid.c:816 | |
103 | 104 | msgid "Send SysEx" |
104 | 105 | msgstr "" |
105 | 106 | |
106 | #: src/elektroid.c:882 | |
107 | #: src/elektroid.c:918 | |
107 | 108 | #, c-format |
108 | 109 | msgid "Error while deleting “%s”: %s." |
109 | 110 | msgstr "" |
110 | 111 | |
111 | #: src/elektroid.c:914 | |
112 | #: src/elektroid.c:950 | |
112 | 113 | msgid "Are you sure you want to delete the selected items?" |
113 | 114 | msgstr "" |
114 | 115 | |
115 | #: src/elektroid.c:916 | |
116 | #: src/elektroid.c:952 | |
116 | 117 | msgid "_Delete" |
117 | 118 | msgstr "" |
118 | 119 | |
119 | #: src/elektroid.c:969 res/gui.glade:130 res/gui.glade:193 | |
120 | #: src/elektroid.c:1005 res/gui.glade:121 res/gui.glade:174 | |
120 | 121 | msgid "Rename" |
121 | 122 | msgstr "" |
122 | 123 | |
123 | #: src/elektroid.c:987 | |
124 | #: src/elektroid.c:1023 | |
124 | 125 | #, c-format |
125 | 126 | msgid "Error while renaming to “%s”: %s." |
126 | 127 | msgstr "" |
127 | 128 | |
128 | #: src/elektroid.c:1550 res/gui.glade:121 res/gui.glade:183 res/gui.glade:184 | |
129 | #: src/elektroid.c:1589 res/gui.glade:436 res/gui.glade:606 | |
129 | 130 | msgid "Add Directory" |
130 | 131 | msgstr "" |
131 | 132 | |
132 | #: src/elektroid.c:1568 | |
133 | #: src/elektroid.c:1607 | |
133 | 134 | #, c-format |
134 | 135 | msgid "Error while creating dir “%s”: %s." |
135 | 136 | msgstr "" |
136 | 137 | |
137 | #: src/elektroid.c:1640 | |
138 | #: src/elektroid.c:1679 | |
138 | 139 | msgid "Queued" |
139 | 140 | msgstr "" |
140 | 141 | |
141 | #: src/elektroid.c:1642 | |
142 | #: src/elektroid.c:1681 | |
142 | 143 | msgid "Running" |
143 | 144 | msgstr "" |
144 | 145 | |
145 | #: src/elektroid.c:1644 | |
146 | #: src/elektroid.c:1683 | |
146 | 147 | msgid "Completed" |
147 | 148 | msgstr "" |
148 | 149 | |
149 | #: src/elektroid.c:1646 | |
150 | #: src/elektroid.c:1685 | |
150 | 151 | msgid "Completed with errors" |
151 | 152 | msgstr "" |
152 | 153 | |
153 | #: src/elektroid.c:1648 | |
154 | #: src/elektroid.c:1687 | |
154 | 155 | msgid "Canceled" |
155 | 156 | msgstr "" |
156 | 157 | |
157 | #: src/elektroid.c:1660 | |
158 | #: src/elektroid.c:1699 | |
158 | 159 | msgid "Upload" |
159 | 160 | msgstr "" |
160 | 161 | |
161 | #: src/elektroid.c:1662 | |
162 | #: src/elektroid.c:1701 | |
162 | 163 | msgid "Download" |
163 | 164 | msgstr "" |
164 | 165 | |
165 | #: src/elektroid.c:2518 src/elektroid.c:2559 | |
166 | #: src/elektroid.c:2560 src/elektroid.c:2601 | |
166 | 167 | #, c-format |
167 | 168 | msgid "Error while moving from “%s” to “%s”: %s." |
168 | 169 | msgstr "" |
183 | 184 | msgid "Show in File Manager" |
184 | 185 | msgstr "" |
185 | 186 | |
186 | #: res/gui.glade:139 res/gui.glade:202 | |
187 | #: res/gui.glade:130 res/gui.glade:183 | |
187 | 188 | msgid "Delete" |
188 | 189 | msgstr "" |
189 | 190 | |
190 | #: res/gui.glade:168 | |
191 | #: res/gui.glade:159 | |
191 | 192 | msgid "Download Selection" |
192 | 193 | msgstr "" |
193 | 194 | |
194 | #: res/gui.glade:238 | |
195 | #: res/gui.glade:219 | |
195 | 196 | msgid "GNU/Linux transfer application for Elektron devices" |
196 | 197 | msgstr "" |
197 | 198 | |
198 | #: res/gui.glade:241 | |
199 | #: res/gui.glade:222 | |
199 | 200 | msgid "translator-credits" |
200 | 201 | msgstr "" |
201 | 202 | |
202 | #: res/gui.glade:289 | |
203 | #: res/gui.glade:270 | |
203 | 204 | msgid "_Receive SysEx" |
204 | 205 | msgstr "" |
205 | 206 | |
206 | #: res/gui.glade:302 | |
207 | #: res/gui.glade:283 | |
207 | 208 | msgid "_Send SysEx" |
208 | 209 | msgstr "" |
209 | 210 | |
210 | #: res/gui.glade:326 | |
211 | #: res/gui.glade:307 | |
211 | 212 | msgid "OS _Upgrade" |
212 | 213 | msgstr "" |
213 | 214 | |
214 | #: res/gui.glade:350 | |
215 | #: res/gui.glade:331 | |
215 | 216 | msgid "_About" |
216 | 217 | msgstr "" |
217 | 218 | |
218 | #: res/gui.glade:434 res/gui.glade:583 | |
219 | #: res/gui.glade:415 res/gui.glade:585 | |
219 | 220 | msgid "Go to Parent Directory" |
220 | 221 | msgstr "" |
221 | 222 | |
222 | #: res/gui.glade:455 res/gui.glade:604 | |
223 | #: res/gui.glade:457 res/gui.glade:627 | |
223 | 224 | msgid "Refresh Directory" |
224 | 225 | msgstr "" |
225 | 226 | |
226 | #: res/gui.glade:512 res/gui.glade:671 res/gui.glade:1362 | |
227 | #: res/gui.glade:514 res/gui.glade:694 res/gui.glade:1377 | |
227 | 228 | msgid "Name" |
228 | 229 | msgstr "" |
229 | 230 | |
230 | #: res/gui.glade:526 res/gui.glade:685 | |
231 | #: res/gui.glade:528 res/gui.glade:708 | |
231 | 232 | msgid "Size" |
232 | 233 | msgstr "" |
233 | 234 | |
234 | #: res/gui.glade:738 | |
235 | #: res/gui.glade:761 | |
235 | 236 | msgid "Refresh Devices" |
236 | 237 | msgstr "" |
237 | 238 | |
238 | 239 | #. It is recommended to split the text in two lines if it is too long |
239 | #: res/gui.glade:856 | |
240 | #: res/gui.glade:879 | |
240 | 241 | msgid "Auto play" |
241 | 242 | msgstr "" |
242 | 243 | |
243 | #: res/gui.glade:1088 | |
244 | #: res/gui.glade:1101 | |
244 | 245 | msgid "Status" |
245 | 246 | msgstr "" |
246 | 247 | |
247 | #: res/gui.glade:1099 | |
248 | #: res/gui.glade:1112 | |
248 | 249 | msgid "Type" |
249 | 250 | msgstr "" |
250 | 251 | |
251 | #: res/gui.glade:1120 | |
252 | #: res/gui.glade:1133 | |
252 | 253 | msgid "Source" |
253 | 254 | msgstr "" |
254 | 255 | |
255 | #: res/gui.glade:1134 | |
256 | #: res/gui.glade:1147 | |
256 | 257 | msgid "Destination" |
257 | 258 | msgstr "" |
258 | 259 | |
259 | #: res/gui.glade:1149 | |
260 | #: res/gui.glade:1162 | |
260 | 261 | msgid "Progress" |
261 | 262 | msgstr "" |
262 | 263 | |
263 | #: res/gui.glade:1181 | |
264 | #: res/gui.glade:1194 | |
264 | 265 | msgid "Cancel Tasks" |
265 | 266 | msgstr "" |
266 | 267 | |
267 | #: res/gui.glade:1202 | |
268 | #: res/gui.glade:1215 | |
268 | 269 | msgid "Remove Queued Tasks" |
269 | 270 | msgstr "" |
270 | 271 | |
271 | #: res/gui.glade:1223 | |
272 | #: res/gui.glade:1236 | |
272 | 273 | msgid "Clear Finished Tasks" |
273 | 274 | msgstr "" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: elektroid 1.4\n" |
8 | 8 | "Report-Msgid-Bugs-To: dagargo@gmail.com\n" |
9 | "POT-Creation-Date: 2021-12-01 18:58+0100\n" | |
9 | "POT-Creation-Date: 2022-06-03 08:47+0200\n" | |
10 | 10 | "PO-Revision-Date: 2020-04-26 13:00+0100\n" |
11 | 11 | "Last-Translator: David García Goñi <dagargo@gmail.com>\n" |
12 | 12 | "Language-Team: English\n" |
16 | 16 | "Content-Transfer-Encoding: 8bit\n" |
17 | 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" |
18 | 18 | |
19 | #: src/elektroid.c:249 | |
19 | #: src/elektroid.c:246 | |
20 | 20 | msgid "Samples" |
21 | 21 | msgstr "Samples" |
22 | 22 | |
23 | #: src/elektroid.c:251 | |
23 | #: src/elektroid.c:248 | |
24 | 24 | msgid "Presets" |
25 | 25 | msgstr "Presets" |
26 | 26 | |
27 | #: src/elektroid.c:253 | |
27 | #: src/elektroid.c:250 | |
28 | 28 | msgid "Projects" |
29 | 29 | msgstr "Projects" |
30 | 30 | |
31 | #: src/elektroid.c:255 | |
31 | #: src/elektroid.c:252 | |
32 | 32 | msgid "Sounds" |
33 | 33 | msgstr "Sounds" |
34 | 34 | |
35 | #: src/elektroid.c:257 src/elektroid.c:1650 src/elektroid.c:1664 | |
35 | #: src/elektroid.c:254 src/elektroid.c:1689 src/elektroid.c:1703 | |
36 | 36 | msgid "Undefined" |
37 | 37 | msgstr "Undefined" |
38 | 38 | |
39 | #: src/elektroid.c:398 | |
39 | #: src/elektroid.c:434 | |
40 | 40 | #, c-format |
41 | 41 | msgid "Connected to %s%s" |
42 | 42 | msgstr "Connected to %s%s" |
43 | 43 | |
44 | #: src/elektroid.c:406 src/elektroid.c:3215 | |
44 | #: src/elektroid.c:442 src/elektroid.c:3256 | |
45 | 45 | msgid "Not connected" |
46 | 46 | msgstr "Not connected" |
47 | 47 | |
48 | #: src/elektroid.c:549 | |
48 | #: src/elektroid.c:585 | |
49 | 49 | msgid "Waiting..." |
50 | 50 | msgstr "Waiting..." |
51 | 51 | |
52 | #: src/elektroid.c:552 | |
52 | #: src/elektroid.c:588 | |
53 | 53 | msgid "Sending..." |
54 | 54 | msgstr "Sending..." |
55 | 55 | |
56 | #: src/elektroid.c:556 | |
56 | #: src/elektroid.c:592 | |
57 | 57 | msgid "Receiving..." |
58 | 58 | msgstr "Receiving..." |
59 | 59 | |
60 | #: src/elektroid.c:624 | |
60 | #: src/elektroid.c:660 | |
61 | 61 | msgid "Receive SysEx" |
62 | 62 | msgstr "Receive SysEx" |
63 | 63 | |
64 | #: src/elektroid.c:648 | |
64 | #: src/elektroid.c:684 | |
65 | 65 | msgid "Save SysEx" |
66 | 66 | msgstr "Save SysEx" |
67 | 67 | |
68 | #: src/elektroid.c:651 src/elektroid.c:747 src/elektroid.c:915 | |
68 | #: src/elektroid.c:687 src/elektroid.c:783 src/elektroid.c:951 | |
69 | #: res/gui.glade:1332 res/gui.glade:1432 | |
69 | 70 | msgid "_Cancel" |
70 | 71 | msgstr "_Cancel" |
71 | 72 | |
72 | #: src/elektroid.c:653 | |
73 | #: src/elektroid.c:689 res/gui.glade:1346 | |
73 | 74 | msgid "_Save" |
74 | 75 | msgstr "_Save" |
75 | 76 | |
76 | #: src/elektroid.c:657 | |
77 | #: src/elektroid.c:693 | |
77 | 78 | msgid "Received SysEx" |
78 | 79 | msgstr "Received SysEx" |
79 | 80 | |
80 | #: src/elektroid.c:662 src/elektroid.c:753 | |
81 | #: src/elektroid.c:698 src/elektroid.c:789 | |
81 | 82 | msgid "SysEx Files" |
82 | 83 | msgstr "SysEx Files" |
83 | 84 | |
84 | #: src/elektroid.c:696 | |
85 | #: src/elektroid.c:732 | |
85 | 86 | #, c-format |
86 | 87 | msgid "Error while saving “%s”: %s." |
87 | 88 | msgstr "Error while saving “%s”: %s." |
88 | 89 | |
89 | #: src/elektroid.c:744 | |
90 | #: src/elektroid.c:780 | |
90 | 91 | msgid "Open SysEx" |
91 | 92 | msgstr "Open SysEx" |
92 | 93 | |
93 | #: src/elektroid.c:749 | |
94 | #: src/elektroid.c:785 | |
94 | 95 | msgid "_Open" |
95 | 96 | msgstr "_Open" |
96 | 97 | |
97 | #: src/elektroid.c:770 | |
98 | #: src/elektroid.c:806 | |
98 | 99 | #, c-format |
99 | 100 | msgid "Error while loading “%s”: %s." |
100 | 101 | msgstr "Error while loading “%s”: %s." |
101 | 102 | |
102 | #: src/elektroid.c:780 | |
103 | #: src/elektroid.c:816 | |
103 | 104 | msgid "Send SysEx" |
104 | 105 | msgstr "Send SysEx" |
105 | 106 | |
106 | #: src/elektroid.c:882 | |
107 | #: src/elektroid.c:918 | |
107 | 108 | #, c-format |
108 | 109 | msgid "Error while deleting “%s”: %s." |
109 | 110 | msgstr "Error while deleting “%s”: %s." |
110 | 111 | |
111 | #: src/elektroid.c:914 | |
112 | #: src/elektroid.c:950 | |
112 | 113 | msgid "Are you sure you want to delete the selected items?" |
113 | 114 | msgstr "Are you sure you want to delete the selected items?" |
114 | 115 | |
115 | #: src/elektroid.c:916 | |
116 | #: src/elektroid.c:952 | |
116 | 117 | msgid "_Delete" |
117 | 118 | msgstr "_Delete" |
118 | 119 | |
119 | #: src/elektroid.c:969 res/gui.glade:130 res/gui.glade:193 | |
120 | #: src/elektroid.c:1005 res/gui.glade:121 res/gui.glade:174 | |
120 | 121 | msgid "Rename" |
121 | 122 | msgstr "Rename" |
122 | 123 | |
123 | #: src/elektroid.c:987 | |
124 | #: src/elektroid.c:1023 | |
124 | 125 | #, c-format |
125 | 126 | msgid "Error while renaming to “%s”: %s." |
126 | 127 | msgstr "Error while renaming to “%s”: %s." |
127 | 128 | |
128 | #: src/elektroid.c:1550 res/gui.glade:121 res/gui.glade:183 res/gui.glade:184 | |
129 | #: src/elektroid.c:1589 res/gui.glade:436 res/gui.glade:606 | |
129 | 130 | msgid "Add Directory" |
130 | 131 | msgstr "Add Directory" |
131 | 132 | |
132 | #: src/elektroid.c:1568 | |
133 | #: src/elektroid.c:1607 | |
133 | 134 | #, c-format |
134 | 135 | msgid "Error while creating dir “%s”: %s." |
135 | 136 | msgstr "Error while creating dir “%s”: %s." |
136 | 137 | |
137 | #: src/elektroid.c:1640 | |
138 | #: src/elektroid.c:1679 | |
138 | 139 | msgid "Queued" |
139 | 140 | msgstr "Queued" |
140 | 141 | |
141 | #: src/elektroid.c:1642 | |
142 | #: src/elektroid.c:1681 | |
142 | 143 | msgid "Running" |
143 | 144 | msgstr "Running" |
144 | 145 | |
145 | #: src/elektroid.c:1644 | |
146 | #: src/elektroid.c:1683 | |
146 | 147 | msgid "Completed" |
147 | 148 | msgstr "Completed" |
148 | 149 | |
149 | #: src/elektroid.c:1646 | |
150 | #: src/elektroid.c:1685 | |
150 | 151 | msgid "Completed with errors" |
151 | 152 | msgstr "Completed with errors" |
152 | 153 | |
153 | #: src/elektroid.c:1648 | |
154 | #: src/elektroid.c:1687 | |
154 | 155 | msgid "Canceled" |
155 | 156 | msgstr "Canceled" |
156 | 157 | |
157 | #: src/elektroid.c:1660 | |
158 | #: src/elektroid.c:1699 | |
158 | 159 | msgid "Upload" |
159 | 160 | msgstr "Upload" |
160 | 161 | |
161 | #: src/elektroid.c:1662 | |
162 | #: src/elektroid.c:1701 | |
162 | 163 | msgid "Download" |
163 | 164 | msgstr "Download" |
164 | 165 | |
165 | #: src/elektroid.c:2518 src/elektroid.c:2559 | |
166 | #: src/elektroid.c:2560 src/elektroid.c:2601 | |
166 | 167 | #, c-format |
167 | 168 | msgid "Error while moving from “%s” to “%s”: %s." |
168 | 169 | msgstr "Error while moving from “%s” to “%s”: %s." |
183 | 184 | msgid "Show in File Manager" |
184 | 185 | msgstr "Show in File Manager" |
185 | 186 | |
186 | #: res/gui.glade:139 res/gui.glade:202 | |
187 | #: res/gui.glade:130 res/gui.glade:183 | |
187 | 188 | msgid "Delete" |
188 | 189 | msgstr "Delete" |
189 | 190 | |
190 | #: res/gui.glade:168 | |
191 | #: res/gui.glade:159 | |
191 | 192 | msgid "Download Selection" |
192 | 193 | msgstr "Download selection" |
193 | 194 | |
194 | #: res/gui.glade:238 | |
195 | #: res/gui.glade:219 | |
195 | 196 | msgid "GNU/Linux transfer application for Elektron devices" |
196 | 197 | msgstr "GNU/Linux transfer application for Elektron devices" |
197 | 198 | |
198 | #: res/gui.glade:241 | |
199 | #: res/gui.glade:222 | |
199 | 200 | msgid "translator-credits" |
200 | 201 | msgstr "David García Goñi <dagargo@gmail.com>" |
201 | 202 | |
202 | #: res/gui.glade:289 | |
203 | #: res/gui.glade:270 | |
203 | 204 | msgid "_Receive SysEx" |
204 | 205 | msgstr "_Receive SysEx" |
205 | 206 | |
206 | #: res/gui.glade:302 | |
207 | #: res/gui.glade:283 | |
207 | 208 | msgid "_Send SysEx" |
208 | 209 | msgstr "_Send SysEx" |
209 | 210 | |
210 | #: res/gui.glade:326 | |
211 | #: res/gui.glade:307 | |
211 | 212 | msgid "OS _Upgrade" |
212 | 213 | msgstr "OS _Upgrade" |
213 | 214 | |
214 | #: res/gui.glade:350 | |
215 | #: res/gui.glade:331 | |
215 | 216 | msgid "_About" |
216 | 217 | msgstr "_About" |
217 | 218 | |
218 | #: res/gui.glade:434 res/gui.glade:583 | |
219 | #: res/gui.glade:415 res/gui.glade:585 | |
219 | 220 | msgid "Go to Parent Directory" |
220 | 221 | msgstr "Go to Parent Directory" |
221 | 222 | |
222 | #: res/gui.glade:455 res/gui.glade:604 | |
223 | #: res/gui.glade:457 res/gui.glade:627 | |
223 | 224 | msgid "Refresh Directory" |
224 | 225 | msgstr "Refresh Directory" |
225 | 226 | |
226 | #: res/gui.glade:512 res/gui.glade:671 res/gui.glade:1362 | |
227 | #: res/gui.glade:514 res/gui.glade:694 res/gui.glade:1377 | |
227 | 228 | msgid "Name" |
228 | 229 | msgstr "Name" |
229 | 230 | |
230 | #: res/gui.glade:526 res/gui.glade:685 | |
231 | #: res/gui.glade:528 res/gui.glade:708 | |
231 | 232 | msgid "Size" |
232 | 233 | msgstr "Size" |
233 | 234 | |
234 | #: res/gui.glade:738 | |
235 | #: res/gui.glade:761 | |
235 | 236 | msgid "Refresh Devices" |
236 | 237 | msgstr "Refresh Devices" |
237 | 238 | |
238 | 239 | #. It is recommended to split the text in two lines if it is too long |
239 | #: res/gui.glade:856 | |
240 | #: res/gui.glade:879 | |
240 | 241 | msgid "Auto play" |
241 | 242 | msgstr "Auto play" |
242 | 243 | |
243 | #: res/gui.glade:1088 | |
244 | #: res/gui.glade:1101 | |
244 | 245 | msgid "Status" |
245 | 246 | msgstr "Status" |
246 | 247 | |
247 | #: res/gui.glade:1099 | |
248 | #: res/gui.glade:1112 | |
248 | 249 | msgid "Type" |
249 | 250 | msgstr "Type" |
250 | 251 | |
251 | #: res/gui.glade:1120 | |
252 | #: res/gui.glade:1133 | |
252 | 253 | msgid "Source" |
253 | 254 | msgstr "Source" |
254 | 255 | |
255 | #: res/gui.glade:1134 | |
256 | #: res/gui.glade:1147 | |
256 | 257 | msgid "Destination" |
257 | 258 | msgstr "Destination" |
258 | 259 | |
259 | #: res/gui.glade:1149 | |
260 | #: res/gui.glade:1162 | |
260 | 261 | msgid "Progress" |
261 | 262 | msgstr "Progress" |
262 | 263 | |
263 | #: res/gui.glade:1181 | |
264 | #: res/gui.glade:1194 | |
264 | 265 | msgid "Cancel Tasks" |
265 | 266 | msgstr "Cancel Tasks" |
266 | 267 | |
267 | #: res/gui.glade:1202 | |
268 | #: res/gui.glade:1215 | |
268 | 269 | msgid "Remove Queued Tasks" |
269 | 270 | msgstr "Remove Queued Tasks" |
270 | 271 | |
271 | #: res/gui.glade:1223 | |
272 | #: res/gui.glade:1236 | |
272 | 273 | msgid "Clear Finished Tasks" |
273 | 274 | msgstr "Clear Finished Tasks" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: elektroid 1.4\n" |
8 | 8 | "Report-Msgid-Bugs-To: dagargo@gmail.com\n" |
9 | "POT-Creation-Date: 2021-12-01 18:58+0100\n" | |
9 | "POT-Creation-Date: 2022-06-03 08:47+0200\n" | |
10 | 10 | "PO-Revision-Date: 2020-04-26 13:00+0100\n" |
11 | 11 | "Last-Translator: David García Goñi <dagargo@gmail.com>\n" |
12 | 12 | "Language-Team: Spanish\n" |
16 | 16 | "Content-Transfer-Encoding: 8bit\n" |
17 | 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" |
18 | 18 | |
19 | #: src/elektroid.c:249 | |
19 | #: src/elektroid.c:246 | |
20 | 20 | msgid "Samples" |
21 | 21 | msgstr "Muestras" |
22 | 22 | |
23 | #: src/elektroid.c:251 | |
23 | #: src/elektroid.c:248 | |
24 | 24 | msgid "Presets" |
25 | 25 | msgstr "Programas" |
26 | 26 | |
27 | #: src/elektroid.c:253 | |
27 | #: src/elektroid.c:250 | |
28 | 28 | msgid "Projects" |
29 | 29 | msgstr "Proyectos" |
30 | 30 | |
31 | #: src/elektroid.c:255 | |
31 | #: src/elektroid.c:252 | |
32 | 32 | msgid "Sounds" |
33 | 33 | msgstr "Sonidos" |
34 | 34 | |
35 | #: src/elektroid.c:257 src/elektroid.c:1650 src/elektroid.c:1664 | |
35 | #: src/elektroid.c:254 src/elektroid.c:1689 src/elektroid.c:1703 | |
36 | 36 | msgid "Undefined" |
37 | 37 | msgstr "Indefinido" |
38 | 38 | |
39 | #: src/elektroid.c:398 | |
39 | #: src/elektroid.c:434 | |
40 | 40 | #, c-format |
41 | 41 | msgid "Connected to %s%s" |
42 | 42 | msgstr "Conectado a %s%s" |
43 | 43 | |
44 | #: src/elektroid.c:406 src/elektroid.c:3215 | |
44 | #: src/elektroid.c:442 src/elektroid.c:3256 | |
45 | 45 | msgid "Not connected" |
46 | 46 | msgstr "No conectado" |
47 | 47 | |
48 | #: src/elektroid.c:549 | |
48 | #: src/elektroid.c:585 | |
49 | 49 | msgid "Waiting..." |
50 | 50 | msgstr "Esperando..." |
51 | 51 | |
52 | #: src/elektroid.c:552 | |
52 | #: src/elektroid.c:588 | |
53 | 53 | msgid "Sending..." |
54 | 54 | msgstr "Enviando..." |
55 | 55 | |
56 | #: src/elektroid.c:556 | |
56 | #: src/elektroid.c:592 | |
57 | 57 | msgid "Receiving..." |
58 | 58 | msgstr "Recibiendo..." |
59 | 59 | |
60 | #: src/elektroid.c:624 | |
60 | #: src/elektroid.c:660 | |
61 | 61 | msgid "Receive SysEx" |
62 | 62 | msgstr "Recibir SysEx" |
63 | 63 | |
64 | #: src/elektroid.c:648 | |
64 | #: src/elektroid.c:684 | |
65 | 65 | msgid "Save SysEx" |
66 | 66 | msgstr "Guardar SysEx" |
67 | 67 | |
68 | #: src/elektroid.c:651 src/elektroid.c:747 src/elektroid.c:915 | |
68 | #: src/elektroid.c:687 src/elektroid.c:783 src/elektroid.c:951 | |
69 | #: res/gui.glade:1332 res/gui.glade:1432 | |
69 | 70 | msgid "_Cancel" |
70 | 71 | msgstr "_Cancelar" |
71 | 72 | |
72 | #: src/elektroid.c:653 | |
73 | #: src/elektroid.c:689 res/gui.glade:1346 | |
73 | 74 | msgid "_Save" |
74 | 75 | msgstr "_Guardar" |
75 | 76 | |
76 | #: src/elektroid.c:657 | |
77 | #: src/elektroid.c:693 | |
77 | 78 | msgid "Received SysEx" |
78 | 79 | msgstr "SysEx recibido" |
79 | 80 | |
80 | #: src/elektroid.c:662 src/elektroid.c:753 | |
81 | #: src/elektroid.c:698 src/elektroid.c:789 | |
81 | 82 | msgid "SysEx Files" |
82 | 83 | msgstr "Archivos SysEx" |
83 | 84 | |
84 | #: src/elektroid.c:696 | |
85 | #: src/elektroid.c:732 | |
85 | 86 | #, c-format |
86 | 87 | msgid "Error while saving “%s”: %s." |
87 | 88 | msgstr "Error al guardar «%s»: %s." |
88 | 89 | |
89 | #: src/elektroid.c:744 | |
90 | #: src/elektroid.c:780 | |
90 | 91 | msgid "Open SysEx" |
91 | 92 | msgstr "Abrir SysEx" |
92 | 93 | |
93 | #: src/elektroid.c:749 | |
94 | #: src/elektroid.c:785 | |
94 | 95 | msgid "_Open" |
95 | 96 | msgstr "_Abrir" |
96 | 97 | |
97 | #: src/elektroid.c:770 | |
98 | #: src/elektroid.c:806 | |
98 | 99 | #, c-format |
99 | 100 | msgid "Error while loading “%s”: %s." |
100 | 101 | msgstr "Error al cargar «%s»: %s." |
101 | 102 | |
102 | #: src/elektroid.c:780 | |
103 | #: src/elektroid.c:816 | |
103 | 104 | msgid "Send SysEx" |
104 | 105 | msgstr "Enviar SysEx" |
105 | 106 | |
106 | #: src/elektroid.c:882 | |
107 | #: src/elektroid.c:918 | |
107 | 108 | #, c-format |
108 | 109 | msgid "Error while deleting “%s”: %s." |
109 | 110 | msgstr "Error al eliminar «%s»: %s." |
110 | 111 | |
111 | #: src/elektroid.c:914 | |
112 | #: src/elektroid.c:950 | |
112 | 113 | msgid "Are you sure you want to delete the selected items?" |
113 | 114 | msgstr "¿Está seguro de que quiere eliminar los elementos seleccionados?" |
114 | 115 | |
115 | #: src/elektroid.c:916 | |
116 | #: src/elektroid.c:952 | |
116 | 117 | msgid "_Delete" |
117 | 118 | msgstr "_Eliminar" |
118 | 119 | |
119 | #: src/elektroid.c:969 res/gui.glade:130 res/gui.glade:193 | |
120 | #: src/elektroid.c:1005 res/gui.glade:121 res/gui.glade:174 | |
120 | 121 | msgid "Rename" |
121 | 122 | msgstr "Renombrar" |
122 | 123 | |
123 | #: src/elektroid.c:987 | |
124 | #: src/elektroid.c:1023 | |
124 | 125 | #, c-format |
125 | 126 | msgid "Error while renaming to “%s”: %s." |
126 | 127 | msgstr "Error al renombrar a «%s»: %s." |
127 | 128 | |
128 | #: src/elektroid.c:1550 res/gui.glade:121 res/gui.glade:183 res/gui.glade:184 | |
129 | #: src/elektroid.c:1589 res/gui.glade:436 res/gui.glade:606 | |
129 | 130 | msgid "Add Directory" |
130 | 131 | msgstr "Añadir directorio" |
131 | 132 | |
132 | #: src/elektroid.c:1568 | |
133 | #: src/elektroid.c:1607 | |
133 | 134 | #, c-format |
134 | 135 | msgid "Error while creating dir “%s”: %s." |
135 | 136 | msgstr "Error al crear el directorio «%s»: %s." |
136 | 137 | |
137 | #: src/elektroid.c:1640 | |
138 | #: src/elektroid.c:1679 | |
138 | 139 | msgid "Queued" |
139 | 140 | msgstr "Encolada" |
140 | 141 | |
141 | #: src/elektroid.c:1642 | |
142 | #: src/elektroid.c:1681 | |
142 | 143 | msgid "Running" |
143 | 144 | msgstr "Ejecutando" |
144 | 145 | |
145 | #: src/elektroid.c:1644 | |
146 | #: src/elektroid.c:1683 | |
146 | 147 | msgid "Completed" |
147 | 148 | msgstr "Completada" |
148 | 149 | |
149 | #: src/elektroid.c:1646 | |
150 | #: src/elektroid.c:1685 | |
150 | 151 | msgid "Completed with errors" |
151 | 152 | msgstr "Completada con errores" |
152 | 153 | |
153 | #: src/elektroid.c:1648 | |
154 | #: src/elektroid.c:1687 | |
154 | 155 | msgid "Canceled" |
155 | 156 | msgstr "Cancelada" |
156 | 157 | |
157 | #: src/elektroid.c:1660 | |
158 | #: src/elektroid.c:1699 | |
158 | 159 | msgid "Upload" |
159 | 160 | msgstr "Carga" |
160 | 161 | |
161 | #: src/elektroid.c:1662 | |
162 | #: src/elektroid.c:1701 | |
162 | 163 | msgid "Download" |
163 | 164 | msgstr "Descarga" |
164 | 165 | |
165 | #: src/elektroid.c:2518 src/elektroid.c:2559 | |
166 | #: src/elektroid.c:2560 src/elektroid.c:2601 | |
166 | 167 | #, c-format |
167 | 168 | msgid "Error while moving from “%s” to “%s”: %s." |
168 | 169 | msgstr "Error al mover de «%s» a «%s»: %s." |
183 | 184 | msgid "Show in File Manager" |
184 | 185 | msgstr "Mostrar en gestor de archivos" |
185 | 186 | |
186 | #: res/gui.glade:139 res/gui.glade:202 | |
187 | #: res/gui.glade:130 res/gui.glade:183 | |
187 | 188 | msgid "Delete" |
188 | 189 | msgstr "Eliminar" |
189 | 190 | |
190 | #: res/gui.glade:168 | |
191 | #: res/gui.glade:159 | |
191 | 192 | msgid "Download Selection" |
192 | 193 | msgstr "Descargar selección" |
193 | 194 | |
194 | #: res/gui.glade:238 | |
195 | #: res/gui.glade:219 | |
195 | 196 | msgid "GNU/Linux transfer application for Elektron devices" |
196 | 197 | msgstr "Aplicación GNU/Linux de transferencia para dispositivos Elektron" |
197 | 198 | |
198 | #: res/gui.glade:241 | |
199 | #: res/gui.glade:222 | |
199 | 200 | msgid "translator-credits" |
200 | 201 | msgstr "David García Goñi <dagargo@gmail.com>" |
201 | 202 | |
202 | #: res/gui.glade:289 | |
203 | #: res/gui.glade:270 | |
203 | 204 | msgid "_Receive SysEx" |
204 | 205 | msgstr "_Recibir SysEx" |
205 | 206 | |
206 | #: res/gui.glade:302 | |
207 | #: res/gui.glade:283 | |
207 | 208 | msgid "_Send SysEx" |
208 | 209 | msgstr "_Enviar SysEx" |
209 | 210 | |
210 | #: res/gui.glade:326 | |
211 | #: res/gui.glade:307 | |
211 | 212 | msgid "OS _Upgrade" |
212 | 213 | msgstr "Actualizar _SO" |
213 | 214 | |
214 | #: res/gui.glade:350 | |
215 | #: res/gui.glade:331 | |
215 | 216 | msgid "_About" |
216 | 217 | msgstr "_Acerca de" |
217 | 218 | |
218 | #: res/gui.glade:434 res/gui.glade:583 | |
219 | #: res/gui.glade:415 res/gui.glade:585 | |
219 | 220 | msgid "Go to Parent Directory" |
220 | 221 | msgstr "Ir al directorio padre" |
221 | 222 | |
222 | #: res/gui.glade:455 res/gui.glade:604 | |
223 | #: res/gui.glade:457 res/gui.glade:627 | |
223 | 224 | msgid "Refresh Directory" |
224 | 225 | msgstr "Actualizar directorio" |
225 | 226 | |
226 | #: res/gui.glade:512 res/gui.glade:671 res/gui.glade:1362 | |
227 | #: res/gui.glade:514 res/gui.glade:694 res/gui.glade:1377 | |
227 | 228 | msgid "Name" |
228 | 229 | msgstr "Nombre" |
229 | 230 | |
230 | #: res/gui.glade:526 res/gui.glade:685 | |
231 | #: res/gui.glade:528 res/gui.glade:708 | |
231 | 232 | msgid "Size" |
232 | 233 | msgstr "Tamaño" |
233 | 234 | |
234 | #: res/gui.glade:738 | |
235 | #: res/gui.glade:761 | |
235 | 236 | msgid "Refresh Devices" |
236 | 237 | msgstr "Actualizar dispositivos" |
237 | 238 | |
238 | 239 | #. It is recommended to split the text in two lines if it is too long |
239 | #: res/gui.glade:856 | |
240 | #: res/gui.glade:879 | |
240 | 241 | msgid "Auto play" |
241 | 242 | msgstr "" |
242 | 243 | "Reproducción\n" |
243 | 244 | "automática" |
244 | 245 | |
245 | #: res/gui.glade:1088 | |
246 | #: res/gui.glade:1101 | |
246 | 247 | msgid "Status" |
247 | 248 | msgstr "Estado" |
248 | 249 | |
249 | #: res/gui.glade:1099 | |
250 | #: res/gui.glade:1112 | |
250 | 251 | msgid "Type" |
251 | 252 | msgstr "Tipo" |
252 | 253 | |
253 | #: res/gui.glade:1120 | |
254 | #: res/gui.glade:1133 | |
254 | 255 | msgid "Source" |
255 | 256 | msgstr "Origen" |
256 | 257 | |
257 | #: res/gui.glade:1134 | |
258 | #: res/gui.glade:1147 | |
258 | 259 | msgid "Destination" |
259 | 260 | msgstr "Destino" |
260 | 261 | |
261 | #: res/gui.glade:1149 | |
262 | #: res/gui.glade:1162 | |
262 | 263 | msgid "Progress" |
263 | 264 | msgstr "Progreso" |
264 | 265 | |
265 | #: res/gui.glade:1181 | |
266 | #: res/gui.glade:1194 | |
266 | 267 | msgid "Cancel Tasks" |
267 | 268 | msgstr "Cancelar tareas" |
268 | 269 | |
269 | #: res/gui.glade:1202 | |
270 | #: res/gui.glade:1215 | |
270 | 271 | msgid "Remove Queued Tasks" |
271 | 272 | msgstr "Eliminar tareas encoladas" |
272 | 273 | |
273 | #: res/gui.glade:1223 | |
274 | #: res/gui.glade:1236 | |
274 | 275 | msgid "Clear Finished Tasks" |
275 | 276 | msgstr "Limpiar tareas terminadas" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: elektroid 2.0\n" |
8 | 8 | "Report-Msgid-Bugs-To: dagargo@gmail.com\n" |
9 | "POT-Creation-Date: 2021-12-01 18:58+0100\n" | |
9 | "POT-Creation-Date: 2022-06-03 08:47+0200\n" | |
10 | 10 | "PO-Revision-Date: 2021-12-03 17:59+0100\n" |
11 | 11 | "Last-Translator: Olivier Humbert <trebmuh@tuxfamily.org>\n" |
12 | 12 | "Language-Team: French\n" |
16 | 16 | "Content-Transfer-Encoding: 8bit\n" |
17 | 17 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
18 | 18 | |
19 | #: src/elektroid.c:249 | |
19 | #: src/elektroid.c:246 | |
20 | 20 | msgid "Samples" |
21 | 21 | msgstr "Échantillons" |
22 | 22 | |
23 | #: src/elektroid.c:251 | |
23 | #: src/elektroid.c:248 | |
24 | 24 | msgid "Presets" |
25 | 25 | msgstr "Préréglages" |
26 | 26 | |
27 | #: src/elektroid.c:253 | |
27 | #: src/elektroid.c:250 | |
28 | 28 | msgid "Projects" |
29 | 29 | msgstr "Projets" |
30 | 30 | |
31 | #: src/elektroid.c:255 | |
31 | #: src/elektroid.c:252 | |
32 | 32 | msgid "Sounds" |
33 | 33 | msgstr "Sons" |
34 | 34 | |
35 | #: src/elektroid.c:257 src/elektroid.c:1650 src/elektroid.c:1664 | |
35 | #: src/elektroid.c:254 src/elektroid.c:1689 src/elektroid.c:1703 | |
36 | 36 | msgid "Undefined" |
37 | 37 | msgstr "Indéfini" |
38 | 38 | |
39 | #: src/elektroid.c:398 | |
39 | #: src/elektroid.c:434 | |
40 | 40 | #, c-format |
41 | 41 | msgid "Connected to %s%s" |
42 | 42 | msgstr "Connecté à %s%s" |
43 | 43 | |
44 | #: src/elektroid.c:406 src/elektroid.c:3215 | |
44 | #: src/elektroid.c:442 src/elektroid.c:3256 | |
45 | 45 | msgid "Not connected" |
46 | 46 | msgstr "Non connecté" |
47 | 47 | |
48 | #: src/elektroid.c:549 | |
48 | #: src/elektroid.c:585 | |
49 | 49 | msgid "Waiting..." |
50 | 50 | msgstr "En attente..." |
51 | 51 | |
52 | #: src/elektroid.c:552 | |
52 | #: src/elektroid.c:588 | |
53 | 53 | msgid "Sending..." |
54 | 54 | msgstr "Envoi en cours..." |
55 | 55 | |
56 | #: src/elektroid.c:556 | |
56 | #: src/elektroid.c:592 | |
57 | 57 | msgid "Receiving..." |
58 | 58 | msgstr "Réception en cours..." |
59 | 59 | |
60 | #: src/elektroid.c:624 | |
60 | #: src/elektroid.c:660 | |
61 | 61 | msgid "Receive SysEx" |
62 | 62 | msgstr "Réception de SysEx" |
63 | 63 | |
64 | #: src/elektroid.c:648 | |
64 | #: src/elektroid.c:684 | |
65 | 65 | msgid "Save SysEx" |
66 | 66 | msgstr "Sauvegarde de SysEx" |
67 | 67 | |
68 | #: src/elektroid.c:651 src/elektroid.c:747 src/elektroid.c:915 | |
68 | #: src/elektroid.c:687 src/elektroid.c:783 src/elektroid.c:951 | |
69 | #: res/gui.glade:1332 res/gui.glade:1432 | |
69 | 70 | msgid "_Cancel" |
70 | 71 | msgstr "_Annuler" |
71 | 72 | |
72 | #: src/elektroid.c:653 | |
73 | #: src/elektroid.c:689 res/gui.glade:1346 | |
73 | 74 | msgid "_Save" |
74 | 75 | msgstr "_Sauvegarder" |
75 | 76 | |
76 | #: src/elektroid.c:657 | |
77 | #: src/elektroid.c:693 | |
77 | 78 | msgid "Received SysEx" |
78 | 79 | msgstr "SysEx reçu" |
79 | 80 | |
80 | #: src/elektroid.c:662 src/elektroid.c:753 | |
81 | #: src/elektroid.c:698 src/elektroid.c:789 | |
81 | 82 | msgid "SysEx Files" |
82 | 83 | msgstr "Fichiers SysEx" |
83 | 84 | |
84 | #: src/elektroid.c:696 | |
85 | #: src/elektroid.c:732 | |
85 | 86 | #, c-format |
86 | 87 | msgid "Error while saving “%s”: %s." |
87 | 88 | msgstr "Erreur lors de la sauvegarde de « %s » : %s." |
88 | 89 | |
89 | #: src/elektroid.c:744 | |
90 | #: src/elektroid.c:780 | |
90 | 91 | msgid "Open SysEx" |
91 | 92 | msgstr "Ouvrir SysEx" |
92 | 93 | |
93 | #: src/elektroid.c:749 | |
94 | #: src/elektroid.c:785 | |
94 | 95 | msgid "_Open" |
95 | 96 | msgstr "_Ouvrir" |
96 | 97 | |
97 | #: src/elektroid.c:770 | |
98 | #: src/elektroid.c:806 | |
98 | 99 | #, c-format |
99 | 100 | msgid "Error while loading “%s”: %s." |
100 | 101 | msgstr "Erreur lors du chargement de « %s » : %s." |
101 | 102 | |
102 | #: src/elektroid.c:780 | |
103 | #: src/elektroid.c:816 | |
103 | 104 | msgid "Send SysEx" |
104 | 105 | msgstr "Envoyer SysEx" |
105 | 106 | |
106 | #: src/elektroid.c:882 | |
107 | #: src/elektroid.c:918 | |
107 | 108 | #, c-format |
108 | 109 | msgid "Error while deleting “%s”: %s." |
109 | 110 | msgstr "Erreur lors de la suppression de « %s » : %s." |
110 | 111 | |
111 | #: src/elektroid.c:914 | |
112 | #: src/elektroid.c:950 | |
112 | 113 | msgid "Are you sure you want to delete the selected items?" |
113 | 114 | msgstr "Souhaitez-vous vraiment supprimer les éléments sélectionnés ?" |
114 | 115 | |
115 | #: src/elektroid.c:916 | |
116 | #: src/elektroid.c:952 | |
116 | 117 | msgid "_Delete" |
117 | 118 | msgstr "_Supprimer" |
118 | 119 | |
119 | #: src/elektroid.c:969 res/gui.glade:130 res/gui.glade:193 | |
120 | #: src/elektroid.c:1005 res/gui.glade:121 res/gui.glade:174 | |
120 | 121 | msgid "Rename" |
121 | 122 | msgstr "Renommer" |
122 | 123 | |
123 | #: src/elektroid.c:987 | |
124 | #: src/elektroid.c:1023 | |
124 | 125 | #, c-format |
125 | 126 | msgid "Error while renaming to “%s”: %s." |
126 | 127 | msgstr "Erreur lors du renommage de « %s » : %s." |
127 | 128 | |
128 | #: src/elektroid.c:1550 res/gui.glade:121 res/gui.glade:183 res/gui.glade:184 | |
129 | #: src/elektroid.c:1589 res/gui.glade:436 res/gui.glade:606 | |
129 | 130 | msgid "Add Directory" |
130 | 131 | msgstr "Ajout d'un répertoire" |
131 | 132 | |
132 | #: src/elektroid.c:1568 | |
133 | #: src/elektroid.c:1607 | |
133 | 134 | #, c-format |
134 | 135 | msgid "Error while creating dir “%s”: %s." |
135 | 136 | msgstr "Erreur lors de la création du répertoire « %s » : %s." |
136 | 137 | |
137 | #: src/elektroid.c:1640 | |
138 | #: src/elektroid.c:1679 | |
138 | 139 | msgid "Queued" |
139 | 140 | msgstr "Mise en file d'attente" |
140 | 141 | |
141 | #: src/elektroid.c:1642 | |
142 | #: src/elektroid.c:1681 | |
142 | 143 | msgid "Running" |
143 | 144 | msgstr "En cours" |
144 | 145 | |
145 | #: src/elektroid.c:1644 | |
146 | #: src/elektroid.c:1683 | |
146 | 147 | msgid "Completed" |
147 | 148 | msgstr "Terminé" |
148 | 149 | |
149 | #: src/elektroid.c:1646 | |
150 | #: src/elektroid.c:1685 | |
150 | 151 | msgid "Completed with errors" |
151 | 152 | msgstr "Terminé avec des erreurs" |
152 | 153 | |
153 | #: src/elektroid.c:1648 | |
154 | #: src/elektroid.c:1687 | |
154 | 155 | msgid "Canceled" |
155 | 156 | msgstr "Annulé" |
156 | 157 | |
157 | #: src/elektroid.c:1660 | |
158 | #: src/elektroid.c:1699 | |
158 | 159 | msgid "Upload" |
159 | 160 | msgstr "Téléversement" |
160 | 161 | |
161 | #: src/elektroid.c:1662 | |
162 | #: src/elektroid.c:1701 | |
162 | 163 | msgid "Download" |
163 | 164 | msgstr "Téléchargement" |
164 | 165 | |
165 | #: src/elektroid.c:2518 src/elektroid.c:2559 | |
166 | #: src/elektroid.c:2560 src/elektroid.c:2601 | |
166 | 167 | #, c-format |
167 | 168 | msgid "Error while moving from “%s” to “%s”: %s." |
168 | 169 | msgstr "Erreur lors du passage de « %s » à « %s » : %s." |
183 | 184 | msgid "Show in File Manager" |
184 | 185 | msgstr "Afficher dans un ge_stionnaire de fichier" |
185 | 186 | |
186 | #: res/gui.glade:139 res/gui.glade:202 | |
187 | #: res/gui.glade:130 res/gui.glade:183 | |
187 | 188 | msgid "Delete" |
188 | 189 | msgstr "Supprimer" |
189 | 190 | |
190 | #: res/gui.glade:168 | |
191 | #: res/gui.glade:159 | |
191 | 192 | msgid "Download Selection" |
192 | 193 | msgstr "Téléchargement de la sélection" |
193 | 194 | |
194 | #: res/gui.glade:238 | |
195 | #: res/gui.glade:219 | |
195 | 196 | msgid "GNU/Linux transfer application for Elektron devices" |
196 | 197 | msgstr "Application GNU/Linux de transfert pour les périphériques Elektron" |
197 | 198 | |
198 | #: res/gui.glade:241 | |
199 | #: res/gui.glade:222 | |
199 | 200 | msgid "translator-credits" |
200 | 201 | msgstr "Olivier Humbert <trebmuh@tuxfamily.org>" |
201 | 202 | |
202 | #: res/gui.glade:289 | |
203 | #: res/gui.glade:270 | |
203 | 204 | msgid "_Receive SysEx" |
204 | 205 | msgstr "_Réception de SysEx" |
205 | 206 | |
206 | #: res/gui.glade:302 | |
207 | #: res/gui.glade:283 | |
207 | 208 | msgid "_Send SysEx" |
208 | 209 | msgstr "Envoi de _Sysex" |
209 | 210 | |
210 | #: res/gui.glade:326 | |
211 | #: res/gui.glade:307 | |
211 | 212 | msgid "OS _Upgrade" |
212 | 213 | msgstr "Mise à jo_ur SE" |
213 | 214 | |
214 | #: res/gui.glade:350 | |
215 | #: res/gui.glade:331 | |
215 | 216 | msgid "_About" |
216 | 217 | msgstr "À _propos" |
217 | 218 | |
218 | #: res/gui.glade:434 res/gui.glade:583 | |
219 | #: res/gui.glade:415 res/gui.glade:585 | |
219 | 220 | msgid "Go to Parent Directory" |
220 | 221 | msgstr "Aller au répertoire parent" |
221 | 222 | |
222 | #: res/gui.glade:455 res/gui.glade:604 | |
223 | #: res/gui.glade:457 res/gui.glade:627 | |
223 | 224 | msgid "Refresh Directory" |
224 | 225 | msgstr "Rafraîchir le répertoire" |
225 | 226 | |
226 | #: res/gui.glade:512 res/gui.glade:671 res/gui.glade:1362 | |
227 | #: res/gui.glade:514 res/gui.glade:694 res/gui.glade:1377 | |
227 | 228 | msgid "Name" |
228 | 229 | msgstr "Nom" |
229 | 230 | |
230 | #: res/gui.glade:526 res/gui.glade:685 | |
231 | #: res/gui.glade:528 res/gui.glade:708 | |
231 | 232 | msgid "Size" |
232 | 233 | msgstr "Taille" |
233 | 234 | |
234 | #: res/gui.glade:738 | |
235 | #: res/gui.glade:761 | |
235 | 236 | msgid "Refresh Devices" |
236 | 237 | msgstr "Rafraîchir les périphériques" |
237 | 238 | |
238 | 239 | #. It is recommended to split the text in two lines if it is too long |
239 | #: res/gui.glade:856 | |
240 | #: res/gui.glade:879 | |
240 | 241 | msgid "Auto play" |
241 | 242 | msgstr "" |
242 | 243 | "Lecture\n" |
243 | 244 | "automatique" |
244 | 245 | |
245 | #: res/gui.glade:1088 | |
246 | #: res/gui.glade:1101 | |
246 | 247 | msgid "Status" |
247 | 248 | msgstr "Statut" |
248 | 249 | |
249 | #: res/gui.glade:1099 | |
250 | #: res/gui.glade:1112 | |
250 | 251 | msgid "Type" |
251 | 252 | msgstr "Type" |
252 | 253 | |
253 | #: res/gui.glade:1120 | |
254 | #: res/gui.glade:1133 | |
254 | 255 | msgid "Source" |
255 | 256 | msgstr "Source" |
256 | 257 | |
257 | #: res/gui.glade:1134 | |
258 | #: res/gui.glade:1147 | |
258 | 259 | msgid "Destination" |
259 | 260 | msgstr "Destination" |
260 | 261 | |
261 | #: res/gui.glade:1149 | |
262 | #: res/gui.glade:1162 | |
262 | 263 | msgid "Progress" |
263 | 264 | msgstr "Progrès" |
264 | 265 | |
265 | #: res/gui.glade:1181 | |
266 | #: res/gui.glade:1194 | |
266 | 267 | msgid "Cancel Tasks" |
267 | 268 | msgstr "Annuler les tâches" |
268 | 269 | |
269 | #: res/gui.glade:1202 | |
270 | #: res/gui.glade:1215 | |
270 | 271 | msgid "Remove Queued Tasks" |
271 | 272 | msgstr "Supprimer les tâches dans la file d'attente" |
272 | 273 | |
273 | #: res/gui.glade:1223 | |
274 | #: res/gui.glade:1236 | |
274 | 275 | msgid "Clear Finished Tasks" |
275 | 276 | msgstr "Nettoyer les tâches terminées" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: elektroid 1.4\n" |
8 | 8 | "Report-Msgid-Bugs-To: dagargo@gmail.com\n" |
9 | "POT-Creation-Date: 2021-12-01 18:58+0100\n" | |
9 | "POT-Creation-Date: 2022-06-03 08:47+0200\n" | |
10 | 10 | "PO-Revision-Date: 2021-12-01 17:56-0300\n" |
11 | 11 | "Last-Translator: Gustavo Costa <xfgusta@gmail.com>\n" |
12 | 12 | "Language-Team: \n" |
17 | 17 | "X-Generator: Poedit 3.0\n" |
18 | 18 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
19 | 19 | |
20 | #: src/elektroid.c:249 | |
20 | #: src/elektroid.c:246 | |
21 | 21 | msgid "Samples" |
22 | 22 | msgstr "Samples" |
23 | 23 | |
24 | #: src/elektroid.c:251 | |
24 | #: src/elektroid.c:248 | |
25 | 25 | msgid "Presets" |
26 | 26 | msgstr "Presets" |
27 | 27 | |
28 | #: src/elektroid.c:253 | |
28 | #: src/elektroid.c:250 | |
29 | 29 | msgid "Projects" |
30 | 30 | msgstr "Projects" |
31 | 31 | |
32 | #: src/elektroid.c:255 | |
32 | #: src/elektroid.c:252 | |
33 | 33 | msgid "Sounds" |
34 | 34 | msgstr "Sounds" |
35 | 35 | |
36 | #: src/elektroid.c:257 src/elektroid.c:1650 src/elektroid.c:1664 | |
36 | #: src/elektroid.c:254 src/elektroid.c:1689 src/elektroid.c:1703 | |
37 | 37 | msgid "Undefined" |
38 | 38 | msgstr "Indefinido" |
39 | 39 | |
40 | #: src/elektroid.c:398 | |
40 | #: src/elektroid.c:434 | |
41 | 41 | #, c-format |
42 | 42 | msgid "Connected to %s%s" |
43 | 43 | msgstr "Conectado a %s%s" |
44 | 44 | |
45 | #: src/elektroid.c:406 src/elektroid.c:3215 | |
45 | #: src/elektroid.c:442 src/elektroid.c:3256 | |
46 | 46 | msgid "Not connected" |
47 | 47 | msgstr "Não conectado" |
48 | 48 | |
49 | #: src/elektroid.c:549 | |
49 | #: src/elektroid.c:585 | |
50 | 50 | msgid "Waiting..." |
51 | 51 | msgstr "Esperando..." |
52 | 52 | |
53 | #: src/elektroid.c:552 | |
53 | #: src/elektroid.c:588 | |
54 | 54 | msgid "Sending..." |
55 | 55 | msgstr "Enviando..." |
56 | 56 | |
57 | #: src/elektroid.c:556 | |
57 | #: src/elektroid.c:592 | |
58 | 58 | msgid "Receiving..." |
59 | 59 | msgstr "Recebendo..." |
60 | 60 | |
61 | #: src/elektroid.c:624 | |
61 | #: src/elektroid.c:660 | |
62 | 62 | msgid "Receive SysEx" |
63 | 63 | msgstr "Receber SysEx" |
64 | 64 | |
65 | #: src/elektroid.c:648 | |
65 | #: src/elektroid.c:684 | |
66 | 66 | msgid "Save SysEx" |
67 | 67 | msgstr "Salvar SysEx" |
68 | 68 | |
69 | #: src/elektroid.c:651 src/elektroid.c:747 src/elektroid.c:915 | |
69 | #: src/elektroid.c:687 src/elektroid.c:783 src/elektroid.c:951 | |
70 | #: res/gui.glade:1332 res/gui.glade:1432 | |
70 | 71 | msgid "_Cancel" |
71 | 72 | msgstr "_Cancelar" |
72 | 73 | |
73 | #: src/elektroid.c:653 | |
74 | #: src/elektroid.c:689 res/gui.glade:1346 | |
74 | 75 | msgid "_Save" |
75 | 76 | msgstr "_Salvar" |
76 | 77 | |
77 | #: src/elektroid.c:657 | |
78 | #: src/elektroid.c:693 | |
78 | 79 | msgid "Received SysEx" |
79 | 80 | msgstr "SysEx recebido" |
80 | 81 | |
81 | #: src/elektroid.c:662 src/elektroid.c:753 | |
82 | #: src/elektroid.c:698 src/elektroid.c:789 | |
82 | 83 | msgid "SysEx Files" |
83 | 84 | msgstr "Arquivos SysEx" |
84 | 85 | |
85 | #: src/elektroid.c:696 | |
86 | #: src/elektroid.c:732 | |
86 | 87 | #, c-format |
87 | 88 | msgid "Error while saving “%s”: %s." |
88 | 89 | msgstr "Erro ao excluir \"%s\": %s." |
89 | 90 | |
90 | #: src/elektroid.c:744 | |
91 | #: src/elektroid.c:780 | |
91 | 92 | msgid "Open SysEx" |
92 | 93 | msgstr "Abrir SysEx" |
93 | 94 | |
94 | #: src/elektroid.c:749 | |
95 | #: src/elektroid.c:785 | |
95 | 96 | msgid "_Open" |
96 | 97 | msgstr "_Abrir" |
97 | 98 | |
98 | #: src/elektroid.c:770 | |
99 | #: src/elektroid.c:806 | |
99 | 100 | #, c-format |
100 | 101 | msgid "Error while loading “%s”: %s." |
101 | 102 | msgstr "Erro ao excluir \"%s\": %s." |
102 | 103 | |
103 | #: src/elektroid.c:780 | |
104 | #: src/elektroid.c:816 | |
104 | 105 | msgid "Send SysEx" |
105 | 106 | msgstr "Enviar SysEx" |
106 | 107 | |
107 | #: src/elektroid.c:882 | |
108 | #: src/elektroid.c:918 | |
108 | 109 | #, c-format |
109 | 110 | msgid "Error while deleting “%s”: %s." |
110 | 111 | msgstr "Erro ao excluir \"%s\": %s." |
111 | 112 | |
112 | #: src/elektroid.c:914 | |
113 | #: src/elektroid.c:950 | |
113 | 114 | msgid "Are you sure you want to delete the selected items?" |
114 | 115 | msgstr "Tem certeza de que deseja excluir os itens selecionados?" |
115 | 116 | |
116 | #: src/elektroid.c:916 | |
117 | #: src/elektroid.c:952 | |
117 | 118 | msgid "_Delete" |
118 | 119 | msgstr "_Excluir" |
119 | 120 | |
120 | #: src/elektroid.c:969 res/gui.glade:130 res/gui.glade:193 | |
121 | #: src/elektroid.c:1005 res/gui.glade:121 res/gui.glade:174 | |
121 | 122 | msgid "Rename" |
122 | 123 | msgstr "Renomar" |
123 | 124 | |
124 | #: src/elektroid.c:987 | |
125 | #: src/elektroid.c:1023 | |
125 | 126 | #, c-format |
126 | 127 | msgid "Error while renaming to “%s”: %s." |
127 | 128 | msgstr "Erro ao renomear para \"%s\": %s." |
128 | 129 | |
129 | #: src/elektroid.c:1550 res/gui.glade:121 res/gui.glade:183 res/gui.glade:184 | |
130 | #: src/elektroid.c:1589 res/gui.glade:436 res/gui.glade:606 | |
130 | 131 | msgid "Add Directory" |
131 | 132 | msgstr "Adicionar diretório" |
132 | 133 | |
133 | #: src/elektroid.c:1568 | |
134 | #: src/elektroid.c:1607 | |
134 | 135 | #, c-format |
135 | 136 | msgid "Error while creating dir “%s”: %s." |
136 | 137 | msgstr "Erro ao criar diretório \"%s\": %s." |
137 | 138 | |
138 | #: src/elektroid.c:1640 | |
139 | #: src/elektroid.c:1679 | |
139 | 140 | msgid "Queued" |
140 | 141 | msgstr "Na fila" |
141 | 142 | |
142 | #: src/elektroid.c:1642 | |
143 | #: src/elektroid.c:1681 | |
143 | 144 | msgid "Running" |
144 | 145 | msgstr "Executando" |
145 | 146 | |
146 | #: src/elektroid.c:1644 | |
147 | #: src/elektroid.c:1683 | |
147 | 148 | msgid "Completed" |
148 | 149 | msgstr "Completado" |
149 | 150 | |
150 | #: src/elektroid.c:1646 | |
151 | #: src/elektroid.c:1685 | |
151 | 152 | msgid "Completed with errors" |
152 | 153 | msgstr "Completado com erros" |
153 | 154 | |
154 | #: src/elektroid.c:1648 | |
155 | #: src/elektroid.c:1687 | |
155 | 156 | msgid "Canceled" |
156 | 157 | msgstr "Cancelado" |
157 | 158 | |
158 | #: src/elektroid.c:1660 | |
159 | #: src/elektroid.c:1699 | |
159 | 160 | msgid "Upload" |
160 | 161 | msgstr "Upload" |
161 | 162 | |
162 | #: src/elektroid.c:1662 | |
163 | #: src/elektroid.c:1701 | |
163 | 164 | msgid "Download" |
164 | 165 | msgstr "Download" |
165 | 166 | |
166 | #: src/elektroid.c:2518 src/elektroid.c:2559 | |
167 | #: src/elektroid.c:2560 src/elektroid.c:2601 | |
167 | 168 | #, c-format |
168 | 169 | msgid "Error while moving from “%s” to “%s”: %s." |
169 | 170 | msgstr "Erro ao mover \"%s\" para \"%s\": %s." |
184 | 185 | msgid "Show in File Manager" |
185 | 186 | msgstr "Mostrar no gerenciador de arquivos" |
186 | 187 | |
187 | #: res/gui.glade:139 res/gui.glade:202 | |
188 | #: res/gui.glade:130 res/gui.glade:183 | |
188 | 189 | msgid "Delete" |
189 | 190 | msgstr "Excluir" |
190 | 191 | |
191 | #: res/gui.glade:168 | |
192 | #: res/gui.glade:159 | |
192 | 193 | msgid "Download Selection" |
193 | 194 | msgstr "Seleção de download" |
194 | 195 | |
195 | #: res/gui.glade:238 | |
196 | #: res/gui.glade:219 | |
196 | 197 | msgid "GNU/Linux transfer application for Elektron devices" |
197 | 198 | msgstr "Aplicativo GNU/Linux de transferência para dispositivos Elektron" |
198 | 199 | |
199 | #: res/gui.glade:241 | |
200 | #: res/gui.glade:222 | |
200 | 201 | msgid "translator-credits" |
201 | 202 | msgstr "Gustavo Costa <xfgusta@gmail.com>" |
202 | 203 | |
203 | #: res/gui.glade:289 | |
204 | #: res/gui.glade:270 | |
204 | 205 | msgid "_Receive SysEx" |
205 | 206 | msgstr "_Receber SysEx" |
206 | 207 | |
207 | #: res/gui.glade:302 | |
208 | #: res/gui.glade:283 | |
208 | 209 | msgid "_Send SysEx" |
209 | 210 | msgstr "_Enviar SysEx" |
210 | 211 | |
211 | #: res/gui.glade:326 | |
212 | #: res/gui.glade:307 | |
212 | 213 | msgid "OS _Upgrade" |
213 | 214 | msgstr "Atualizar _OS" |
214 | 215 | |
215 | #: res/gui.glade:350 | |
216 | #: res/gui.glade:331 | |
216 | 217 | msgid "_About" |
217 | 218 | msgstr "_Sobre" |
218 | 219 | |
219 | #: res/gui.glade:434 res/gui.glade:583 | |
220 | #: res/gui.glade:415 res/gui.glade:585 | |
220 | 221 | msgid "Go to Parent Directory" |
221 | 222 | msgstr "Ir para o diretório pai" |
222 | 223 | |
223 | #: res/gui.glade:455 res/gui.glade:604 | |
224 | #: res/gui.glade:457 res/gui.glade:627 | |
224 | 225 | msgid "Refresh Directory" |
225 | 226 | msgstr "Atualizar diretório" |
226 | 227 | |
227 | #: res/gui.glade:512 res/gui.glade:671 res/gui.glade:1362 | |
228 | #: res/gui.glade:514 res/gui.glade:694 res/gui.glade:1377 | |
228 | 229 | msgid "Name" |
229 | 230 | msgstr "Nome" |
230 | 231 | |
231 | #: res/gui.glade:526 res/gui.glade:685 | |
232 | #: res/gui.glade:528 res/gui.glade:708 | |
232 | 233 | msgid "Size" |
233 | 234 | msgstr "Tamanho" |
234 | 235 | |
235 | #: res/gui.glade:738 | |
236 | #: res/gui.glade:761 | |
236 | 237 | msgid "Refresh Devices" |
237 | 238 | msgstr "Atualizar dispositivos" |
238 | 239 | |
239 | 240 | #. It is recommended to split the text in two lines if it is too long |
240 | #: res/gui.glade:856 | |
241 | #: res/gui.glade:879 | |
241 | 242 | msgid "Auto play" |
242 | 243 | msgstr "Reprodução automática" |
243 | 244 | |
244 | #: res/gui.glade:1088 | |
245 | #: res/gui.glade:1101 | |
245 | 246 | msgid "Status" |
246 | 247 | msgstr "Status" |
247 | 248 | |
248 | #: res/gui.glade:1099 | |
249 | #: res/gui.glade:1112 | |
249 | 250 | msgid "Type" |
250 | 251 | msgstr "Tipo" |
251 | 252 | |
252 | #: res/gui.glade:1120 | |
253 | #: res/gui.glade:1133 | |
253 | 254 | msgid "Source" |
254 | 255 | msgstr "Origem" |
255 | 256 | |
256 | #: res/gui.glade:1134 | |
257 | #: res/gui.glade:1147 | |
257 | 258 | msgid "Destination" |
258 | 259 | msgstr "Destino" |
259 | 260 | |
260 | #: res/gui.glade:1149 | |
261 | #: res/gui.glade:1162 | |
261 | 262 | msgid "Progress" |
262 | 263 | msgstr "Progresso" |
263 | 264 | |
264 | #: res/gui.glade:1181 | |
265 | #: res/gui.glade:1194 | |
265 | 266 | msgid "Cancel Tasks" |
266 | 267 | msgstr "Cancelar tarefas" |
267 | 268 | |
268 | #: res/gui.glade:1202 | |
269 | #: res/gui.glade:1215 | |
269 | 270 | msgid "Remove Queued Tasks" |
270 | 271 | msgstr "Remover tarefas em fila" |
271 | 272 | |
272 | #: res/gui.glade:1223 | |
273 | #: res/gui.glade:1236 | |
273 | 274 | msgid "Clear Finished Tasks" |
274 | 275 | msgstr "Limpar tarefas concluídas" |
0 | resdir = $(datadir)/elektroid/res | |
1 | res_DATA = gui.glade gui.css | |
0 | if CLI_ONLY | |
1 | res_DATA = devices.json | |
2 | desktop_DATA = | |
3 | metainfo_DATA = | |
4 | svgicon_DATA = | |
5 | else | |
6 | res_DATA = gui.glade gui.css devices.json | |
7 | desktop_DATA = elektroid.desktop | |
8 | metainfo_DATA = elektroid.appdata.xml | |
9 | svgicon_DATA = elektroid.svg elektroid-symbolic.svg elektroid-wave-symbolic.svg elektroid-data-symbolic.svg elektroid-project-symbolic.svg elektroid-sound-symbolic.svg | |
10 | endif | |
2 | 11 | |
12 | resdir = $(datadir)/elektroid | |
3 | 13 | desktopdir = $(datadir)/applications |
4 | desktop_DATA = elektroid.desktop | |
5 | ||
6 | 14 | metainfodir= $(datadir)/metainfo |
7 | metainfo_DATA = elektroid.appdata.xml | |
8 | ||
9 | 15 | svgicondir = $(datarootdir)/icons/hicolor/scalable/apps |
10 | svgicon_DATA = elektroid.svg elektroid-symbolic.svg elektroid-wave-symbolic.svg elektroid-data-symbolic.svg elektroid-project-symbolic.svg elektroid-sound-symbolic.svg | |
11 | 16 | |
12 | 17 | gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datarootdir)/icons/hicolor |
13 | 18 |
0 | [{ | |
1 | "id": 4, | |
2 | "name": "Analog Four", | |
3 | "alias": "af", | |
4 | "filesystems": 56, | |
5 | "storage": 0 | |
6 | }, { | |
7 | "id": 6, | |
8 | "name": "Analog Keys", | |
9 | "alias": "ak", | |
10 | "filesystems": 56, | |
11 | "storage": 0 | |
12 | }, { | |
13 | "id": 8, | |
14 | "name": "Analog Rytm", | |
15 | "alias": "ar", | |
16 | "filesystems": 57, | |
17 | "storage": 3 | |
18 | }, { | |
19 | "id": 10, | |
20 | "name": "Analog Heat", | |
21 | "alias": "ah", | |
22 | "filesystems": 40, | |
23 | "storage": 0 | |
24 | }, { | |
25 | "id": 12, | |
26 | "name": "Digitakt", | |
27 | "alias": "dt", | |
28 | "filesystems": 57, | |
29 | "storage": 3 | |
30 | }, { | |
31 | "id": 14, | |
32 | "name": "Analog Four MKII", | |
33 | "alias": "af", | |
34 | "filesystems": 56, | |
35 | "storage": 0 | |
36 | }, { | |
37 | "id": 16, | |
38 | "name": "Analog Rytm MKII", | |
39 | "alias": "ar", | |
40 | "filesystems": 57, | |
41 | "storage": 3 | |
42 | }, { | |
43 | "id": 20, | |
44 | "name": "Digitone", | |
45 | "alias": "dn", | |
46 | "filesystems": 56, | |
47 | "storage": 0 | |
48 | }, { | |
49 | "id": 22, | |
50 | "name": "Analog Heat MKII", | |
51 | "alias": "ah", | |
52 | "filesystems": 40, | |
53 | "storage": 0 | |
54 | }, { | |
55 | "id": 28, | |
56 | "name": "Digitone Keys", | |
57 | "alias": "dn", | |
58 | "filesystems": 56, | |
59 | "storage": 0 | |
60 | }, { | |
61 | "id": 25, | |
62 | "name": "Model:Samples", | |
63 | "alias": "ms", | |
64 | "filesystems": 57, | |
65 | "storage": 3 | |
66 | }, { | |
67 | "id": 27, | |
68 | "name": "Model:Cycles", | |
69 | "alias": "mc", | |
70 | "filesystems": 30, | |
71 | "storage": 1 | |
72 | }, { | |
73 | "id": 30, | |
74 | "name": "Syntakt", | |
75 | "alias": "st", | |
76 | "filesystems": 56, | |
77 | "storage": 0 | |
78 | }] |
16 | 16 | sodipodi:docname="elektroid-project-symbolic.svg" |
17 | 17 | inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> |
18 | 18 | <title |
19 | id="title2309">elektroid pattern symbolic</title> | |
19 | id="title2309">elektroid project symbolic</title> | |
20 | 20 | <defs |
21 | 21 | id="defs918" /> |
22 | 22 | <sodipodi:namedview |
50 | 50 | <dc:format>image/svg+xml</dc:format> |
51 | 51 | <dc:type |
52 | 52 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
53 | <dc:title>elektroid pattern symbolic</dc:title> | |
53 | <dc:title>elektroid project symbolic</dc:title> | |
54 | 54 | <cc:license |
55 | 55 | rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" /> |
56 | 56 | <dc:creator> |
0 | 0 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
1 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
2 | ||
3 | 1 | <svg |
4 | 2 | xmlns:dc="http://purl.org/dc/elements/1.1/" |
5 | 3 | xmlns:cc="http://creativecommons.org/ns#" |
14 | 12 | version="1.1" |
15 | 13 | id="svg924" |
16 | 14 | sodipodi:docname="elektroid-wave-symbolic.svg" |
17 | inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> | |
15 | inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> | |
18 | 16 | <title |
19 | 17 | id="title2309">elektroid wave symbolic</title> |
20 | 18 | <defs |
27 | 25 | inkscape:pageopacity="0.0" |
28 | 26 | inkscape:pageshadow="2" |
29 | 27 | inkscape:zoom="32" |
30 | inkscape:cx="-0.63389357" | |
28 | inkscape:cx="5.6161064" | |
31 | 29 | inkscape:cy="7.6958677" |
32 | 30 | inkscape:document-units="px" |
33 | 31 | inkscape:current-layer="layer1" |
34 | 32 | showgrid="true" |
35 | 33 | inkscape:window-width="1680" |
36 | inkscape:window-height="1023" | |
34 | inkscape:window-height="1013" | |
37 | 35 | inkscape:window-x="0" |
38 | 36 | inkscape:window-y="0" |
39 | 37 | inkscape:window-maximized="1" |
40 | inkscape:pagecheckerboard="false"> | |
38 | inkscape:pagecheckerboard="false" | |
39 | inkscape:document-rotation="0"> | |
41 | 40 | <inkscape:grid |
42 | 41 | type="xygrid" |
43 | 42 | id="grid1511" /> |
82 | 81 | id="layer1" |
83 | 82 | transform="translate(0,-292.76667)"> |
84 | 83 | <rect |
85 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.14143676;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
84 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.141437;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
86 | 85 | id="rect1509-6-9-3-6-0-2" |
87 | 86 | width="0.26458341" |
88 | 87 | height="2.1166418" |
91 | 90 | inkscape:transform-center-x="0.81558974" |
92 | 91 | inkscape:transform-center-y="-3.2084846" /> |
93 | 92 | <rect |
94 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.17322472;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
93 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.158132;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
95 | 94 | id="rect1509-6-9-3-6-0-8-9-4" |
96 | 95 | width="0.26458305" |
97 | height="3.1749952" | |
96 | height="2.6458395" | |
98 | 97 | x="2.1166668" |
99 | y="293.29584" | |
98 | y="293.56042" | |
100 | 99 | inkscape:transform-center-x="0.81559079" |
101 | inkscape:transform-center-y="-4.8128001" /> | |
102 | <rect | |
103 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.14143814;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
100 | inkscape:transform-center-y="-4.0106778" /> | |
101 | <rect | |
102 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.100013;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
104 | 103 | id="rect1509-6-9-3-1-3-6-5-3" |
105 | 104 | width="0.52916664" |
106 | height="1.0583419" | |
105 | height="0.52918494" | |
107 | 106 | x="2.9104166" |
108 | y="294.35416" /> | |
109 | <rect | |
110 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.26460543;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
107 | y="294.61874" /> | |
108 | <rect | |
109 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.187104;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
111 | 110 | id="rect1509-6-9-3-1-3-6-5-6" |
112 | width="0.5291667" | |
111 | width="0.26458329" | |
113 | 112 | height="3.7041647" |
114 | 113 | x="0.52916664" |
115 | 114 | y="293.03125" /> |
116 | 115 | <rect |
117 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.10001156;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
116 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.086613;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
118 | 117 | id="rect1509-6-9-3-6-0-8-3" |
119 | 118 | width="0.2645832" |
120 | height="1.0583349" | |
119 | height="0.79375243" | |
121 | 120 | x="3.7041664" |
122 | 121 | y="294.35416" |
123 | 122 | inkscape:transform-center-x="0.81558898" |
124 | inkscape:transform-center-y="-1.6042882" /> | |
125 | <rect | |
126 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071922;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
123 | inkscape:transform-center-y="-1.2032179" /> | |
124 | <rect | |
125 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
127 | 126 | id="rect1509-6-9-6-8-2-2-9" |
128 | width="0.52916664" | |
127 | width="0.26458341" | |
129 | 128 | height="0.26458672" |
130 | 129 | x="0.52916658" |
131 | 130 | y="292.76666" /> |
132 | 131 | <rect |
133 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071922;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
132 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
134 | 133 | id="rect1509-6-9-6-8-2-2-1" |
135 | width="0.52916664" | |
134 | width="0.26458341" | |
136 | 135 | height="0.26458672" |
137 | 136 | x="0.52916658" |
138 | 137 | y="296.73541" /> |
139 | 138 | <rect |
140 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071921;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
139 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0707198;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
141 | 140 | id="rect1509-6-9-6-8-2-2-76" |
142 | width="0.52916652" | |
143 | height="0.26458672" | |
144 | x="2.9104166" | |
141 | width="0.26458329" | |
142 | height="0.52918279" | |
143 | x="3.175" | |
145 | 144 | y="294.08957" /> |
146 | 145 | <rect |
147 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071923;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
146 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0707191;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
148 | 147 | id="rect1509-6-9-6-8-2-2-73" |
149 | width="0.52916676" | |
150 | height="0.26458672" | |
151 | x="2.9104164" | |
152 | y="295.41251" /> | |
153 | <rect | |
154 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0707193;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
148 | width="0.26458353" | |
149 | height="0.5291729" | |
150 | x="3.1749997" | |
151 | y="295.14792" /> | |
152 | <rect | |
153 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500056;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
155 | 154 | id="rect1509-6-9-6-8-2-2-7-5-6" |
156 | 155 | width="0.26458332" |
157 | height="0.52917457" | |
156 | height="0.26458189" | |
158 | 157 | x="3.4395833" |
159 | y="294.61874" /> | |
160 | <rect | |
161 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.1000117;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
158 | y="294.88333" /> | |
159 | <rect | |
160 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0707206;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
162 | 161 | id="rect1509-6-9-9-3" |
163 | 162 | width="0.52916664" |
164 | height="0.52916938" | |
163 | height="0.26459584" | |
165 | 164 | x="2.4494169e-09" |
166 | 165 | y="294.61874" /> |
167 | 166 | <rect |
168 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
167 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
169 | 168 | id="rect1509-6-9-6-8-2-2-3-1-5-9" |
170 | 169 | width="0.26458332" |
171 | 170 | height="0.26458672" |
172 | 171 | x="5.5366083e-08" |
173 | 172 | y="294.35416" /> |
174 | 173 | <rect |
175 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
176 | id="rect1509-6-9-6-8-2-2-3-1-5-4" | |
177 | width="0.26458332" | |
178 | height="0.26458672" | |
179 | x="5.5366083e-08" | |
174 | style="opacity:0.6;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500051;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
175 | id="rect1509-6-9-9-3-8" | |
176 | width="0.26458332" | |
177 | height="0.2645767" | |
178 | x="3.96875" | |
179 | y="294.88333" /> | |
180 | <rect | |
181 | style="opacity:0.25;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
182 | id="rect1509-6-9-6-8-2-2-3-1-5-4-2" | |
183 | width="0.26458332" | |
184 | height="0.26458672" | |
185 | x="3.9687502" | |
180 | 186 | y="295.14792" /> |
181 | 187 | <rect |
182 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071895;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
183 | id="rect1509-6-9-9-3-8" | |
184 | width="0.26458332" | |
185 | height="0.52916938" | |
186 | x="3.9687495" | |
187 | y="294.61874" /> | |
188 | <rect | |
189 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
190 | id="rect1509-6-9-6-8-2-2-3-1-5-9-1" | |
191 | width="0.26458332" | |
192 | height="0.26458672" | |
193 | x="3.9687498" | |
194 | y="294.35416" /> | |
195 | <rect | |
196 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
197 | id="rect1509-6-9-6-8-2-2-3-1-5-4-2" | |
198 | width="0.26458332" | |
199 | height="0.26458672" | |
200 | x="3.9687498" | |
201 | y="295.14792" /> | |
202 | <rect | |
203 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
188 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
204 | 189 | id="rect1509-6-9-6-8-2-2-3-1-5-9-9" |
205 | 190 | width="0.26458332" |
206 | height="0.26458672" | |
191 | height="0.264586" | |
207 | 192 | x="2.3812499" |
208 | y="293.29584" /> | |
209 | <rect | |
210 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
193 | y="293.82501" /> | |
194 | <rect | |
195 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500055;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
211 | 196 | id="rect1509-6-9-6-8-2-2-3-1-5-9-3" |
212 | 197 | width="0.26458332" |
213 | height="0.26458672" | |
198 | height="0.26458153" | |
214 | 199 | x="2.3812499" |
215 | y="296.20624" /> | |
216 | <rect | |
217 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.15813197;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
200 | y="295.67709" /> | |
201 | <rect | |
202 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.122488;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
218 | 203 | id="rect1509-6-9-3-6-0-8-9-4-9" |
219 | 204 | width="0.26458305" |
220 | height="2.6458344" | |
205 | height="1.5874901" | |
221 | 206 | x="2.3812499" |
222 | y="293.56042" | |
207 | y="294.0896" | |
223 | 208 | inkscape:transform-center-x="0.81559079" |
224 | inkscape:transform-center-y="-4.0106747" /> | |
225 | <rect | |
226 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.12248758;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
209 | inkscape:transform-center-y="-2.40637" /> | |
210 | <rect | |
211 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.122488;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
227 | 212 | id="rect1509-6-9-3-6-0-2-0" |
228 | 213 | width="0.26458344" |
229 | 214 | height="1.5874749" |
232 | 217 | inkscape:transform-center-x="0.81558972" |
233 | 218 | inkscape:transform-center-y="-2.4063427" /> |
234 | 219 | <rect |
235 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
220 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
236 | 221 | id="rect1509-6-9-6-8-2-2-3-1-5-8" |
237 | 222 | width="0.26458332" |
238 | 223 | height="0.26458672" |
239 | 224 | x="1.3229166" |
240 | 225 | y="293.82501" /> |
241 | 226 | <rect |
242 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.05000604;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
227 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
243 | 228 | id="rect1509-6-9-6-8-2-2-3-1-5-85" |
244 | 229 | width="0.26458332" |
245 | 230 | height="0.26458672" |
246 | 231 | x="1.3229166" |
247 | 232 | y="295.67709" /> |
248 | 233 | <rect |
249 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071895;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
234 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500064;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
250 | 235 | id="rect1509-6-9-9-3-0" |
251 | 236 | width="0.26458332" |
252 | height="0.52916938" | |
237 | height="0.26458997" | |
253 | 238 | x="1.0583333" |
254 | 239 | y="294.61874" /> |
255 | 240 | <rect |
256 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071895;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
241 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.070719;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
257 | 242 | id="rect1509-6-9-9-3-0-9" |
258 | 243 | width="0.26458332" |
259 | 244 | height="0.52916938" |
260 | 245 | x="1.8520832" |
261 | 246 | y="294.61874" /> |
262 | 247 | <rect |
263 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.07071895;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
248 | style="opacity:1;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500053;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
264 | 249 | id="rect1509-6-9-9-3-0-6" |
265 | 250 | width="0.26458332" |
266 | height="0.52916938" | |
251 | height="0.2645779" | |
267 | 252 | x="2.6458333" |
253 | y="294.88333" /> | |
254 | <rect | |
255 | style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.141437;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
256 | id="rect1509-6-9-3-1-3-6-5-6-3" | |
257 | width="0.26458329" | |
258 | height="2.1166682" | |
259 | x="0.79374999" | |
260 | y="293.82501" /> | |
261 | <rect | |
262 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
263 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6" | |
264 | width="0.26458332" | |
265 | height="0.26459229" | |
266 | x="0.79374993" | |
267 | y="295.94168" /> | |
268 | <rect | |
269 | style="opacity:0.34;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
270 | id="rect1509-6-9-6-8-2-2-9-2" | |
271 | width="0.26458341" | |
272 | height="0.26458672" | |
273 | x="0.79374999" | |
274 | y="296.20627" /> | |
275 | <rect | |
276 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
277 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9" | |
278 | width="0.26458332" | |
279 | height="0.26459229" | |
280 | x="0.79374993" | |
281 | y="293.56042" /> | |
282 | <rect | |
283 | style="opacity:0.34;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
284 | id="rect1509-6-9-6-8-2-2-9-2-1" | |
285 | width="0.26458341" | |
286 | height="0.26458672" | |
287 | x="0.79374999" | |
288 | y="293.29584" /> | |
289 | <rect | |
290 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
291 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-2" | |
292 | width="0.26458332" | |
293 | height="0.26459229" | |
294 | x="2.9104166" | |
295 | y="295.41251" /> | |
296 | <rect | |
297 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
298 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-0" | |
299 | width="0.26458332" | |
300 | height="0.26459229" | |
301 | x="2.9104166" | |
302 | y="294.0896" /> | |
303 | <rect | |
304 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
305 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-0-9" | |
306 | width="0.26458332" | |
307 | height="0.26459229" | |
308 | x="2.6458333" | |
309 | y="294.61877" /> | |
310 | <rect | |
311 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
312 | id="rect1509-6-9-6-8-2-2-73-0" | |
313 | width="0.26458353" | |
314 | height="0.26458672" | |
315 | x="1.058333" | |
316 | y="294.88333" /> | |
317 | <rect | |
318 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
319 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-0-6" | |
320 | width="0.26458332" | |
321 | height="0.26459229" | |
322 | x="3.4395833" | |
323 | y="294.61877" /> | |
324 | <rect | |
325 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0707198;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
326 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-26" | |
327 | width="0.26458332" | |
328 | height="0.52918172" | |
329 | x="-2.1525574e-08" | |
330 | y="294.88333" /> | |
331 | <rect | |
332 | style="opacity:0.5;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.050006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
333 | id="rect1509-6-9-6-8-2-2-3-1-5-9-18" | |
334 | width="0.26458332" | |
335 | height="0.26458672" | |
336 | x="0.26458338" | |
337 | y="294.88333" /> | |
338 | <rect | |
339 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
340 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-7" | |
341 | width="0.26458332" | |
342 | height="0.26459229" | |
343 | x="2.1166666" | |
344 | y="293.29584" /> | |
345 | <rect | |
346 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
347 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-9" | |
348 | width="0.26458332" | |
349 | height="0.26459229" | |
350 | x="2.1166666" | |
351 | y="296.20627" /> | |
352 | <rect | |
353 | style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500046;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
354 | id="rect1509-6-9-9-3-8-2" | |
355 | width="0.26458332" | |
356 | height="0.26457065" | |
357 | x="2.9104166" | |
358 | y="294.35416" /> | |
359 | <rect | |
360 | style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500046;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
361 | id="rect1509-6-9-9-3-8-2-0" | |
362 | width="0.26458332" | |
363 | height="0.26457065" | |
364 | x="2.9104166" | |
365 | y="295.14792" /> | |
366 | <rect | |
367 | style="opacity:0.34;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.070718;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
368 | id="rect1509-6-9-6-8-2-2-9-2-1-2" | |
369 | width="0.26458341" | |
370 | height="0.52915663" | |
371 | x="0.26458335" | |
372 | y="294.0896" /> | |
373 | <rect | |
374 | style="opacity:0.34;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0866123;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
375 | id="rect1509-6-9-6-8-2-2-9-2-1-3" | |
376 | width="0.26458341" | |
377 | height="0.79374909" | |
378 | x="0.26458335" | |
379 | y="295.14792" /> | |
380 | <rect | |
381 | style="opacity:0.4;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500056;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
382 | id="rect1509-6-9-6-8-2-2-7-5-6-3" | |
383 | width="0.26458332" | |
384 | height="0.26458189" | |
385 | x="3.9687498" | |
386 | y="294.35416" /> | |
387 | <rect | |
388 | style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500074;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
389 | id="rect1509-6-9-3-1-3-6-5-3-6" | |
390 | width="0.26458305" | |
391 | height="0.26460183" | |
392 | x="3.9687498" | |
268 | 393 | y="294.61874" /> |
394 | <rect | |
395 | style="opacity:0.66;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.0500066;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" | |
396 | id="rect1509-6-9-6-8-2-2-3-1-5-8-6-9-2-5" | |
397 | width="0.26458332" | |
398 | height="0.26459229" | |
399 | x="3.7041664" | |
400 | y="295.14792" /> | |
269 | 401 | </g> |
270 | 402 | </svg> |
4 | 4 | <metadata_license>FSFAP</metadata_license> |
5 | 5 | <project_license>GPL-3.0+</project_license> |
6 | 6 | <name>elektroid</name> |
7 | <summary>Sample transfer application</summary> | |
7 | <summary>Transfer application for Elektron devices</summary> | |
8 | 8 | <description> |
9 | <p>Elektroid is an sample transfer application for Elektron devices.</p> | |
10 | <p>With elektroid you can easily load audio files like flac or wav into your | |
11 | elektron sampler. You can also transfer audio samples from your elektroid | |
12 | device to your local hard disk.</p> | |
9 | <p>Elektroid is an transfer application for Elektron devices.</p> | |
10 | <p>With Elektroid you can easily upload and download audio files, projects, sounds and presets to and from Elektron devices. It can also be used to send and receive MIDI SysEx files.</p> | |
11 | <p>Elektroid has been reported to work with Model:Samples, Model:Cycles, Digitakt, Digitone and Analog Rytm MKI and MKII.</p> | |
13 | 12 | </description> |
14 | 13 | <launchable type="desktop-id">elektroid.desktop</launchable> |
15 | 14 | <provides> |
0 | 0 | [Desktop Entry] |
1 | 1 | Type=Application |
2 | 2 | Name=Elektroid |
3 | Comment=Sample transfer application for Elektron devices | |
4 | Comment[ca]=Aplicació de transferència de mostres per a dispositius Elektron | |
5 | Comment[de]=Sample Transfer Anwendung für Elektron Instrumente | |
6 | Comment[es]=Aplicación de transferencia de muestras para dispositivos Elektron | |
7 | Comment[fr]=Application de transfert d'échantillon pour les périphériques Elektron | |
8 | Comment[pt_BR]=Aplicativo de transferência de sample para dispositivos Elektron | |
3 | Comment=Transfer application for Elektron devices | |
4 | Comment[ca]=Aplicació de transferència per a dispositius Elektron | |
5 | Comment[de]=Transfer Anwendung für Elektron Instrumente | |
6 | Comment[es]=Aplicación de transferencia para dispositivos Elektron | |
7 | Comment[fr]=Application de transfert pour les périphériques Elektron | |
8 | Comment[pt_BR]=Aplicativo de transferência para dispositivos Elektron | |
9 | 9 | Categories=Music;AudioVideo;X-Sound;Audio;X-Alsa |
10 | 10 | Keywords=music;alsa;realtime;standalone; |
11 | 11 | Exec=elektroid |
23 | 23 | <!-- interface-css-provider-path gui.css --> |
24 | 24 | <!-- interface-license-type gplv3 --> |
25 | 25 | <!-- interface-name Elektroid --> |
26 | <!-- interface-description GNU/Linux sample transfer application for Elektron devices --> | |
26 | <!-- interface-description GNU/Linux transfer application for Elektron devices --> | |
27 | 27 | <!-- interface-copyright David Garc\303\255a Go\303\261i --> |
28 | 28 | <object class="GtkListStore" id="devices_list_store"> |
29 | 29 | <columns> |
256 | 256 | <object class="GtkBox"> |
257 | 257 | <property name="visible">True</property> |
258 | 258 | <property name="can-focus">False</property> |
259 | <property name="margin-left">9</property> | |
260 | <property name="margin-right">9</property> | |
259 | <property name="margin-start">9</property> | |
260 | <property name="margin-end">9</property> | |
261 | 261 | <property name="margin-top">9</property> |
262 | 262 | <property name="margin-bottom">9</property> |
263 | 263 | <property name="orientation">vertical</property> |
354 | 354 | <object class="GtkPaned"> |
355 | 355 | <property name="visible">True</property> |
356 | 356 | <property name="can-focus">False</property> |
357 | <property name="margin-left">6</property> | |
358 | <property name="margin-right">6</property> | |
357 | <property name="margin-start">6</property> | |
358 | <property name="margin-end">6</property> | |
359 | 359 | <property name="margin-top">6</property> |
360 | 360 | <property name="hexpand">True</property> |
361 | 361 | <property name="vexpand">True</property> |
1035 | 1035 | <object class="GtkFrame"> |
1036 | 1036 | <property name="visible">True</property> |
1037 | 1037 | <property name="can-focus">False</property> |
1038 | <property name="hexpand">True</property> | |
1039 | 1038 | <property name="label-xalign">0</property> |
1040 | <property name="label-yalign">0</property> | |
1041 | <property name="shadow-type">in</property> | |
1042 | <child> | |
1043 | <object class="GtkAlignment"> | |
1039 | <child> | |
1040 | <object class="GtkDrawingArea" id="waveform_draw_area"> | |
1044 | 1041 | <property name="visible">True</property> |
1045 | 1042 | <property name="can-focus">False</property> |
1046 | <child> | |
1047 | <object class="GtkDrawingArea" id="waveform_draw_area"> | |
1048 | <property name="visible">True</property> | |
1049 | <property name="can-focus">False</property> | |
1050 | <property name="hexpand">True</property> | |
1051 | <style> | |
1052 | <class name="local"/> | |
1053 | </style> | |
1054 | </object> | |
1055 | </child> | |
1056 | </object> | |
1057 | </child> | |
1058 | <child type="label"> | |
1059 | <object class="GtkLabel"> | |
1060 | <property name="can-focus">False</property> | |
1061 | </object> | |
1043 | <property name="hexpand">True</property> | |
1044 | <style> | |
1045 | <class name="local"/> | |
1046 | <class name="waveform"/> | |
1047 | </style> | |
1048 | </object> | |
1049 | </child> | |
1050 | <child type="label_item"> | |
1051 | <placeholder/> | |
1062 | 1052 | </child> |
1063 | 1053 | </object> |
1064 | 1054 | <packing> |
1065 | <property name="expand">False</property> | |
1055 | <property name="expand">True</property> | |
1066 | 1056 | <property name="fill">True</property> |
1067 | 1057 | <property name="position">1</property> |
1068 | 1058 | </packing> |
1281 | 1271 | <object class="GtkStatusbar" id="status_bar"> |
1282 | 1272 | <property name="visible">True</property> |
1283 | 1273 | <property name="can-focus">False</property> |
1274 | <property name="halign">end</property> | |
1284 | 1275 | <property name="orientation">vertical</property> |
1285 | 1276 | </object> |
1286 | 1277 | <packing> |
1296 | 1287 | <property name="visible">True</property> |
1297 | 1288 | <property name="can-focus">False</property> |
1298 | 1289 | <property name="title">Elektroid</property> |
1290 | <property name="has-subtitle">False</property> | |
1299 | 1291 | <property name="show-close-button">True</property> |
1300 | 1292 | <child> |
1301 | 1293 | <object class="GtkMenuButton" id="menu_button"> |
1324 | 1316 | <child internal-child="vbox"> |
1325 | 1317 | <object class="GtkBox"> |
1326 | 1318 | <property name="can-focus">False</property> |
1327 | <property name="margin-left">6</property> | |
1328 | <property name="margin-right">6</property> | |
1319 | <property name="margin-start">6</property> | |
1320 | <property name="margin-end">6</property> | |
1329 | 1321 | <property name="margin-top">6</property> |
1330 | 1322 | <property name="margin-bottom">6</property> |
1331 | 1323 | <property name="orientation">vertical</property> |
1336 | 1328 | <property name="layout-style">end</property> |
1337 | 1329 | <child> |
1338 | 1330 | <object class="GtkButton" id="name_dialog_cancel_button"> |
1339 | <property name="label">gtk-cancel</property> | |
1331 | <property name="label" translatable="yes">_Cancel</property> | |
1340 | 1332 | <property name="visible">True</property> |
1341 | 1333 | <property name="can-focus">True</property> |
1342 | 1334 | <property name="receives-default">True</property> |
1343 | <property name="use-stock">True</property> | |
1335 | <property name="use-underline">True</property> | |
1344 | 1336 | </object> |
1345 | 1337 | <packing> |
1346 | 1338 | <property name="expand">False</property> |
1350 | 1342 | </child> |
1351 | 1343 | <child> |
1352 | 1344 | <object class="GtkButton" id="name_dialog_accept_button"> |
1353 | <property name="label">gtk-ok</property> | |
1345 | <property name="label" translatable="yes">_Save</property> | |
1354 | 1346 | <property name="visible">True</property> |
1355 | 1347 | <property name="can-focus">True</property> |
1356 | 1348 | <property name="can-default">True</property> |
1357 | 1349 | <property name="has-default">True</property> |
1358 | 1350 | <property name="receives-default">False</property> |
1359 | <property name="use-stock">True</property> | |
1351 | <property name="use-underline">True</property> | |
1360 | 1352 | </object> |
1361 | 1353 | <packing> |
1362 | 1354 | <property name="expand">False</property> |
1424 | 1416 | <child internal-child="vbox"> |
1425 | 1417 | <object class="GtkBox"> |
1426 | 1418 | <property name="can-focus">False</property> |
1427 | <property name="margin-left">6</property> | |
1428 | <property name="margin-right">6</property> | |
1419 | <property name="margin-start">6</property> | |
1420 | <property name="margin-end">6</property> | |
1429 | 1421 | <property name="margin-top">6</property> |
1430 | 1422 | <property name="margin-bottom">6</property> |
1431 | 1423 | <property name="orientation">vertical</property> |
1436 | 1428 | <property name="layout-style">end</property> |
1437 | 1429 | <child> |
1438 | 1430 | <object class="GtkButton" id="progress_dialog_cancel_button"> |
1439 | <property name="label">gtk-cancel</property> | |
1431 | <property name="label" translatable="yes">_Cancel</property> | |
1440 | 1432 | <property name="visible">True</property> |
1441 | 1433 | <property name="can-focus">True</property> |
1442 | 1434 | <property name="receives-default">True</property> |
1443 | <property name="use-stock">True</property> | |
1435 | <property name="use-underline">True</property> | |
1444 | 1436 | </object> |
1445 | 1437 | <packing> |
1446 | 1438 | <property name="expand">True</property> |
2 | 2 | GUI_LIBS = alsa gtk+-3.0 libpulse libpulse-mainloop-glib zlib json-glib-1.0 libzip |
3 | 3 | CLI_LIBS = alsa glib-2.0 zlib json-glib-1.0 libzip |
4 | 4 | |
5 | elektroid_CFLAGS = -I$(top_srcdir)/src `$(PKG_CONFIG) --cflags $(GUI_LIBS)` $(SNDFILE_CFLAGS) $(SAMPLERATE_CFLAGS) | |
5 | elektroid_CFLAGS = -I$(top_srcdir)/src `$(PKG_CONFIG) --cflags $(GUI_LIBS)` $(SNDFILE_CFLAGS) $(SAMPLERATE_CFLAGS) -D_GNU_SOURCE | |
6 | 6 | elektroid_LDFLAGS = `$(PKG_CONFIG) --libs $(GUI_LIBS)` $(SNDFILE_LIBS) $(SAMPLERATE_LIBS) |
7 | elektroid_cli_CFLAGS = -I$(top_srcdir)/src `$(PKG_CONFIG) --cflags $(CLI_LIBS)` $(SNDFILE_CFLAGS) $(SAMPLERATE_CFLAGS) | |
7 | elektroid_cli_CFLAGS = -I$(top_srcdir)/src `$(PKG_CONFIG) --cflags $(CLI_LIBS)` $(SNDFILE_CFLAGS) $(SAMPLERATE_CFLAGS) -D_GNU_SOURCE | |
8 | 8 | elektroid_cli_LDFLAGS = `$(PKG_CONFIG) --libs $(CLI_LIBS)` $(SNDFILE_LIBS) $(SAMPLERATE_LIBS) |
9 | 9 | |
10 | 10 | if CLI_ONLY |
22 | 22 | SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ |
23 | 23 | SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ |
24 | 24 | |
25 | AM_CPPFLAGS = -Wall -O3 -DDATADIR='"$(datadir)"' -DLOCALEDIR=\""$(localedir)"\" | |
25 | AM_CPPFLAGS = -Wall -O3 -DDATADIR='"$(datadir)/$(PACKAGE)"' -DLOCALEDIR='"$(localedir)"' |
23 | 23 | #include <poll.h> |
24 | 24 | #include <zlib.h> |
25 | 25 | #include <libgen.h> |
26 | #include <json-glib/json-glib.h> | |
27 | 26 | #include "connector.h" |
28 | 27 | #include "utils.h" |
29 | 28 | #include "sample.h" |
30 | 29 | #include "package.h" |
30 | #include "../config.h" | |
31 | 31 | |
32 | 32 | #define KB 1024 |
33 | 33 | #define BUFF_SIZE (4 * KB) |
36 | 36 | #define OS_TRANSF_BLOCK_BYTES 0x800 |
37 | 37 | #define POLL_TIMEOUT 20 |
38 | 38 | #define MAX_ZIP_SIZE (128 * 1024 * 1024) |
39 | ||
40 | #define AFMK1_ID 0x04 | |
41 | #define AKEYS_ID 0x06 | |
42 | #define ARMK1_ID 0x08 | |
43 | #define AHMK1_ID 0x0a | |
44 | #define DTAKT_ID 0x0c | |
45 | #define AFMK2_ID 0x0e | |
46 | #define ARMK2_ID 0x10 | |
47 | #define DTONE_ID 0x14 | |
48 | #define AHMK2_ID 0x16 | |
49 | #define DKEYS_ID 0x1c | |
50 | #define MOD_S_ID 0x19 | |
51 | #define MOD_C_ID 0x1b | |
52 | 39 | |
53 | 40 | #define FS_DATA_PRJ_PREFIX "/projects" |
54 | 41 | #define FS_DATA_SND_PREFIX "/soundbanks" |
251 | 238 | |
252 | 239 | static const gchar *FS_TYPE_NAMES[] = { "+Drive", "RAM" }; |
253 | 240 | |
254 | static const struct connector_device_desc ANALOG_FOUR_DESC = { | |
255 | .name = "Analog Four", | |
256 | .alias = "af", | |
257 | .id = AFMK1_ID, | |
258 | .fss = FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
259 | .storages = 0 | |
260 | }; | |
261 | ||
262 | static const struct connector_device_desc ANALOG_KEYS_DESC = { | |
263 | .name = "Analog Keys", | |
264 | .alias = "ak", | |
265 | .id = AKEYS_ID, | |
266 | .fss = FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
267 | .storages = 0 | |
268 | }; | |
269 | ||
270 | static const struct connector_device_desc ANALOG_RYTM_DESC = { | |
271 | .name = "Analog Rytm", | |
272 | .alias = "ar", | |
273 | .id = ARMK1_ID, | |
274 | .fss = FS_SAMPLES | FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
275 | .storages = STORAGE_PLUS_DRIVE | STORAGE_RAM | |
276 | }; | |
277 | ||
278 | static const struct connector_device_desc ANALOG_HEAT_DESC = { | |
279 | .name = "Analog Heat", | |
280 | .alias = "ah", | |
281 | .id = AHMK1_ID, | |
282 | .fss = FS_DATA_ALL | FS_DATA_SND, | |
283 | .storages = 0 | |
284 | }; | |
285 | ||
286 | static const struct connector_device_desc DIGITAKT_DESC = { | |
287 | .name = "Digitakt", | |
288 | .alias = "dt", | |
289 | .id = DTAKT_ID, | |
290 | .fss = FS_SAMPLES | FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
291 | .storages = STORAGE_PLUS_DRIVE | STORAGE_RAM | |
292 | }; | |
293 | ||
294 | static const struct connector_device_desc ANALOG_FOUR_MKII_DESC = { | |
295 | .name = "Analog Four MKII", | |
296 | .alias = "af", | |
297 | .id = AFMK2_ID, | |
298 | .fss = FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
299 | .storages = 0 | |
300 | }; | |
301 | ||
302 | static const struct connector_device_desc ANALOG_RYTM_MKII_DESC = { | |
303 | .name = "Analog Rytm MKII", | |
304 | .alias = "ar", | |
305 | .id = ARMK2_ID, | |
306 | .fss = FS_SAMPLES | FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
307 | .storages = STORAGE_PLUS_DRIVE | STORAGE_RAM | |
308 | }; | |
309 | ||
310 | static const struct connector_device_desc DIGITONE_DESC = { | |
311 | .name = "Digitone", | |
312 | .alias = "dn", | |
313 | .id = DTONE_ID, | |
314 | .fss = FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
315 | .storages = 0 | |
316 | }; | |
317 | ||
318 | static const struct connector_device_desc ANALOG_HEAT_MKII_DESC = { | |
319 | .name = "Analog Heat MKII", | |
320 | .alias = "ah", | |
321 | .id = AHMK2_ID, | |
322 | .fss = FS_DATA_ALL | FS_DATA_SND, | |
323 | .storages = 0 | |
324 | }; | |
325 | ||
326 | static const struct connector_device_desc DIGITONE_KEYS_DESC = { | |
327 | .name = "Digitone Keys", | |
328 | .alias = "dn", | |
329 | .id = DKEYS_ID, | |
330 | .fss = FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
331 | .storages = 0 | |
332 | }; | |
333 | ||
334 | static const struct connector_device_desc MODEL_SAMPLES_DESC = { | |
335 | .name = "Model:Samples", | |
336 | .alias = "ms", | |
337 | .id = MOD_S_ID, | |
338 | .fss = FS_SAMPLES | FS_DATA_ALL | FS_DATA_PRJ | FS_DATA_SND, | |
339 | .storages = STORAGE_PLUS_DRIVE | STORAGE_RAM | |
340 | }; | |
341 | ||
342 | static const struct connector_device_desc MODEL_CYCLES_DESC = { | |
343 | .name = "Model:Cycles", | |
344 | .alias = "mc", | |
345 | .id = MOD_C_ID, | |
346 | .fss = FS_RAW_ALL | FS_RAW_PRESETS | FS_DATA_ALL | FS_DATA_PRJ, | |
347 | .storages = STORAGE_PLUS_DRIVE | |
348 | }; | |
349 | ||
350 | static const struct connector_device_desc *CONNECTOR_DEVICE_DESCS[] = { | |
351 | &ANALOG_FOUR_DESC, &ANALOG_KEYS_DESC, &ANALOG_RYTM_DESC, &ANALOG_HEAT_DESC, | |
352 | &DIGITAKT_DESC, &ANALOG_FOUR_MKII_DESC, &ANALOG_RYTM_MKII_DESC, | |
353 | &DIGITONE_DESC, &ANALOG_HEAT_MKII_DESC, &DIGITONE_KEYS_DESC, | |
354 | &MODEL_SAMPLES_DESC, &MODEL_CYCLES_DESC | |
355 | }; | |
356 | ||
357 | 241 | static const struct fs_operations FS_SAMPLES_OPERATIONS = { |
358 | 242 | .fs = FS_SAMPLES, |
359 | 243 | .readdir = connector_read_samples_dir, |
2361 | 2245 | { |
2362 | 2246 | free (connector->device_name); |
2363 | 2247 | free (connector->fw_version); |
2364 | free (connector->alias); | |
2248 | free (connector->overbridge_name); | |
2365 | 2249 | connector->device_name = NULL; |
2366 | 2250 | } |
2367 | 2251 | |
2382 | 2266 | g_hash_table_destroy (connector->dir_cache); |
2383 | 2267 | connector->dir_cache = NULL; |
2384 | 2268 | } |
2269 | ||
2270 | if (connector->device_desc.name) | |
2271 | { | |
2272 | g_free (connector->device_desc.name); | |
2273 | connector->device_desc.name = NULL; | |
2274 | } | |
2275 | ||
2276 | if (connector->device_desc.alias) | |
2277 | { | |
2278 | g_free (connector->device_desc.alias); | |
2279 | connector->device_desc.alias = NULL; | |
2280 | } | |
2281 | ||
2385 | 2282 | } |
2386 | 2283 | |
2387 | 2284 | gint |
2440 | 2337 | return (statfs->bsize - statfs->bfree) * 100.0 / statfs->bsize; |
2441 | 2338 | } |
2442 | 2339 | |
2443 | static const struct connector_device_desc * | |
2444 | connector_get_device_desc (guint8 id) | |
2445 | { | |
2446 | guint total = | |
2447 | sizeof (CONNECTOR_DEVICE_DESCS) / sizeof (struct connector_device_desc *); | |
2448 | guint i; | |
2449 | ||
2450 | for (i = 0; i < total; i++) | |
2451 | { | |
2452 | if (id == CONNECTOR_DEVICE_DESCS[i]->id) | |
2453 | { | |
2454 | return CONNECTOR_DEVICE_DESCS[i]; | |
2455 | } | |
2456 | } | |
2457 | return NULL; | |
2458 | } | |
2459 | ||
2460 | 2340 | gint |
2461 | connector_init (struct connector *connector, gint card) | |
2462 | { | |
2463 | int err; | |
2341 | connector_init (struct connector *connector, gint card, | |
2342 | const char *device_filename) | |
2343 | { | |
2344 | gint err; | |
2345 | guint8 id; | |
2464 | 2346 | GByteArray *tx_msg; |
2465 | 2347 | GByteArray *rx_msg; |
2466 | 2348 | snd_rawmidi_params_t *params; |
2473 | 2355 | connector->rx_len = 0; |
2474 | 2356 | connector->pfds = NULL; |
2475 | 2357 | connector->dir_cache = NULL; |
2358 | connector->device_desc.name = NULL; | |
2359 | connector->device_desc.alias = NULL; | |
2476 | 2360 | if (card < 0) |
2477 | 2361 | { |
2478 | 2362 | debug_print (1, "Invalid card\n"); |
2561 | 2445 | err = -EIO; |
2562 | 2446 | goto cleanup_params; |
2563 | 2447 | } |
2564 | connector->alias = strdup ((gchar *) & rx_msg->data[7 + rx_msg->data[6]]); | |
2565 | connector->device_desc = connector_get_device_desc (rx_msg->data[5]); | |
2448 | connector->overbridge_name = | |
2449 | strdup ((gchar *) & rx_msg->data[7 + rx_msg->data[6]]); | |
2450 | id = rx_msg->data[5]; | |
2566 | 2451 | free_msg (rx_msg); |
2567 | if (!connector->device_desc) | |
2452 | if (load_device_desc (&connector->device_desc, id, device_filename)) | |
2568 | 2453 | { |
2569 | 2454 | err = -ENODEV; |
2570 | 2455 | goto cleanup_params; |
2595 | 2480 | } |
2596 | 2481 | |
2597 | 2482 | snprintf (connector->device_name, LABEL_MAX, "%s %s (%s)", |
2598 | connector->device_desc->name, | |
2599 | connector->fw_version, connector->alias); | |
2483 | connector->device_desc.name, | |
2484 | connector->fw_version, connector->overbridge_name); | |
2600 | 2485 | debug_print (1, "Connected to %s\n", connector->device_name); |
2601 | 2486 | err = 0; |
2602 | 2487 | |
3418 | 3303 | } |
3419 | 3304 | |
3420 | 3305 | if (package_begin |
3421 | (&pkg, pkg_name, connector->fw_version, connector->device_desc, type)) | |
3306 | (&pkg, pkg_name, connector->fw_version, &connector->device_desc, type)) | |
3422 | 3307 | { |
3423 | 3308 | g_free (pkg_name); |
3424 | 3309 | return -1; |
3619 | 3504 | name = connector_get_download_name (connector, remote_iter, ops, src_fpath); |
3620 | 3505 | if (name) |
3621 | 3506 | { |
3622 | dl_ext = connector_get_full_ext (connector->device_desc, ops); | |
3507 | dl_ext = connector_get_full_ext (&connector->device_desc, ops); | |
3623 | 3508 | filename = malloc (PATH_MAX); |
3624 | 3509 | snprintf (filename, PATH_MAX, "%s.%s%s", name, dl_ext, md_ext); |
3625 | 3510 | path = chain_path (dst_dir, filename); |
3808 | 3693 | struct package pkg; |
3809 | 3694 | struct connector *connector = data; |
3810 | 3695 | |
3811 | ret = package_open (&pkg, input, connector->device_desc); | |
3696 | ret = package_open (&pkg, input, &connector->device_desc); | |
3812 | 3697 | if (!ret) |
3813 | 3698 | { |
3814 | 3699 | ret = package_send_pkg_resources (&pkg, path, control, connector, |
27 | 27 | #define SYSEX_TIMEOUT 5000 |
28 | 28 | #define REST_TIME 50000 |
29 | 29 | |
30 | struct connector_device_desc | |
31 | { | |
32 | const gchar *name; | |
33 | const gchar *alias; | |
34 | guint8 id; | |
35 | guint8 fss; | |
36 | guint8 storages; | |
37 | }; | |
38 | ||
39 | 30 | struct connector |
40 | 31 | { |
41 | const struct connector_device_desc *device_desc; | |
32 | struct connector_device_desc device_desc; | |
42 | 33 | snd_rawmidi_t *inputp; |
43 | 34 | snd_rawmidi_t *outputp; |
44 | 35 | gchar *device_name; |
45 | gchar *alias; | |
36 | gchar *overbridge_name; | |
46 | 37 | gchar *fw_version; |
47 | 38 | gushort seq; |
48 | 39 | GMutex mutex; |
114 | 105 | |
115 | 106 | const struct fs_operations *connector_get_fs_operations (enum connector_fs); |
116 | 107 | |
117 | gint connector_init (struct connector *, gint); | |
108 | gint connector_init (struct connector *, gint, const char *); | |
118 | 109 | |
119 | 110 | void connector_destroy (struct connector *); |
120 | 111 |
35 | 35 | |
36 | 36 | static struct connector connector; |
37 | 37 | static struct job_control control; |
38 | static const char *devices_filename; | |
38 | 39 | |
39 | 40 | typedef void (*print_item) (struct item_iterator *); |
40 | 41 | |
108 | 109 | cli_connect (const char *device_path, enum connector_fs fs) |
109 | 110 | { |
110 | 111 | gint card = atoi (device_path); |
111 | gint ret = connector_init (&connector, card); | |
112 | if (!ret && fs && !(connector.device_desc->fss & fs)) | |
112 | gint ret = connector_init (&connector, card, devices_filename); | |
113 | if (!ret && fs && !(connector.device_desc.filesystems & fs)) | |
113 | 114 | { |
114 | 115 | error_print ("Filesystem not supported for device '%s'\n", |
115 | connector.device_desc->name); | |
116 | connector.device_desc.name); | |
116 | 117 | return 1; |
117 | 118 | } |
118 | 119 | return ret; |
269 | 270 | comma = ""; |
270 | 271 | for (int fs = FS_SAMPLES, i = 0; fs <= FS_DATA_SND; fs <<= 1, i++) |
271 | 272 | { |
272 | if (connector.device_desc->fss & fs) | |
273 | if (connector.device_desc.filesystems & fs) | |
273 | 274 | { |
274 | 275 | printf ("%s%s", comma, CLI_FSS[i]); |
275 | 276 | } |
306 | 307 | return EXIT_FAILURE; |
307 | 308 | } |
308 | 309 | |
309 | if (!connector.device_desc->storages) | |
310 | if (!connector.device_desc.storage) | |
310 | 311 | { |
311 | 312 | return EXIT_FAILURE; |
312 | 313 | } |
317 | 318 | res = 0; |
318 | 319 | for (storage = STORAGE_PLUS_DRIVE; storage <= STORAGE_RAM; storage <<= 1) |
319 | 320 | { |
320 | if (connector.device_desc->storages & storage) | |
321 | if (connector.device_desc.storage & storage) | |
321 | 322 | { |
322 | 323 | res |= connector_get_storage_stats (&connector, storage, &statfs); |
323 | 324 | if (res) |
601 | 602 | sigaction (SIGHUP, &action, NULL); |
602 | 603 | } |
603 | 604 | |
604 | while ((c = getopt (argc, argv, "v")) != -1) | |
605 | devices_filename = NULL; | |
606 | ||
607 | while ((c = getopt (argc, argv, "f:v")) != -1) | |
605 | 608 | { |
606 | 609 | switch (c) |
607 | 610 | { |
611 | case 'f': | |
612 | devices_filename = optarg; | |
613 | break; | |
608 | 614 | case 'v': |
609 | 615 | vflg++; |
610 | 616 | break; |
24 | 24 | #include <glib-unix.h> |
25 | 25 | #include <glib/gi18n.h> |
26 | 26 | #include <glib/gprintf.h> |
27 | #define _GNU_SOURCE | |
28 | 27 | #include <getopt.h> |
29 | 28 | #include "connector.h" |
30 | 29 | #include "browser.h" |
260 | 259 | enum connector_fs sel_fs) |
261 | 260 | { |
262 | 261 | const struct fs_operations *ops; |
263 | ||
264 | if (*extensions != NULL && *extensions != ELEKTROID_AUDIO_LOCAL_EXTS) | |
265 | { | |
266 | g_free ((*extensions)[0]); | |
262 | gchar *mp3_ext = NULL; | |
263 | ||
264 | if (*extensions != NULL) | |
265 | { | |
266 | gchar **ext = *extensions; | |
267 | while (*ext) | |
268 | { | |
269 | g_free (*ext); | |
270 | ext++; | |
271 | } | |
267 | 272 | g_free (*extensions); |
268 | 273 | } |
274 | ||
269 | 275 | if (sel_fs == FS_SAMPLES) |
270 | 276 | { |
271 | *extensions = ELEKTROID_AUDIO_LOCAL_EXTS; | |
277 | gchar **ext = ELEKTROID_AUDIO_LOCAL_EXTS; | |
278 | int known_ext = 0; | |
279 | while (*ext) | |
280 | { | |
281 | known_ext++; | |
282 | ext++; | |
283 | } | |
284 | known_ext++; //NULL included | |
285 | ||
286 | int total_ext = known_ext; | |
287 | ||
288 | if (sample_is_mp3_supported ()) | |
289 | { | |
290 | mp3_ext = "mp3"; | |
291 | total_ext++; | |
292 | } | |
293 | ||
294 | *extensions = malloc (sizeof (gchar *) * total_ext); | |
295 | ext = ELEKTROID_AUDIO_LOCAL_EXTS; | |
296 | int i = 0; | |
297 | while (*ext) | |
298 | { | |
299 | (*extensions)[i] = strdup (*ext); | |
300 | ext++; | |
301 | i++; | |
302 | } | |
303 | if (mp3_ext) | |
304 | { | |
305 | (*extensions)[i] = strdup (mp3_ext); | |
306 | i++; | |
307 | } | |
308 | (*extensions)[i] = NULL; | |
309 | ||
272 | 310 | } |
273 | 311 | else |
274 | 312 | { |
275 | 313 | ops = connector_get_fs_operations (sel_fs); |
276 | 314 | *extensions = malloc (sizeof (gchar *) * 2); |
277 | (*extensions)[0] = connector_get_full_ext (connector.device_desc, ops); | |
315 | (*extensions)[0] = connector_get_full_ext (&connector.device_desc, ops); | |
278 | 316 | (*extensions)[1] = NULL; |
279 | 317 | } |
280 | 318 | } |
377 | 415 | for (storage = STORAGE_PLUS_DRIVE; storage <= STORAGE_RAM; |
378 | 416 | storage <<= 1) |
379 | 417 | { |
380 | if (connector.device_desc->storages & storage) | |
418 | if (connector.device_desc.storage & storage) | |
381 | 419 | { |
382 | 420 | res = |
383 | 421 | connector_get_storage_stats (&connector, storage, &statfs); |
824 | 862 | } |
825 | 863 | |
826 | 864 | static void |
827 | elektroid_controls_set_sensitive (gboolean sensitive) | |
865 | elektroid_sample_controls_set_sensitive (gboolean sensitive) | |
828 | 866 | { |
829 | 867 | gtk_widget_set_sensitive (local_play_menuitem, sensitive); |
830 | 868 | gtk_widget_set_sensitive (play_button, sensitive); |
845 | 883 | { |
846 | 884 | if (audio_check (&audio)) |
847 | 885 | { |
848 | elektroid_controls_set_sensitive (TRUE); | |
886 | elektroid_sample_controls_set_sensitive (TRUE); | |
849 | 887 | } |
850 | 888 | if (preferences.autoplay) |
851 | 889 | { |
1302 | 1340 | GtkTreeIter iter; |
1303 | 1341 | gchar *sample_path; |
1304 | 1342 | GtkTreeModel *model; |
1343 | gboolean audio_controls; | |
1305 | 1344 | struct item *item = NULL; |
1306 | 1345 | gint count = browser_get_selected_items_count (&local_browser); |
1307 | 1346 | |
1326 | 1365 | elektroid_stop_load_thread (); |
1327 | 1366 | audio_reset_sample (&audio); |
1328 | 1367 | gtk_widget_queue_draw (waveform_draw_area); |
1329 | elektroid_controls_set_sensitive (FALSE); | |
1330 | 1368 | |
1331 | 1369 | if (item && item->type == ELEKTROID_FILE |
1332 | 1370 | && strcmp (item->name, audio.name)) |
1335 | 1373 | elektroid_start_load_thread (sample_path); |
1336 | 1374 | strcpy (audio.name, item->name); |
1337 | 1375 | } |
1338 | gtk_widget_set_sensitive (local_open_menuitem, item | |
1339 | && item->type == ELEKTROID_FILE); | |
1376 | ||
1340 | 1377 | } |
1341 | 1378 | |
1342 | 1379 | end: |
1380 | audio_controls = item && item->type == ELEKTROID_FILE && (!remote_browser.fs_ops || remote_browser.fs_ops->fs == FS_SAMPLES); //1 sample file | |
1381 | elektroid_sample_controls_set_sensitive (audio_controls); | |
1382 | gtk_widget_set_sensitive (local_open_menuitem, audio_controls); | |
1383 | ||
1343 | 1384 | if (item) |
1344 | 1385 | { |
1345 | 1386 | browser_free_item (item); |
2451 | 2492 | |
2452 | 2493 | for (int fs = FS_SAMPLES, i = 0; fs <= FS_DATA_SND; fs = fs << 1, i++) |
2453 | 2494 | { |
2454 | if (GUI_FSS & fs && connector.device_desc->fss & fs) | |
2495 | if (GUI_FSS & fs && connector.device_desc.filesystems & fs) | |
2455 | 2496 | { |
2456 | 2497 | gtk_list_store_insert_with_values (fs_list_store, NULL, -1, |
2457 | 2498 | FS_LIST_STORE_ID_FIELD, |
2486 | 2527 | |
2487 | 2528 | card = g_value_get_uint (&cardv); |
2488 | 2529 | |
2489 | if (connector_init (&connector, card) < 0) | |
2530 | if (connector_init (&connector, card, NULL) < 0) | |
2490 | 2531 | { |
2491 | 2532 | error_print ("Error while connecting\n"); |
2492 | 2533 | } |
2886 | 2927 | GtkWidget *hostname_label; |
2887 | 2928 | GtkWidget *loop_button; |
2888 | 2929 | GtkWidget *autoplay_switch; |
2889 | char *glade_file = malloc (PATH_MAX); | |
2890 | char *css_file = malloc (PATH_MAX); | |
2891 | char hostname[LABEL_MAX]; | |
2892 | ||
2893 | if (snprintf | |
2894 | (glade_file, PATH_MAX, "%s/%s/res/gui.glade", DATADIR, | |
2895 | PACKAGE) >= PATH_MAX) | |
2896 | { | |
2897 | error_print ("Path too long\n"); | |
2898 | return -1; | |
2899 | } | |
2900 | ||
2901 | if (snprintf | |
2902 | (css_file, PATH_MAX, "%s/%s/res/gui.css", DATADIR, PACKAGE) >= PATH_MAX) | |
2903 | { | |
2904 | error_print ("Path too long\n"); | |
2905 | return -1; | |
2906 | } | |
2930 | gchar *glade_file; | |
2931 | gchar *css_file; | |
2932 | gchar hostname[LABEL_MAX]; | |
2933 | ||
2934 | glade_file = chain_path (DATADIR, "gui.glade"); | |
2935 | css_file = chain_path (DATADIR, "gui.css"); | |
2907 | 2936 | |
2908 | 2937 | gtk_init (&argc, &argv); |
2909 | 2938 | builder = gtk_builder_new (); |
3259 | 3288 | } |
3260 | 3289 | |
3261 | 3290 | audio_destroy (&audio); |
3291 | ||
3262 | 3292 | return EXIT_SUCCESS; |
3263 | 3293 | } |
3264 | 3294 |
177 | 177 | json_builder_add_string_value (builder, pkg->fw_version); |
178 | 178 | } |
179 | 179 | |
180 | if (pkg->device_desc->fss & FS_SAMPLES) | |
180 | if (pkg->device_desc->filesystems & FS_SAMPLES) | |
181 | 181 | { |
182 | 182 | for (resource = pkg->resources; resource; resource = resource->next) |
183 | 183 | { |
406 | 406 | if (!reader) |
407 | 407 | { |
408 | 408 | error_print ("Unable to read from parser. Continuing..."); |
409 | g_object_unref (reader); | |
410 | 409 | control->parts = 2; |
411 | 410 | goto get_payload; |
412 | 411 | } |
683 | 682 | json_reader_end_element (reader); |
684 | 683 | json_reader_end_element (reader); |
685 | 684 | |
686 | if (!(pkg->device_desc->fss & FS_SAMPLES)) | |
687 | { | |
688 | ret = 0; | |
689 | goto cleanup_reader; | |
690 | } | |
691 | ||
692 | if (!json_reader_read_member (reader, PKG_TAG_SAMPLES) | |
693 | || !json_reader_is_array (reader)) | |
694 | { | |
695 | debug_print (1, "No samples found\n"); | |
685 | if (!json_reader_read_member (reader, PKG_TAG_SAMPLES)) | |
686 | { | |
687 | if (pkg->device_desc->filesystems & FS_SAMPLES) | |
688 | { | |
689 | debug_print (1, "No samples found\n"); | |
690 | } | |
696 | 691 | control->parts = 1; // Only payload and it's done. |
697 | 692 | control->part = 0; |
698 | 693 | set_job_control_progress (control, 1.0); |
694 | goto cleanup_reader; | |
695 | } | |
696 | ||
697 | if (!json_reader_is_array (reader)) | |
698 | { | |
699 | error_print ("Member '%s' is not an array. Skipping samples...\n", | |
700 | PKG_TAG_SAMPLES); | |
701 | ret = -1; | |
699 | 702 | goto cleanup_reader; |
700 | 703 | } |
701 | 704 |
24 | 24 | #include "preferences.h" |
25 | 25 | #include "utils.h" |
26 | 26 | |
27 | #define CONF_DIR "~/.config/elektroid" | |
28 | #define CONF_FILE "/preferences.json" | |
27 | #define PREFERENCES_FILE "/preferences.json" | |
29 | 28 | |
30 | 29 | #define MEMBER_AUTOPLAY "autoplay" |
31 | 30 | #define MEMBER_LOCALDIR "localDir" |
45 | 44 | S_IFDIR | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | |
46 | 45 | S_IXOTH)) |
47 | 46 | { |
47 | error_print ("Error wile creating directory `%s'\n", CONF_DIR); | |
48 | 48 | return 1; |
49 | 49 | } |
50 | 50 | |
51 | 51 | n = PATH_MAX - strlen (preferences_path) - 1; |
52 | strncat (preferences_path, CONF_FILE, n); | |
52 | strncat (preferences_path, PREFERENCES_FILE, n); | |
53 | 53 | preferences_path[PATH_MAX - 1] = 0; |
54 | 54 | |
55 | 55 | debug_print (1, "Saving preferences to '%s'...\n", preferences_path); |
89 | 89 | GError *error; |
90 | 90 | JsonReader *reader; |
91 | 91 | JsonParser *parser = json_parser_new (); |
92 | gchar *preferences_file = get_expanded_dir (CONF_DIR CONF_FILE); | |
92 | gchar *preferences_file = get_expanded_dir (CONF_DIR PREFERENCES_FILE); | |
93 | 93 | |
94 | 94 | error = NULL; |
95 | 95 | json_parser_load_from_file (parser, preferences_file, &error); |
96 | 96 | if (error) |
97 | 97 | { |
98 | error_print ("Error wile loading preferences from `%s': %s\n", | |
99 | CONF_DIR CONF_FILE, error->message); | |
98 | debug_print (1, "Error wile loading preferences from `%s': %s\n", | |
99 | CONF_DIR PREFERENCES_FILE, error->message); | |
100 | 100 | g_error_free (error); |
101 | 101 | g_object_unref (parser); |
102 | 102 | preferences->autoplay = TRUE; |
105 | 105 | } |
106 | 106 | |
107 | 107 | reader = json_reader_new (json_parser_get_root (parser)); |
108 | json_reader_read_member (reader, MEMBER_AUTOPLAY); | |
109 | preferences->autoplay = json_reader_get_boolean_value (reader); | |
108 | ||
109 | if (json_reader_read_member (reader, MEMBER_AUTOPLAY)) | |
110 | { | |
111 | preferences->autoplay = json_reader_get_boolean_value (reader); | |
112 | } | |
113 | else | |
114 | { | |
115 | preferences->autoplay = TRUE; | |
116 | } | |
110 | 117 | json_reader_end_member (reader); |
111 | json_reader_read_member (reader, MEMBER_LOCALDIR); | |
112 | preferences->local_dir = malloc (PATH_MAX); | |
113 | n = PATH_MAX - 1; | |
114 | strncpy (preferences->local_dir, json_reader_get_string_value (reader), n); | |
115 | preferences->local_dir[PATH_MAX - 1] = 0; | |
118 | ||
119 | if (json_reader_read_member (reader, MEMBER_LOCALDIR)) | |
120 | { | |
121 | preferences->local_dir = malloc (PATH_MAX); | |
122 | n = PATH_MAX - 1; | |
123 | strncpy (preferences->local_dir, json_reader_get_string_value (reader), | |
124 | n); | |
125 | preferences->local_dir[PATH_MAX - 1] = 0; | |
126 | } | |
127 | else | |
128 | { | |
129 | preferences->local_dir = get_expanded_dir ("~"); | |
130 | } | |
116 | 131 | json_reader_end_member (reader); |
132 | ||
117 | 133 | g_object_unref (reader); |
118 | 134 | g_object_unref (parser); |
119 | 135 |
546 | 546 | { |
547 | 547 | return sample_load_with_frames (path, sample, control, NULL); |
548 | 548 | } |
549 | ||
550 | gboolean | |
551 | sample_is_mp3_supported () | |
552 | { | |
553 | static char buffer[LABEL_MAX]; | |
554 | ||
555 | sf_command (NULL, SFC_GET_LIB_VERSION, buffer, LABEL_MAX); | |
556 | debug_print (1, "libsndfile version: %s...\n", buffer); | |
557 | if (strverscmp (buffer, "libsndfile-1.1.0") >= 0) | |
558 | { | |
559 | return TRUE; | |
560 | } | |
561 | ||
562 | return FALSE; | |
563 | } |
38 | 38 | gint sample_load_with_frames (const gchar *, GByteArray *, |
39 | 39 | struct job_control *, guint *); |
40 | 40 | |
41 | gboolean sample_is_mp3_supported (); | |
42 | ||
41 | 43 | #endif |
27 | 27 | |
28 | 28 | #define KIB 1024 |
29 | 29 | |
30 | #define DEVICES_FILE "/devices.json" | |
31 | ||
32 | #define DEV_TAG_ID "id" | |
33 | #define DEV_TAG_NAME "name" | |
34 | #define DEV_TAG_ALIAS "alias" | |
35 | #define DEV_TAG_FILESYSTEMS "filesystems" | |
36 | #define DEV_TAG_STORAGE "storage" | |
37 | ||
30 | 38 | gint debug_level; |
31 | 39 | |
32 | 40 | static guint |
190 | 198 | dir = opendir (local_dir); |
191 | 199 | if (dir) |
192 | 200 | { |
193 | startup_path = malloc (PATH_MAX); | |
194 | realpath (local_dir, startup_path); | |
201 | startup_path = realpath (local_dir, NULL); | |
195 | 202 | } |
196 | 203 | else |
197 | 204 | { |
379 | 386 | gdouble v = (double) control->part / control->parts + p / control->parts; |
380 | 387 | control->callback (v); |
381 | 388 | } |
389 | ||
390 | gint | |
391 | load_device_desc (struct connector_device_desc *device_desc, guint8 id, | |
392 | const char *devices_filename_) | |
393 | { | |
394 | gint err, devices; | |
395 | JsonParser *parser; | |
396 | JsonReader *reader; | |
397 | gchar *devices_filename; | |
398 | GError *error = NULL; | |
399 | ||
400 | parser = json_parser_new (); | |
401 | ||
402 | if (devices_filename_) | |
403 | { | |
404 | devices_filename = strdup (devices_filename_); | |
405 | ||
406 | if (!json_parser_load_from_file (parser, devices_filename, &error)) | |
407 | { | |
408 | error_print ("%s", error->message); | |
409 | g_clear_error (&error); | |
410 | err = -ENODEV; | |
411 | goto cleanup_parser; | |
412 | } | |
413 | } | |
414 | else | |
415 | { | |
416 | devices_filename = get_expanded_dir (CONF_DIR DEVICES_FILE); | |
417 | ||
418 | if (!json_parser_load_from_file (parser, devices_filename, &error)) | |
419 | { | |
420 | debug_print (1, "%s\n", error->message); | |
421 | g_clear_error (&error); | |
422 | ||
423 | g_free (devices_filename); | |
424 | devices_filename = strdup (DATADIR DEVICES_FILE); | |
425 | ||
426 | debug_print (1, "Falling back to %s...\n", devices_filename); | |
427 | ||
428 | if (!json_parser_load_from_file (parser, devices_filename, &error)) | |
429 | { | |
430 | error_print ("%s", error->message); | |
431 | g_clear_error (&error); | |
432 | err = -ENODEV; | |
433 | goto cleanup_parser; | |
434 | } | |
435 | } | |
436 | } | |
437 | ||
438 | reader = json_reader_new (json_parser_get_root (parser)); | |
439 | if (!reader) | |
440 | { | |
441 | error_print ("Unable to read from parser"); | |
442 | err = -ENODEV; | |
443 | goto cleanup_parser; | |
444 | } | |
445 | ||
446 | if (!json_reader_is_array (reader)) | |
447 | { | |
448 | error_print ("Not an array\n"); | |
449 | err = -ENODEV; | |
450 | goto cleanup_reader; | |
451 | } | |
452 | ||
453 | devices = json_reader_count_elements (reader); | |
454 | if (!devices) | |
455 | { | |
456 | debug_print (1, "No devices found\n"); | |
457 | err = -ENODEV; | |
458 | goto cleanup_reader; | |
459 | } | |
460 | ||
461 | err = -ENODEV; | |
462 | for (int i = 0; i < devices; i++) | |
463 | { | |
464 | if (!json_reader_read_element (reader, i)) | |
465 | { | |
466 | error_print ("Cannot read element %d. Continuing...\n", i); | |
467 | continue; | |
468 | } | |
469 | ||
470 | if (!json_reader_read_member (reader, DEV_TAG_ID)) | |
471 | { | |
472 | error_print ("Cannot read member '%s'. Continuing...\n", | |
473 | DEV_TAG_ID); | |
474 | continue; | |
475 | } | |
476 | device_desc->id = json_reader_get_int_value (reader); | |
477 | json_reader_end_member (reader); | |
478 | ||
479 | if (device_desc->id != id) | |
480 | { | |
481 | json_reader_end_element (reader); | |
482 | continue; | |
483 | } | |
484 | ||
485 | err = 0; | |
486 | debug_print (1, "Device %d found\n", id); | |
487 | ||
488 | if (!json_reader_read_member (reader, DEV_TAG_NAME)) | |
489 | { | |
490 | error_print ("Cannot read member '%s'. Stopping...\n", | |
491 | DEV_TAG_NAME); | |
492 | json_reader_end_element (reader); | |
493 | err = -ENODEV; | |
494 | break; | |
495 | } | |
496 | device_desc->name = strdup (json_reader_get_string_value (reader)); | |
497 | json_reader_end_member (reader); | |
498 | ||
499 | if (!json_reader_read_member (reader, DEV_TAG_ALIAS)) | |
500 | { | |
501 | error_print ("Cannot read member '%s'. Stopping...\n", | |
502 | DEV_TAG_ALIAS); | |
503 | json_reader_end_element (reader); | |
504 | err = -ENODEV; | |
505 | break; | |
506 | } | |
507 | device_desc->alias = strdup (json_reader_get_string_value (reader)); | |
508 | json_reader_end_member (reader); | |
509 | ||
510 | if (!json_reader_read_member (reader, DEV_TAG_FILESYSTEMS)) | |
511 | { | |
512 | error_print ("Cannot read member '%s'. Stopping...\n", | |
513 | DEV_TAG_FILESYSTEMS); | |
514 | json_reader_end_element (reader); | |
515 | err = -ENODEV; | |
516 | break; | |
517 | } | |
518 | device_desc->filesystems = json_reader_get_int_value (reader); | |
519 | json_reader_end_member (reader); | |
520 | ||
521 | if (!json_reader_read_member (reader, DEV_TAG_STORAGE)) | |
522 | { | |
523 | error_print ("Cannot read member '%s'. Stopping...\n", | |
524 | DEV_TAG_STORAGE); | |
525 | json_reader_end_element (reader); | |
526 | err = -ENODEV; | |
527 | break; | |
528 | } | |
529 | device_desc->storage = json_reader_get_int_value (reader); | |
530 | json_reader_end_member (reader); | |
531 | ||
532 | break; | |
533 | } | |
534 | ||
535 | cleanup_reader: | |
536 | g_object_unref (reader); | |
537 | cleanup_parser: | |
538 | g_object_unref (parser); | |
539 | g_free (devices_filename); | |
540 | return err; | |
541 | } |
17 | 17 | * along with Elektroid. If not, see <http://www.gnu.org/licenses/>. |
18 | 18 | */ |
19 | 19 | |
20 | #include <stdio.h> | |
21 | #include <glib.h> | |
22 | ||
23 | 20 | #ifndef UTILS_H |
24 | 21 | #define UTILS_H |
22 | ||
23 | #include <stdio.h> | |
24 | #include <unistd.h> | |
25 | #include <glib.h> | |
26 | #include <json-glib/json-glib.h> | |
27 | #include "../config.h" | |
28 | ||
29 | #define CONF_DIR "~/.config/" PACKAGE | |
25 | 30 | |
26 | 31 | #define LABEL_MAX 128 |
27 | 32 | |
29 | 34 | #define ELEKTRON_SAMPLE_RATE 48000 |
30 | 35 | |
31 | 36 | #define debug_print(level, format, ...) if (level <= debug_level) fprintf(stderr, "DEBUG:" __FILE__ ":%d:(%s): " format, __LINE__, __FUNCTION__, ## __VA_ARGS__) |
32 | #define error_print(format, ...) fprintf(stderr, "\x1b[31mERROR:" __FILE__ ":%d:(%s): " format "\x1b[m", __LINE__, __FUNCTION__, ## __VA_ARGS__) | |
37 | #define error_print(format, ...) fprintf(stderr, "%sERROR:" __FILE__ ":%d:(%s): " format "%s", isatty(fileno(stderr)) ? "\x1b[31m" : "", __LINE__, __FUNCTION__, ## __VA_ARGS__, isatty(fileno(stderr)) ? "\x1b[m" : "") | |
33 | 38 | |
34 | 39 | enum item_type |
35 | 40 | { |
116 | 121 | const gchar *extension; |
117 | 122 | }; |
118 | 123 | |
124 | struct connector_device_desc | |
125 | { | |
126 | guint32 id; | |
127 | gchar *name; | |
128 | gchar *alias; | |
129 | guint8 filesystems; | |
130 | guint8 storage; | |
131 | }; | |
132 | ||
119 | 133 | extern int debug_level; |
120 | 134 | |
121 | 135 | gchar *debug_get_hex_data (gint, guint8 *, guint); |
157 | 171 | |
158 | 172 | void set_job_control_progress (struct job_control *, gdouble); |
159 | 173 | |
174 | gint load_device_desc (struct connector_device_desc *, guint8, const char *); | |
175 | ||
160 | 176 | #endif |
0 | 0 | TESTS = sample_fs_tests.sh data_fs_tests.sh |
1 | 1 | |
2 | 2 | EXTRA_DIST = \ |
3 | $(TESTS) \ | |
4 | res/square.wav | |
3 | $(TESTS) \ | |
4 | res/square.wav \ | |
5 | res/square_loop.wav \ | |
6 | res/SOUND.dtdata \ | |
7 | res/devices.json | |
5 | 8 | |
6 | 9 | AM_TESTS_ENVIRONMENT = \ |
7 | ecli='$(abs_top_builddir)'/src/elektroid-cli; \ | |
10 | ecli='$(abs_top_builddir)/src/elektroid-cli -f $(srcdir)/res/devices.json'; \ | |
8 | 11 | export ecli; |
0 | 0 | #!/usr/bin/env bash |
1 | ||
2 | function cleanupAndExitWithError () { | |
3 | $ecli cl-data $DEVICE:/soundbanks/H/1 | |
4 | $ecli cl-data $DEVICE:/soundbanks/H/62 | |
5 | $ecli cl-data $DEVICE:/soundbanks/H/63 | |
6 | $ecli cl-data $DEVICE:/soundbanks/H/64 | |
7 | $ecli cl-data $DEVICE:/soundbanks/H/256 | |
8 | exit 1 | |
9 | } | |
1 | 10 | |
2 | 11 | function get_sound_n_with_id () { |
3 | 12 | s="sound$1" |
16 | 25 | |
17 | 26 | echo "Testing data copy..." |
18 | 27 | $ecli cp-data $DEVICE:/soundbanks/A/1 $DEVICE:/soundbanks/H/64 |
19 | [ $? -ne 0 ] && exit 1 | |
28 | [ $? -ne 0 ] && cleanupAndExitWithError | |
20 | 29 | $ecli cp-data $DEVICE:/soundbanks/A/2 $DEVICE:/soundbanks/H/63 |
21 | [ $? -ne 0 ] && exit 1 | |
30 | [ $? -ne 0 ] && cleanupAndExitWithError | |
22 | 31 | output=$($ecli ls-data $DEVICE:/soundbanks/H) |
23 | 32 | actual=$(echo "$output" | grep "^F 64") |
24 | 33 | expected=$(get_sound_n_with_id 1 64) |
25 | [ "$actual" != "$expected" ] && exit 1 | |
34 | [ "$actual" != "$expected" ] && cleanupAndExitWithError | |
26 | 35 | actual=$(echo "$output" | grep "^F 63") |
27 | 36 | expected=$(get_sound_n_with_id 2 63) |
28 | [ "$actual" != "$expected" ] && exit 1 | |
37 | [ "$actual" != "$expected" ] && cleanupAndExitWithError | |
29 | 38 | |
30 | 39 | echo "Testing data move..." |
31 | 40 | $ecli mv-data $DEVICE:/soundbanks/H/64 $DEVICE:/soundbanks/H/62 |
32 | [ $? -ne 0 ] && exit 1 | |
41 | [ $? -ne 0 ] && cleanupAndExitWithError | |
33 | 42 | output=$($ecli ls-data $DEVICE:/soundbanks/H) |
34 | 43 | actual=$(echo "$output" | grep "^F 62") |
35 | 44 | expected=$(get_sound_n_with_id 1 62) |
36 | [ "$actual" != "$expected" ] && exit 1 | |
45 | [ "$actual" != "$expected" ] && cleanupAndExitWithError | |
37 | 46 | actual=$(echo "$output" | grep "^F 64") |
38 | [ -n "$actual" ] && exit 1 | |
47 | [ -n "$actual" ] && cleanupAndExitWithError | |
39 | 48 | |
40 | 49 | echo "Testing data swap..." |
41 | 50 | $ecli sw-data $DEVICE:/soundbanks/H/62 $DEVICE:/soundbanks/H/63 |
42 | [ $? -ne 0 ] && exit 1 | |
51 | [ $? -ne 0 ] && cleanupAndExitWithError | |
43 | 52 | output=$($ecli ls-data $DEVICE:/soundbanks/H) |
44 | 53 | actual=$(echo "$output" | grep "^F 62") |
45 | 54 | expected=$(get_sound_n_with_id 2 62) |
46 | [ "$actual" != "$expected" ] && exit 1 | |
55 | [ "$actual" != "$expected" ] && cleanupAndExitWithError | |
47 | 56 | actual=$(echo "$output" | grep "^F 63") |
48 | 57 | expected=$(get_sound_n_with_id 1 63) |
49 | [ "$actual" != "$expected" ] && exit 1 | |
58 | [ "$actual" != "$expected" ] && cleanupAndExitWithError | |
50 | 59 | |
51 | 60 | echo "Testing data clear..." |
52 | 61 | $ecli cl-data $DEVICE:/soundbanks/H/63 |
53 | [ $? -ne 0 ] && exit 1 | |
62 | [ $? -ne 0 ] && cleanupAndExitWithError | |
54 | 63 | $ecli cl-data $DEVICE:/soundbanks/H/62 |
55 | [ $? -ne 0 ] && exit 1 | |
64 | [ $? -ne 0 ] && cleanupAndExitWithError | |
56 | 65 | output=$($ecli ls-data $DEVICE:/soundbanks/H) |
57 | [ $(echo "$output" | grep "^F 62" | wc -l) -ne 0 ] && exit 1 | |
58 | [ $(echo "$output" | grep "^F 63" | wc -l) -ne 0 ] && exit 1 | |
66 | [ $(echo "$output" | grep "^F 62" | wc -l) -ne 0 ] && cleanupAndExitWithError | |
67 | [ $(echo "$output" | grep "^F 63" | wc -l) -ne 0 ] && cleanupAndExitWithError | |
59 | 68 | |
60 | 69 | echo "Testing upload..." |
61 | 70 | $ecli ul-data $srcdir/res/SOUND.dtdata $DEVICE:/soundbanks/H |
62 | [ $? -ne 0 ] && exit 1 | |
71 | [ $? -ne 0 ] && cleanupAndExitWithError | |
63 | 72 | id=$($ecli ls-data $DEVICE:/soundbanks/H | grep 'SOUND$' | awk '{print $2}') |
64 | 73 | |
65 | 74 | echo "Testing download..." |
66 | 75 | $ecli dl-data $DEVICE:/soundbanks/H/$id |
67 | [ $? -ne 0 ] && exit 1 | |
76 | [ $? -ne 0 ] && cleanupAndExitWithError | |
68 | 77 | ls "SOUND.dtdata" |
69 | 78 | cksum SOUND.dtdata |
70 | 79 | cksum $srcdir/res/SOUND.dtdata |
71 | 80 | actual_cksum="$(cksum SOUND.dtdata | awk '{print $1}')" |
72 | [ "$actual_cksum" != "$(cksum $srcdir/res/SOUND.dtdata | awk '{print $1}')" ] && exit 1 | |
81 | [ "$actual_cksum" != "$(cksum $srcdir/res/SOUND.dtdata | awk '{print $1}')" ] && cleanupAndExitWithError | |
73 | 82 | rm SOUND.dtdata |
74 | [ $? -ne 0 ] && exit 1 | |
83 | [ $? -ne 0 ] && cleanupAndExitWithError | |
75 | 84 | $ecli cl-data $DEVICE:/soundbanks/H/$id |
76 | [ $? -ne 0 ] && exit 1 | |
85 | [ $? -ne 0 ] && cleanupAndExitWithError | |
77 | 86 | |
78 | 87 | echo "Testing upload..." |
79 | $ecli ul-data $srcdir/res/SOUND.dtdata $DEVICE:/soundbanks/H | |
80 | [ $? -ne 0 ] && exit 1 | |
81 | id=$($ecli ls-data $DEVICE:/soundbanks/H/256 | grep 'SOUND$' | awk '{print $2}') | |
82 | [ $id != 256 ] && exit 1 | |
88 | $ecli ul-data $srcdir/res/SOUND.dtdata $DEVICE:/soundbanks/H/256 | |
89 | [ $? -ne 0 ] && cleanupAndExitWithError | |
90 | id=$($ecli ls-data $DEVICE:/soundbanks/H | grep 'SOUND$' | awk '{print $2}') | |
91 | [ $id != 256 ] && cleanupAndExitWithError | |
83 | 92 | |
84 | 93 | echo "Testing data clear..." |
85 | 94 | $ecli cl-data $DEVICE:/soundbanks/H/256 |
86 | [ $? -ne 0 ] && exit 1 | |
95 | [ $? -ne 0 ] && cleanupAndExitWithError | |
87 | 96 | |
88 | 97 | exit 0 |
Binary diff not shown
34 | 34 | [ $? -ne 0 ] && exit 1 |
35 | 35 | |
36 | 36 | output=$($ecli ls $DEVICE:/$TEST_NAME) |
37 | echo $output | |
38 | type=$(echo $output | awk '{print $1}') | |
39 | size=$(echo $output | awk '{print $2}') | |
40 | name=$(echo $output | awk '{print $4}') | |
37 | echo "$output" | |
38 | type=$(echo "$output" | head -n 1 | awk '{print $1}') | |
39 | size=$(echo "$output" | head -n 1 | awk '{print $2}') | |
40 | name=$(echo "$output" | head -n 1 | awk '{print $4}') | |
41 | 41 | [ "$type" != "F" ] || [ "$size" != "93.81KiB" ] || [ "$name" != "square" ] && exit 1 |
42 | 42 | |
43 | 43 | echo "Testing upload (nonexistent source)..." |